commit e8e46fa07e38d0af6b613441f630bc790fe851d0 Author: Jesse James Isler Date: Mon Mar 18 08:41:23 2024 +0100 Initial commit diff --git a/!!!INFO!!! Daggerheart Open Beta Playtest.md b/!!!INFO!!! Daggerheart Open Beta Playtest.md new file mode 100644 index 0000000..de72c2e --- /dev/null +++ b/!!!INFO!!! Daggerheart Open Beta Playtest.md @@ -0,0 +1,129 @@ +# Spiel Informationen +Willkommen zum open Beta-Spieltest für die neue PNP Framework - Daggerheart! Bevor wir beginnen, gebe ich euch noch kurz einige Worte des Rates mit! +## Das Spiel befindet sich noch in der aktiven Entwicklung. +Ihr könnt euch das wie bei einem Early Access Game vorstellen, da einige Spells noch ein wenig zu viel Schaden austeilen oder gewisse sachen noch unfair wirken. Genau das Selbe auch mit den Gegnern, welche euch heute entgegenstehen. +## Auch wenn das Spiel noch in der Beta ist; Streams sind erlaubt und sogar erwünscht! +Die Entwickler bitten einfach darum, dass WENN gestreamt wird, dass angemerkt wird, dass sich das Spiel noch in der BETA befindet. Dies ist wichtig, da sich die Spielmechaniken weiterentwickeln werden und die entwickler keine Verwirrung wollen, wenn das endgültige Spiel erscheint. + +# James Tutorialomatik +Hier findet ihr eine kurze Übersicht WIE Daggerheart überhaupt funktioniert! Wenn euch Lesen anödet, und ihr Proficency in Englisch habt; so könnt ihr euch auch eine kleine Zusammenfassung von den Entwicklern hier ansehen: https://youtu.be/nYVrzqTPHRA + +## Was ist Daggerheart? +Daggerheart versucht ein modernes Pen & Paper zu sein, welches die Narration, Kopfkino, Gameplaymechanik und Taktik in einen grossen Topf wirft. Ebenfalls versucht Daggerfall die Spieler in die Story zu integrieren und den Spielern erlaubt, Gegenstände der Welt hinzuzdenken. (Kann von GM zu GM variieren) + +## Wie mache ich nun meine Aktionen? +In der Basis, basieren jegliche Aktionen die ihr macht auf den sogenannten "**DUALITY DICE**". Die **Duality Dice** sind an sich 2d12 welche sich in den Farben nicht ähneln. +![[Pasted image 20240316101811.png]]![[Pasted image 20240316101816.png]] + +Einer der beiden Würfel ist der **HOPE** (Hoffnung) Würfel, der andere der **FEAR** (Angst) Würfel. Sobald vom GM eine Aktion gewünscht wird, werden beide Würfel geworfen. Danach werden beide Würfel zusammengezählt und die Modifier hinzugefügt. Ist der **HOPE** würfel höher, so sagst du dein Resultat mit **HOPE** (Hoffnung) an. Ist der **FEAR** würfel höher, so sagst du dein Resultat mit **FEAR** an. + +Der Erfolg hängt jeh nach dem von dem GM festgelegten schwierigkeitswert ab. (Wie in 5E das DC system) + +| Sehr einfach | Einfach | Mittel | Schwer | Sehr schwer | Fast unmöglich | +| :----------: | :-----: | :----: | :----: | :---------: | :------------: | +| 5 | 10 | 15 | 20 | 25 | 30 | + +Dies sind die möglichen Auskommen der Würfel +> [!Tip] Kritischer Erfolg +> Beide Würfel, **HOPE** und **FEAR** Zeigen die gleiche Zahl +> *(Egal welche, auch 2x1)* +> - Du bekommst das, was du gewünscht hast, und ein wenig Mehr. +> - Füge dir eine **HOPE** und entferne einen Stress (Falls forhanden, wird später erklärt.) + +> [!check] Erfolg mit Hope +> Die Summe beider Würfel PLUS modifier übertreffen die DC. (Der **HOPE** Würfel ist höher als der **FEAR** Würfel) +> - Du bekommst das, was du gewünscht hast. +> - Füge deinem Character einen **HOPE-Point** hinzu + +> [!check] Erfolg mit Angst +> Bei einem Erfolg mit Angst bekommst du, was du willst, aber es ist mit Kosten oder Konsequenzen verbunden. Du könntest angegriffen werden, begrenzte Informationen erhalten, Gefahren anziehen usw. +> - Der GM erhält einen **FEAR-Point**. + +> [!failure] Bei einem Misserfolg mit Hope +> Die Dinge werden nicht nach Plan verlaufen. Du bekommst wahrscheinlich nicht, was du willst und musst die Konsequenzen tragen. +> - Füge deinem Character einen **HOPE-Point** hinzu + +> [!failure] Bei einem Misserfolg mit Angst +> Die Dinge laufen wirklich schlecht. Du bekommst wahrscheinlich nicht, was du willst, und es gibt eine große Konsequenz oder Komplikation deswegen. +> - Der GM erhält einen **FEAR-Point**. + +Ebenfalls kann vor dem Roll noch durch Nutzen von einem **FEAR-Point** eine **Experience** von deinem Charactersheet der Bonus davon genutzt werden. + +Nehmen wir an, ich der Spieler Möchte sich in einem Dungeon umsehen und ein Gefühl für den Raum erhalten. Der GM könnte dich dann fragen: +> Mach mir bitte einen **Action Throw** (Aktions Wurf) auf **Instinct** (Instinkt). + +Der Spieler könnte noch Fragen, ob er seine **Experience** (Erfahrung) als Architekt hinzufügen draft, wenn er einen **HOPE-Point** ausgibt.! + +![[Pasted image 20240316102648.png]] +Der Spieler wirft nun seine 2 Würfel, und diese landen wie folgend: + +| Hope Würfel | Fear Würfel | Instinkt Bonus | Experience | Resultat: | +| ----------- | ----------- | -------------- | ---------- | ------------- | +| 10 | 6 | +2 | +1 | 19 *mit Hope* | +Wie ihr oben Seht, hat der Spieler eine 18 *mit **HOPE*** gewürfelt, seinen Instinkt hinzugefügt und die Experience als Architekt hinzugefügt. + +Als GM könnte ich nun dem Spieler erklären: +> Du siehst, dass der Dungeon ausgehöhlt und dann mit Steinen verstärkt wurde. Würde hier eine grössere Explosion oder Erschütterung passieren, könnte es sein, dass ein Raum oder sogar der ganze Dungeon zusammenbricht! + +Neben den Action Rolls gibt es noch die **Reaction Rolls** (Reaktions Würfe). Reaction Rolls werden oft von Gegnern gefordert und agieren an sich wie **Action Rolls**. Der Unterschied ist, dass dieser Roll beim nicht bestehen dem GM keine Angriffstmöglichkeit gibt. Auch kanndir niemand mit Hope bei dem Wurf helfen,es passiert alles so schnell, dass du das alleine schaffen musst! +## Character +Die Erstellung des Character selbst werden wir in der RUNDE 0 machen. + +Aber ich werde auf das Charactersheet eingehen! +![[Pasted image 20240316141356.png]] +Das ist das Charactersheet auf [Daggerhearts Website](https://app.demiplane.com/nexus/daggerheart) Funktioniert an sich wie DND Beyond, nur anders :) + +## Evasion, Armor und HP + +Diese Punkte vom Charactersheet werden vor allem in Kampfsituationen gebraucht. + +Wird dein Character angegriffen, wird, so ist die Evasion die Nummer, welche vom Gamemaster überbieten werden muss. (In DND Terminologie kann man diese als ArmorClass ansehen) +![[Evasion.png]] + +Geht ein Angriff druch, So rolle den Schaden, welcher bei deiner Waffe steht. Nehmen wir an, dass der Schaden auf einer 13 Gelandet ist. +Dieser Schaden liegt nun zwischen 9 und 14, also eine **Major** wunde. +![[Pasted image 20240317150930.png]] +Dies würde 2 HP Schadenspunkte machen. +![[Pasted image 20240317162016.png]] + +**AAAABER**!! Errinnert ihr euch, vor 3 Bildern dass da ein "Armor" Slot war? +![[Pasted image 20240317162230.png]] +Wenn einer der Armor slots markiert wird, so kann der Wert der Armor (5) von dem einkommenden Schaden (13) entfernt werden. Dies setzt den Rest der Einkommenden Schaden auf 8, welches im "Minor" Bereich landet, und somit nur 1 HP Schaden nimmt. +![[Pasted image 20240317162625.png]] + +Sollte ein weiterer Armor Slot verwendet werden, um den Schaden unter 4 Damage gesetzt werden. So nimmt der Character anstelle von einem HP einen Stress! (Ist das Stress-Meter voll, so nimmt der Character trotzdem 1 HP Schaden) +![[Pasted image 20240317164536.png]] + +Stress wird oftmals auch für verschiedenste Aktivitäten oder Aktionen wie gewisse Spells oder Domain-Aktionen verwendet. + +Kommen wir noch kurz zu den Waffen selber, diese sind an sich ziemlich einfach abzuklären. + +Möchte jemand ein Monster angreifen So wirft jemand einen Attack Throw. Der Attack throw ist ein simpler Wurf mit dem Duality Dice, welcher dann mit dem benötigten Check dazugibt. + +Fast jede Waffe hat ein spezielles Feature; beispielsweise das von einem Unarmed Strike -Mein Beispiel ist, dass du jemanden mit Worten verletzen kannst und dann den Knowledge modifier für den Angriff dazuzählen kannst. + +![[Weapons.png]] + +Waffen sind ganz cool, aber es gibt noch etwas anderes schönes. Features und Domain Effects (Domänen Effekte)! + +## Features +Die Features formen euren Character tiefer. + +### Class Feature +Das Klassenfeature ist einzigartig pro klasse und kann + +*** +![[Pasted image 20240316142325.png]]! +*** +![[School.png]] +*** + +Diejenigen, die dämonische Vorfahren haben, sind die humanoiden Nachkommen der gefallenen Götter, die scharfe Eckzähne, spitze Ohren und Hörner besitzen, die es in einer Vielzahl von Stilen gibt. + +Furchtlos: Wenn du mit Furcht würfelst, kannst du dich dafür entscheiden, einen Stress zu markieren, anstatt dass die Spielleiterin Furcht erhält. + +Schreckensgesicht: Du hast einen Vorteil bei Würfen, um andere Nicht-Dämonen-Kreaturen einzuschüchtern. + +Diejenigen, die dämonische Vorfahren haben, sind die humanoiden Nachkommen der gefallenen Götter, die scharfe Eckzähne, spitze Ohren und Hörner besitzen, die es in einer Vielzahl von Stilen gibt. + +Während einige Dämonenhörner denen einer Ziege oder eines Widders ähneln, haben andere die Form eines durchdringenden Stachels. Es gibt keine Standardanzahl von Hörnern für Dämonen – obwohl zwei oder vier durchaus üblich sind – und einige haben Kronen aus vielen Hörnern oder nur einem. Sie können auch asymmetrisch wachsen und einzigartige Formen bilden, die Dämonen bekanntermaßen durch Schnitzereien und Ornamente verbessern. Ihre Haut, Haare und Hörner sind in einer Auswahl an kräftigen und lebendigen Farben wie rosigem Scharlachrot, tiefem Violett und pechschwarz erhältlich. Im Durchschnitt sind Dämonen zwischen 5 und 7 Fuß groß und haben bekanntermaßen lange Finger und spitze Nägel. \ No newline at end of file diff --git a/.obsidian/app.json b/.obsidian/app.json new file mode 100644 index 0000000..6abe4c1 --- /dev/null +++ b/.obsidian/app.json @@ -0,0 +1,3 @@ +{ + "alwaysUpdateLinks": true +} \ No newline at end of file diff --git a/.obsidian/appearance.json b/.obsidian/appearance.json new file mode 100644 index 0000000..1dee9b8 --- /dev/null +++ b/.obsidian/appearance.json @@ -0,0 +1,5 @@ +{ + "accentColor": "", + "baseFontSize": 22, + "cssTheme": "Atom" +} \ No newline at end of file diff --git a/.obsidian/community-plugins.json b/.obsidian/community-plugins.json new file mode 100644 index 0000000..aeae495 --- /dev/null +++ b/.obsidian/community-plugins.json @@ -0,0 +1,4 @@ +[ + "language-translator", + "obsidian-local-rest-api" +] \ 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..42a46ec --- /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": true +} \ No newline at end of file diff --git a/.obsidian/plugins/language-translator/data.json b/.obsidian/plugins/language-translator/data.json new file mode 100644 index 0000000..7bd1515 --- /dev/null +++ b/.obsidian/plugins/language-translator/data.json @@ -0,0 +1,17 @@ +{ + "targetLanguage": { + "text": "German", + "code": "de" + }, + "apiType": { + "text": "Builtin", + "value": "0" + }, + "translateApiUrl": "https://api.cognitive.microsofttranslator.com/translate?api-version=3.0", + "maxCharacters": 2000, + "token": "", + "region": { + "text": "Global", + "code": "global" + } +} \ No newline at end of file diff --git a/.obsidian/plugins/language-translator/main.js b/.obsidian/plugins/language-translator/main.js new file mode 100644 index 0000000..f464258 --- /dev/null +++ b/.obsidian/plugins/language-translator/main.js @@ -0,0 +1,490 @@ +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()); + }); +}; + +// src/main.ts +__export(exports, { + default: () => LanguageTranslator +}); +var import_obsidian3 = __toModule(require("obsidian")); + +// src/settingsTab.ts +var import_obsidian = __toModule(require("obsidian")); + +// src/apiTypes.ts +var API_TYPES; +(function(API_TYPES2) { + API_TYPES2[API_TYPES2["Builtin"] = 0] = "Builtin"; + API_TYPES2[API_TYPES2["Azure"] = 1] = "Azure"; + API_TYPES2[API_TYPES2["LibreTranslate"] = 2] = "LibreTranslate"; +})(API_TYPES || (API_TYPES = {})); +var apiTypes_default = API_TYPES; + +// src/apiUrls.ts +var API_URLS = { + AZURE_TRANSLATE_API_URL: "https://api.cognitive.microsofttranslator.com/translate?api-version=3.0", + LIBRE_TRANSLATE_API_URL: "https://libretranslate.com/translate" +}; +var apiUrls_default = API_URLS; + +// src/langCodes.ts +var langCodes = [ + { text: "Afrikaans", code: "af" }, + { text: "Albanian", code: "sq" }, + { text: "Amharic", code: "am" }, + { text: "Arabic", code: "ar" }, + { text: "Armenian", code: "hy" }, + { text: "Assamese", code: "as" }, + { text: "Azerbaijani", code: "" }, + { text: "Bangla", code: "bn" }, + { text: "Bashkir", code: "ba" }, + { text: "Bosnian (Latin)", code: "bs" }, + { text: "Bulgarian", code: "bg" }, + { text: "Cantonese (Traditional)", code: "yue" }, + { text: "Catalan", code: "ca" }, + { text: "Chinese (Literary)", code: "lzh" }, + { text: "Chinese Simplified", code: "zh-Hans" }, + { text: "Chinese Traditional", code: "zh-Hant" }, + { text: "Croatian", code: "hr" }, + { text: "Czech", code: "cs" }, + { text: "Danish", code: "da" }, + { text: "Dari", code: "prs" }, + { text: "Divehi", code: "dv" }, + { text: "Dutch", code: "nl" }, + { text: "English", code: "en" }, + { text: "Estonian", code: "et" }, + { text: "Fijian", code: "fj" }, + { text: "Filipino", code: "fil" }, + { text: "Finnish", code: "fi" }, + { text: "French", code: "fr" }, + { text: "French (Canada)", code: "fr-ca" }, + { text: "Georgian", code: "ka" }, + { text: "German", code: "de" }, + { text: "Greek", code: "el" }, + { text: "Gujarati", code: "gu" }, + { text: "Haitian Creole", code: "ht" }, + { text: "Hebrew", code: "he" }, + { text: "Hindi", code: "hi" }, + { text: "Hmong Daw", code: "mww" }, + { text: "Hungarian", code: "hu" }, + { text: "Icelandic", code: "is" }, + { text: "Indonesian", code: "id" }, + { text: "Inuktitut", code: "iu" }, + { text: "Irish", code: "ga" }, + { text: "Italian", code: "it" }, + { text: "Japanese", code: "ja" }, + { text: "Kannada", code: "kn" }, + { text: "Kazakh", code: "kk" }, + { text: "Khmer", code: "km" }, + { text: "Klingon", code: "tlh-Latn" }, + { text: "Klingon (plqaD)", code: "tlh-Piqd" }, + { text: "Korean", code: "ko" }, + { text: "Kurdish (Central)", code: "ku" }, + { text: "Kurdish (Northern)", code: "kmr" }, + { text: "Kyrgyz", code: "ky" }, + { text: "Lao", code: "lo" }, + { text: "Latvian", code: "lv" }, + { text: "Lithuanian", code: "lt" }, + { text: "Macedonian", code: "mk" }, + { text: "Malagasy", code: "mg" }, + { text: "Malay", code: "ms" }, + { text: "Malayalam", code: "ml" }, + { text: "Maltese", code: "mt" }, + { text: "Maori", code: "mi" }, + { text: "Marathi", code: "mr" }, + { text: "Mongolian (Cyrillic)", code: "mn-Cyrl" }, + { text: "Mongolian (Traditional)", code: "mn-Mong" }, + { text: "Myanmar", code: "my" }, + { text: "Nepali", code: "ne" }, + { text: "Norwegian", code: "nb" }, + { text: "Odia", code: "or" }, + { text: "Pashto", code: "ps" }, + { text: "Persian", code: "fa" }, + { text: "Polish", code: "pl" }, + { text: "Portuguese (Brazil)", code: "pt" }, + { text: "Portuguese (Portugal)", code: "pt-pt" }, + { text: "Punjabi", code: "pa" }, + { text: "Queretaro Otomi", code: "otq" }, + { text: "Romanian", code: "ro" }, + { text: "Russian", code: "ru" }, + { text: "Samoan", code: "sm" }, + { text: "Serbian (Cyrillic)", code: "sr-Cyrl" }, + { text: "Serbian (Latin)", code: "sr-Latn" }, + { text: "Slovak", code: "sk" }, + { text: "Slovenian", code: "sl" }, + { text: "Spanish", code: "es" }, + { text: "Swahili", code: "sw" }, + { text: "Swedish", code: "sv" }, + { text: "Tahitian", code: "ty" }, + { text: "Tamil", code: "ta" }, + { text: "Tatar", code: "tt" }, + { text: "Telugu", code: "te" }, + { text: "Thai", code: "th" }, + { text: "Tibetan", code: "bo" }, + { text: "Tigrinya", code: "ti" }, + { text: "Tongan", code: "to" }, + { text: "Turkish", code: "tr" }, + { text: "Turkmen", code: "tk" }, + { text: "Ukrainian", code: "uk" }, + { text: "Urdu", code: "ur" }, + { text: "Uyghur", code: "ug" }, + { text: "Uzbek (Latin)", code: "uz" }, + { text: "Vietnamese", code: "vi" }, + { text: "Welsh", code: "cy" }, + { text: "Yucatec Maya", code: "yua" } +]; +var langCodes_default = langCodes; + +// src/regions.ts +var regions = [ + { text: "Global", code: "global" }, + { text: "East Asia", code: "eastasia" }, + { text: "Southeast Asia", code: "southeastasia" }, + { text: "Central US", code: "centralus" }, + { text: "East US", code: "eastus" }, + { text: "East US 2", code: "eastus2" }, + { text: "West US", code: "westus" }, + { text: "North Central US", code: "northcentralus" }, + { text: "South Central US", code: "southcentralus" }, + { text: "North Europe", code: "northeurope" }, + { text: "West Europe", code: "westeurope" }, + { text: "Japan West", code: "japanwest" }, + { text: "Japan East", code: "japaneast" }, + { text: "Brazil South", code: "brazilsouth" }, + { text: "Australia East", code: "australiaeast" }, + { text: "Australia Southeast", code: "australiasoutheast" }, + { text: "South India", code: "southindia" }, + { text: "Central India", code: "centralindia" }, + { text: "West India", code: "westindia" }, + { text: "Canada Central", code: "canadacentral" }, + { text: "Canada East", code: "canadaeast" }, + { text: "UK South", code: "uksouth" }, + { text: "UK West", code: "ukwest" }, + { text: "West Central US", code: "westcentralus" }, + { text: "West US 2", code: "westus2" }, + { text: "Korea Central", code: "koreacentral" }, + { text: "Korea South", code: "koreasouth" }, + { text: "France Central", code: "francecentral" }, + { text: "France South", code: "francesouth" }, + { text: "Australia Central", code: "australiacentral" }, + { text: "Australia Central 2", code: "australiacentral2" }, + { text: "UAE Central", code: "uaecentral" }, + { text: "UAE North", code: "uaenorth" }, + { text: "South Africa North", code: "southafricanorth" }, + { text: "South Africa West", code: "southafricawest" }, + { text: "Switzerland North", code: "switzerlandnorth" }, + { text: "Switzerland West", code: "switzerlandwest" }, + { text: "Germany North", code: "germanynorth" }, + { text: "Germany West Central", code: "germanywestcentral" }, + { text: "Norway West", code: "norwaywest" }, + { text: "Norway East", code: "norwayeast" } +]; +var regions_default = regions; + +// src/settingsTab.ts +var apiEntries = [ + { + text: "Builtin", + value: "0" + }, + { + text: "Azure", + value: "1" + }, + { + text: "LibreTranslate", + value: "2" + } +]; +var LanguageTranslatorSettingsTab = class extends import_obsidian.PluginSettingTab { + constructor(app, plugin) { + super(app, plugin); + this.plugin = plugin; + } + display() { + let { containerEl } = this; + containerEl.empty(); + containerEl.createEl("h2", { text: "Language Translator Settings" }); + new import_obsidian.Setting(containerEl).setName("Target Language").setDesc("Set the translation target language (automatically detects source language)").addDropdown((dropDown) => { + langCodes_default.forEach((el) => { + dropDown.addOption(el.code, el.text); + }); + dropDown.onChange((value) => __async(this, null, function* () { + this.plugin.settings.targetLanguage = langCodes_default.find((l) => l.code == value); + yield this.plugin.saveSettings(); + })); + dropDown.setValue(this.plugin.settings.targetLanguage.code); + }); + new import_obsidian.Setting(containerEl).setName("Translator API Type").setDesc("Set preferred API").addDropdown((dropDown) => { + apiEntries.forEach((el) => { + dropDown.addOption(el.value, el.text); + }); + dropDown.onChange((value) => __async(this, null, function* () { + this.plugin.settings.apiType = apiEntries.find((a) => a.value == value); + switch (Number(value)) { + case apiTypes_default.Builtin: + case apiTypes_default.Azure: + this.plugin.settings.translateApiUrl = apiUrls_default.AZURE_TRANSLATE_API_URL; + this.apiUrlTextSetting.setValue(apiUrls_default.AZURE_TRANSLATE_API_URL); + this.plugin.settings.region = { + text: "Global", + code: "global" + }; + break; + case apiTypes_default.LibreTranslate: + this.plugin.settings.translateApiUrl = apiUrls_default.LIBRE_TRANSLATE_API_URL; + this.apiUrlTextSetting.setValue(apiUrls_default.LIBRE_TRANSLATE_API_URL); + break; + default: + this.plugin.settings.translateApiUrl = apiUrls_default.AZURE_TRANSLATE_API_URL; + this.apiUrlTextSetting.setValue(apiUrls_default.AZURE_TRANSLATE_API_URL); + break; + } + yield this.plugin.saveSettings(); + })); + dropDown.setValue(this.plugin.settings.apiType.value); + }); + new import_obsidian.Setting(containerEl).setName("Azure Translator Region").setDesc("Set regions").addDropdown((dropDown) => { + regions_default.forEach((el) => { + dropDown.addOption(el.code, el.text); + }); + dropDown.onChange((value) => __async(this, null, function* () { + this.plugin.settings.region = regions_default.find((l) => l.code == value); + yield this.plugin.saveSettings(); + })); + dropDown.setValue(this.plugin.settings.region.code); + }); + new import_obsidian.Setting(containerEl).setName("API Url").addTextArea((text) => { + text.setPlaceholder("Enter url").setValue(this.plugin.settings.translateApiUrl).onChange((value) => __async(this, null, function* () { + console.log("New api url: " + value); + this.plugin.settings.translateApiUrl = value; + yield this.plugin.saveSettings(); + })); + text.setValue(this.plugin.settings.translateApiUrl); + text.inputEl.setAttr("rows", 4); + text.inputEl.addClass("settings_area"); + this.apiUrlTextSetting = text; + }); + new import_obsidian.Setting(containerEl).setName("API Token").addText((text) => { + text.setPlaceholder("Enter token").setValue(this.plugin.settings.token).onChange((value) => __async(this, null, function* () { + this.plugin.settings.token = value; + yield this.plugin.saveSettings(); + })); + text.setValue(this.plugin.settings.token); + }); + } +}; + +// src/translationServiceImplementation.ts +var import_obsidian2 = __toModule(require("obsidian")); + +// src/translation.ts +function getTextLibreTranslate(text, lang, token, translateApiUrl) { + return __async(this, null, function* () { + let res = ""; + const payload = JSON.stringify({ + q: text, + source: "auto", + target: lang, + format: "text", + api_key: token + }); + const myHeaders = new Headers({ + "Content-type": "application/json" + }); + try { + const response = yield fetch(translateApiUrl, { + method: "POST", + body: payload, + headers: myHeaders + }); + let jsonResponse = yield response.json(); + res = jsonResponse.translatedText || jsonResponse.error; + } catch (err) { + console.error(err); + } + return res; + }); +} +function getTextAzure(text, lang, region, token, translateApiUrl) { + return __async(this, null, function* () { + let res = ""; + const payload = JSON.stringify([{ text }]); + const myHeaders = new Headers({ + "Ocp-Apim-Subscription-Key": token, + "Ocp-Apim-Subscription-Region": region, + "Content-type": "application/json" + }); + try { + const response = yield fetch(`${translateApiUrl}&to=${lang}`, { + method: "POST", + body: payload, + headers: myHeaders + }); + const json = yield response.json(); + if (json.error) { + res = json.error.message; + } else { + res = json[0].translations[0].text; + } + } catch (err) { + console.error(err); + } + return res; + }); +} + +// src/translationServiceImplementation.ts +var AZURE_BUILTIN_KEY = "0bb27e8d40864db0a9854d8793e4fbb7"; +var TranslationServiceImplementation = class { + constructor(plugin) { + this.getBuiltinAzureToken = () => __async(this, null, function* () { + try { + return AZURE_BUILTIN_KEY; + } catch (err) { + console.log(err); + new import_obsidian2.Notice(err.message); + } + }); + this.plugin = plugin; + } + translate(lang, text) { + return __async(this, null, function* () { + let result = ""; + switch (Number(this.plugin.settings.apiType.value)) { + case apiTypes_default.Builtin: + let token = yield this.getBuiltinAzureToken(); + result = yield getTextAzure(text, lang, "westeurope", token, this.plugin.settings.translateApiUrl); + break; + case apiTypes_default.Azure: + result = yield getTextAzure(text, lang, this.plugin.settings.region.code, this.plugin.settings.token, this.plugin.settings.translateApiUrl); + break; + case apiTypes_default.LibreTranslate: + result = yield getTextLibreTranslate(text, lang, this.plugin.settings.token, this.plugin.settings.translateApiUrl); + break; + } + return result; + }); + } +}; + +// src/main.ts +var MAX_CHARACTERS = 2e3; +var DEFAULT_SETTINGS = { + targetLanguage: { + text: "English", + code: "en" + }, + apiType: { + text: "Builtin", + value: "0" + }, + translateApiUrl: apiUrls_default.AZURE_TRANSLATE_API_URL, + maxCharacters: MAX_CHARACTERS, + token: "", + region: { + text: "Global", + code: "global" + } +}; +var LanguageTranslator = class extends import_obsidian3.Plugin { + constructor() { + super(...arguments); + this.onEditorCallback = (editor) => __async(this, null, function* () { + let res = "[translation error]"; + try { + const selection = editor.getSelection(); + if (selection.length > this.settings.maxCharacters) { + new import_obsidian3.Notice(`Exceeded ${this.settings.maxCharacters} max characters!`); + return; + } + let textForTranslation = selection; + let targetLang = this.settings.targetLanguage.code; + let firstSemicolonIndex = textForTranslation.indexOf(":"); + if (firstSemicolonIndex != -1) { + let potentialLangCode = textForTranslation.substring(0, firstSemicolonIndex); + if (potentialLangCode) { + let lc = langCodes_default.find((l) => l.code == potentialLangCode); + if (lc) { + targetLang = lc.code; + textForTranslation = textForTranslation.substring(firstSemicolonIndex + 1); + } + } + } + res = yield this.translationService.translate(targetLang, textForTranslation); + } catch (err) { + console.log(err); + new import_obsidian3.Notice(err.message); + } + editor.replaceSelection(res); + }); + } + onload() { + return __async(this, null, function* () { + this.translationService = new TranslationServiceImplementation(this); + yield this.loadSettings(); + this.addCommand({ + id: "language-translator-editor-command", + name: "Insert translation", + editorCallback: this.onEditorCallback, + hotkeys: [ + { + modifiers: ["Ctrl", "Shift"], + key: "R" + } + ] + }); + this.addSettingTab(new LanguageTranslatorSettingsTab(this.app, this)); + }); + } + 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); + }); + } +}; diff --git a/.obsidian/plugins/language-translator/manifest.json b/.obsidian/plugins/language-translator/manifest.json new file mode 100644 index 0000000..1f9f6ed --- /dev/null +++ b/.obsidian/plugins/language-translator/manifest.json @@ -0,0 +1,10 @@ +{ + "id": "language-translator", + "name": "Language Translator", + "version": "1.0.4", + "minAppVersion": "0.9.12", + "description": "Translates given text to desired language", + "author": "Florin Bobis", + "authorUrl": "https://florin.page", + "isDesktopOnly": false +} diff --git a/.obsidian/plugins/language-translator/styles.css b/.obsidian/plugins/language-translator/styles.css new file mode 100644 index 0000000..aea4ced --- /dev/null +++ b/.obsidian/plugins/language-translator/styles.css @@ -0,0 +1,6 @@ +.settings_area { + margin-left: 5px; + margin-right: 5px; + font-size: 14px; + width: 100%; +} diff --git a/.obsidian/plugins/obsidian-local-rest-api/data.json b/.obsidian/plugins/obsidian-local-rest-api/data.json new file mode 100644 index 0000000..cbedfee --- /dev/null +++ b/.obsidian/plugins/obsidian-local-rest-api/data.json @@ -0,0 +1,11 @@ +{ + "port": 27124, + "insecurePort": 27123, + "enableInsecureServer": true, + "apiKey": "7dfa68161c914feb2f61f920b644009bf4a54e0fbea290e9046ec3edcba8cc60", + "crypto": { + "cert": "-----BEGIN CERTIFICATE-----\r\nMIIDRTCCAi2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDExdPYnNp\r\nZGlhbiBMb2NhbCBSRVNUIEFQSTAeFw0yNDAzMTUxOTEwMjNaFw0yNTAzMTUxOTEw\r\nMjNaMCIxIDAeBgNVBAMTF09ic2lkaWFuIExvY2FsIFJFU1QgQVBJMIIBIjANBgkq\r\nhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs0vDDqInqHY56y0f2SRXXCWTDAzTZVfR\r\nDyX0dQC1rVP2AH4dkX06twKtq3qRLayUleeO/eXlgp+lFlB27Urkhk9OJ5swiCEl\r\nmPQyi6tgdrnpR9fY+B1353ouJiZOgo6W5WmfVjxzgXV6gVb2KR4UlyvaPpxvktPE\r\nj9kqTawtDEUvqUS5EAOGa3LR2XLwjqzeEVWCnZ7+bIZqcspwbo8Du+bNsLJZ0sQR\r\nbQpfb+fCF3cqsLHvDJ4ItSKsHAfnhSD/Eeu7IWZtA2pfg8NjTdqG2cjbsFxmTPKv\r\nXVB0a/SCDab333kV61Q08bXXw/G4eq83VHk3bkXbqAmW6yaVMxOnqQIDAQABo4GF\r\nMIGCMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgLEMDsGA1UdJQQ0MDIG\r\nCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcD\r\nCDARBglghkgBhvhCAQEEBAMCAPcwDwYDVR0RBAgwBocEfwAAATANBgkqhkiG9w0B\r\nAQsFAAOCAQEAS6pVrh7UFj0z9Jx3fxlpIYMftGdKMtcERn9l97lBVXGerlQpVt1n\r\nO3Y5bFdRlhxAjLNQqJxGofXcRzpIgakuQWUXfsvXjzYEycZ7OjJDjJzPC8OpvCvP\r\ndROJNGuN7VJNQiCTj+chy0CWcCW43kHhtB0x+doz960AFLn3FjYVKWOfzYnRkyvi\r\nEVSvYVd25QZHtVo+F0XnCWfGveBHauZV6pcxY2e6EIvLtUbIcFqnwi9E/Giier82\r\nCs3KKp3BVRRaFwa4gkMUrPtnkytOWRCmuBjjeM1fYFlaAdwNGK4Xn35Op9npx44i\r\nseZUDhjkgjR4n49xb4ukAV8gbvivDkiTaw==\r\n-----END CERTIFICATE-----\r\n", + "privateKey": "-----BEGIN RSA PRIVATE KEY-----\r\nMIIEpQIBAAKCAQEAs0vDDqInqHY56y0f2SRXXCWTDAzTZVfRDyX0dQC1rVP2AH4d\r\nkX06twKtq3qRLayUleeO/eXlgp+lFlB27Urkhk9OJ5swiCElmPQyi6tgdrnpR9fY\r\n+B1353ouJiZOgo6W5WmfVjxzgXV6gVb2KR4UlyvaPpxvktPEj9kqTawtDEUvqUS5\r\nEAOGa3LR2XLwjqzeEVWCnZ7+bIZqcspwbo8Du+bNsLJZ0sQRbQpfb+fCF3cqsLHv\r\nDJ4ItSKsHAfnhSD/Eeu7IWZtA2pfg8NjTdqG2cjbsFxmTPKvXVB0a/SCDab333kV\r\n61Q08bXXw/G4eq83VHk3bkXbqAmW6yaVMxOnqQIDAQABAoIBAA5sJPnfndiNgA20\r\noMf3Bib1p80zl+qiRIEXMMGbp8GUTCjQfEDohalUiBNP5e86X25qhMRUMqDOBjnU\r\nCaj/WgAaz4LclywQHIXf+NPm2njabhM3H+8fcbZ3S9CKSszyOt2j4CsP7Euo30yZ\r\nqe33Szk40BKywz/YlIpssdwzIiGHKbYZUA1HK782JdndBJXAZyqoO7if12/QkW4Y\r\nv2Wsk2I2iLl4b9dMgkTv3O4KJ9hlbxXO0kUzefrUYAyYSzhGEvCsu9zzmaM/D4Er\r\n0P7M8JU1fSlnD3TzPJ4xB26CGFSBUIq7htvqA9cJNmTK8fGTWYfWy3qz6OevBA/R\r\nX2j8gZ0CgYEA3x9pGlcujGzYrPpgxS/MCLNRIO6ejNX7j0oXrGxw6QRmnr73IGJm\r\nHyctm/utjXDvtVJg7SRXOLWwbDjkYdV0j1os+mBH8MmPSsJRs2PLjNJ5/Y6BpCeO\r\nJAsWBlJChRWZVfVblm7RfImeLRoqKS5gUZKl8+TjMp8rl6zeGZNY350CgYEAzbcg\r\noS6a68WfCJJy0eWDcWoKbuxeB4Yat61n+GWerZ+NWKt6/NkVVShFMyX97FEY5hQJ\r\nAys3vNy4Y6dYBn2CGvebLi1NUVeaC8wNGQGTwm5ylAiqPawBfTrdB5lZFNHN/coD\r\nZGRxWPhdItzlw+NqOEn/fLePVLdvR2BNmFFq2H0CgYEAyOa9ekw5y5NOXiJr8+Ef\r\ntE3RpPd2p5UdF149hrF10Tp3NET6u5weG7rpJGQvVwXzsK5mO+DW8GcYXbm0Wisa\r\n8uDdUuxSmorCjSv+6KnY5Am4cghYzvgW0nlw8WwsHSzfjjiIqSFLWvmHBVFj2QS7\r\nEXgcGUllEXWkiMPMj/bOtTkCgYEAyaDjV3ghmlPRY4p/BeHKKqB/52a/Zup3R26s\r\nSFf55j1LQgyZeDih4xycbtye/EAkgmZCyxtR/0frZql/6qSboCjurZzzenW9ZDC0\r\n6byVAe5VWWkAy3/K2d6XA7q3CGP3XffhyUV1n3mXd/NBNPWyh8dnpesYjjVY2YG3\r\nrEKo0dUCgYEA17HvI6nyzMVgxn8PAc8GM792WPSBa2z4BOl2XTV53l/b9mb0W8u4\r\nAOh+mVXrtHjhHEzpATcnNRpGq6cH7zlA8HzCHfxPN8Hb1krA11YGV82rOBy+01tr\r\nLlAdYiJ4osEBLO4Jh0eQTUlKbU40EDmYLaBiB72jLvtlsK3briBmSJw=\r\n-----END RSA PRIVATE KEY-----\r\n", + "publicKey": "-----BEGIN PUBLIC KEY-----\r\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs0vDDqInqHY56y0f2SRX\r\nXCWTDAzTZVfRDyX0dQC1rVP2AH4dkX06twKtq3qRLayUleeO/eXlgp+lFlB27Urk\r\nhk9OJ5swiCElmPQyi6tgdrnpR9fY+B1353ouJiZOgo6W5WmfVjxzgXV6gVb2KR4U\r\nlyvaPpxvktPEj9kqTawtDEUvqUS5EAOGa3LR2XLwjqzeEVWCnZ7+bIZqcspwbo8D\r\nu+bNsLJZ0sQRbQpfb+fCF3cqsLHvDJ4ItSKsHAfnhSD/Eeu7IWZtA2pfg8NjTdqG\r\n2cjbsFxmTPKvXVB0a/SCDab333kV61Q08bXXw/G4eq83VHk3bkXbqAmW6yaVMxOn\r\nqQIDAQAB\r\n-----END PUBLIC KEY-----\r\n" + } +} \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-local-rest-api/main.js b/.obsidian/plugins/obsidian-local-rest-api/main.js new file mode 100644 index 0000000..c192db5 --- /dev/null +++ b/.obsidian/plugins/obsidian-local-rest-api/main.js @@ -0,0 +1,47727 @@ +/* +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 __defProps = Object.defineProperties; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropDescs = Object.getOwnPropertyDescriptors; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getOwnPropSymbols = Object.getOwnPropertySymbols; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __propIsEnum = Object.prototype.propertyIsEnumerable; +var __pow = Math.pow; +var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; +var __spreadValues = (a, b) => { + for (var prop in b || (b = {})) + if (__hasOwnProp.call(b, prop)) + __defNormalProp(a, prop, b[prop]); + if (__getOwnPropSymbols) + for (var prop of __getOwnPropSymbols(b)) { + if (__propIsEnum.call(b, prop)) + __defNormalProp(a, prop, b[prop]); + } + return a; +}; +var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b)); +var __markAsModule = (target) => __defProp(target, "__esModule", { value: true }); +var __objRest = (source, exclude) => { + var target = {}; + for (var prop in source) + if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0) + target[prop] = source[prop]; + if (source != null && __getOwnPropSymbols) + for (var prop of __getOwnPropSymbols(source)) { + if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop)) + target[prop] = source[prop]; + } + return target; +}; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[Object.keys(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +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()); + }); +}; + +// node_modules/node-forge/lib/forge.js +var require_forge = __commonJS({ + "node_modules/node-forge/lib/forge.js"(exports2, module2) { + module2.exports = { + options: { + usePureJavaScript: false + } + }; + } +}); + +// node_modules/node-forge/lib/baseN.js +var require_baseN = __commonJS({ + "node_modules/node-forge/lib/baseN.js"(exports2, module2) { + var api = {}; + module2.exports = api; + var _reverseAlphabets = {}; + api.encode = function(input, alphabet, maxline) { + if (typeof alphabet !== "string") { + throw new TypeError('"alphabet" must be a string.'); + } + if (maxline !== void 0 && typeof maxline !== "number") { + throw new TypeError('"maxline" must be a number.'); + } + var output = ""; + if (!(input instanceof Uint8Array)) { + output = _encodeWithByteBuffer(input, alphabet); + } else { + var i = 0; + var base = alphabet.length; + var first = alphabet.charAt(0); + var digits = [0]; + for (i = 0; i < input.length; ++i) { + for (var j = 0, carry = input[i]; j < digits.length; ++j) { + carry += digits[j] << 8; + digits[j] = carry % base; + carry = carry / base | 0; + } + while (carry > 0) { + digits.push(carry % base); + carry = carry / base | 0; + } + } + for (i = 0; input[i] === 0 && i < input.length - 1; ++i) { + output += first; + } + for (i = digits.length - 1; i >= 0; --i) { + output += alphabet[digits[i]]; + } + } + if (maxline) { + var regex = new RegExp(".{1," + maxline + "}", "g"); + output = output.match(regex).join("\r\n"); + } + return output; + }; + api.decode = function(input, alphabet) { + if (typeof input !== "string") { + throw new TypeError('"input" must be a string.'); + } + if (typeof alphabet !== "string") { + throw new TypeError('"alphabet" must be a string.'); + } + var table = _reverseAlphabets[alphabet]; + if (!table) { + table = _reverseAlphabets[alphabet] = []; + for (var i = 0; i < alphabet.length; ++i) { + table[alphabet.charCodeAt(i)] = i; + } + } + input = input.replace(/\s/g, ""); + var base = alphabet.length; + var first = alphabet.charAt(0); + var bytes = [0]; + for (var i = 0; i < input.length; i++) { + var value = table[input.charCodeAt(i)]; + if (value === void 0) { + return; + } + for (var j = 0, carry = value; j < bytes.length; ++j) { + carry += bytes[j] * base; + bytes[j] = carry & 255; + carry >>= 8; + } + while (carry > 0) { + bytes.push(carry & 255); + carry >>= 8; + } + } + for (var k = 0; input[k] === first && k < input.length - 1; ++k) { + bytes.push(0); + } + if (typeof Buffer !== "undefined") { + return Buffer.from(bytes.reverse()); + } + return new Uint8Array(bytes.reverse()); + }; + function _encodeWithByteBuffer(input, alphabet) { + var i = 0; + var base = alphabet.length; + var first = alphabet.charAt(0); + var digits = [0]; + for (i = 0; i < input.length(); ++i) { + for (var j = 0, carry = input.at(i); j < digits.length; ++j) { + carry += digits[j] << 8; + digits[j] = carry % base; + carry = carry / base | 0; + } + while (carry > 0) { + digits.push(carry % base); + carry = carry / base | 0; + } + } + var output = ""; + for (i = 0; input.at(i) === 0 && i < input.length() - 1; ++i) { + output += first; + } + for (i = digits.length - 1; i >= 0; --i) { + output += alphabet[digits[i]]; + } + return output; + } + } +}); + +// node_modules/node-forge/lib/util.js +var require_util = __commonJS({ + "node_modules/node-forge/lib/util.js"(exports2, module2) { + var forge3 = require_forge(); + var baseN = require_baseN(); + var util = module2.exports = forge3.util = forge3.util || {}; + (function() { + if (typeof process !== "undefined" && process.nextTick && !process.browser) { + util.nextTick = process.nextTick; + if (typeof setImmediate === "function") { + util.setImmediate = setImmediate; + } else { + util.setImmediate = util.nextTick; + } + return; + } + if (typeof setImmediate === "function") { + util.setImmediate = function() { + return setImmediate.apply(void 0, arguments); + }; + util.nextTick = function(callback) { + return setImmediate(callback); + }; + return; + } + util.setImmediate = function(callback) { + setTimeout(callback, 0); + }; + if (typeof window !== "undefined" && typeof window.postMessage === "function") { + let handler2 = function(event) { + if (event.source === window && event.data === msg) { + event.stopPropagation(); + var copy = callbacks.slice(); + callbacks.length = 0; + copy.forEach(function(callback) { + callback(); + }); + } + }; + var handler = handler2; + var msg = "forge.setImmediate"; + var callbacks = []; + util.setImmediate = function(callback) { + callbacks.push(callback); + if (callbacks.length === 1) { + window.postMessage(msg, "*"); + } + }; + window.addEventListener("message", handler2, true); + } + if (typeof MutationObserver !== "undefined") { + var now = Date.now(); + var attr = true; + var div = document.createElement("div"); + var callbacks = []; + new MutationObserver(function() { + var copy = callbacks.slice(); + callbacks.length = 0; + copy.forEach(function(callback) { + callback(); + }); + }).observe(div, { attributes: true }); + var oldSetImmediate = util.setImmediate; + util.setImmediate = function(callback) { + if (Date.now() - now > 15) { + now = Date.now(); + oldSetImmediate(callback); + } else { + callbacks.push(callback); + if (callbacks.length === 1) { + div.setAttribute("a", attr = !attr); + } + } + }; + } + util.nextTick = util.setImmediate; + })(); + util.isNodejs = typeof process !== "undefined" && process.versions && process.versions.node; + util.globalScope = function() { + if (util.isNodejs) { + return global; + } + return typeof self === "undefined" ? window : self; + }(); + util.isArray = Array.isArray || function(x) { + return Object.prototype.toString.call(x) === "[object Array]"; + }; + util.isArrayBuffer = function(x) { + return typeof ArrayBuffer !== "undefined" && x instanceof ArrayBuffer; + }; + util.isArrayBufferView = function(x) { + return x && util.isArrayBuffer(x.buffer) && x.byteLength !== void 0; + }; + function _checkBitsParam(n) { + if (!(n === 8 || n === 16 || n === 24 || n === 32)) { + throw new Error("Only 8, 16, 24, or 32 bits supported: " + n); + } + } + util.ByteBuffer = ByteStringBuffer; + function ByteStringBuffer(b) { + this.data = ""; + this.read = 0; + if (typeof b === "string") { + this.data = b; + } else if (util.isArrayBuffer(b) || util.isArrayBufferView(b)) { + if (typeof Buffer !== "undefined" && b instanceof Buffer) { + this.data = b.toString("binary"); + } else { + var arr = new Uint8Array(b); + try { + this.data = String.fromCharCode.apply(null, arr); + } catch (e) { + for (var i = 0; i < arr.length; ++i) { + this.putByte(arr[i]); + } + } + } + } else if (b instanceof ByteStringBuffer || typeof b === "object" && typeof b.data === "string" && typeof b.read === "number") { + this.data = b.data; + this.read = b.read; + } + this._constructedStringLength = 0; + } + util.ByteStringBuffer = ByteStringBuffer; + var _MAX_CONSTRUCTED_STRING_LENGTH = 4096; + util.ByteStringBuffer.prototype._optimizeConstructedString = function(x) { + this._constructedStringLength += x; + if (this._constructedStringLength > _MAX_CONSTRUCTED_STRING_LENGTH) { + this.data.substr(0, 1); + this._constructedStringLength = 0; + } + }; + util.ByteStringBuffer.prototype.length = function() { + return this.data.length - this.read; + }; + util.ByteStringBuffer.prototype.isEmpty = function() { + return this.length() <= 0; + }; + util.ByteStringBuffer.prototype.putByte = function(b) { + return this.putBytes(String.fromCharCode(b)); + }; + util.ByteStringBuffer.prototype.fillWithByte = function(b, n) { + b = String.fromCharCode(b); + var d = this.data; + while (n > 0) { + if (n & 1) { + d += b; + } + n >>>= 1; + if (n > 0) { + b += b; + } + } + this.data = d; + this._optimizeConstructedString(n); + return this; + }; + util.ByteStringBuffer.prototype.putBytes = function(bytes) { + this.data += bytes; + this._optimizeConstructedString(bytes.length); + return this; + }; + util.ByteStringBuffer.prototype.putString = function(str) { + return this.putBytes(util.encodeUtf8(str)); + }; + util.ByteStringBuffer.prototype.putInt16 = function(i) { + return this.putBytes(String.fromCharCode(i >> 8 & 255) + String.fromCharCode(i & 255)); + }; + util.ByteStringBuffer.prototype.putInt24 = function(i) { + return this.putBytes(String.fromCharCode(i >> 16 & 255) + String.fromCharCode(i >> 8 & 255) + String.fromCharCode(i & 255)); + }; + util.ByteStringBuffer.prototype.putInt32 = function(i) { + return this.putBytes(String.fromCharCode(i >> 24 & 255) + String.fromCharCode(i >> 16 & 255) + String.fromCharCode(i >> 8 & 255) + String.fromCharCode(i & 255)); + }; + util.ByteStringBuffer.prototype.putInt16Le = function(i) { + return this.putBytes(String.fromCharCode(i & 255) + String.fromCharCode(i >> 8 & 255)); + }; + util.ByteStringBuffer.prototype.putInt24Le = function(i) { + return this.putBytes(String.fromCharCode(i & 255) + String.fromCharCode(i >> 8 & 255) + String.fromCharCode(i >> 16 & 255)); + }; + util.ByteStringBuffer.prototype.putInt32Le = function(i) { + return this.putBytes(String.fromCharCode(i & 255) + String.fromCharCode(i >> 8 & 255) + String.fromCharCode(i >> 16 & 255) + String.fromCharCode(i >> 24 & 255)); + }; + util.ByteStringBuffer.prototype.putInt = function(i, n) { + _checkBitsParam(n); + var bytes = ""; + do { + n -= 8; + bytes += String.fromCharCode(i >> n & 255); + } while (n > 0); + return this.putBytes(bytes); + }; + util.ByteStringBuffer.prototype.putSignedInt = function(i, n) { + if (i < 0) { + i += 2 << n - 1; + } + return this.putInt(i, n); + }; + util.ByteStringBuffer.prototype.putBuffer = function(buffer) { + return this.putBytes(buffer.getBytes()); + }; + util.ByteStringBuffer.prototype.getByte = function() { + return this.data.charCodeAt(this.read++); + }; + util.ByteStringBuffer.prototype.getInt16 = function() { + var rval = this.data.charCodeAt(this.read) << 8 ^ this.data.charCodeAt(this.read + 1); + this.read += 2; + return rval; + }; + util.ByteStringBuffer.prototype.getInt24 = function() { + var rval = this.data.charCodeAt(this.read) << 16 ^ this.data.charCodeAt(this.read + 1) << 8 ^ this.data.charCodeAt(this.read + 2); + this.read += 3; + return rval; + }; + util.ByteStringBuffer.prototype.getInt32 = function() { + var rval = this.data.charCodeAt(this.read) << 24 ^ this.data.charCodeAt(this.read + 1) << 16 ^ this.data.charCodeAt(this.read + 2) << 8 ^ this.data.charCodeAt(this.read + 3); + this.read += 4; + return rval; + }; + util.ByteStringBuffer.prototype.getInt16Le = function() { + var rval = this.data.charCodeAt(this.read) ^ this.data.charCodeAt(this.read + 1) << 8; + this.read += 2; + return rval; + }; + util.ByteStringBuffer.prototype.getInt24Le = function() { + var rval = this.data.charCodeAt(this.read) ^ this.data.charCodeAt(this.read + 1) << 8 ^ this.data.charCodeAt(this.read + 2) << 16; + this.read += 3; + return rval; + }; + util.ByteStringBuffer.prototype.getInt32Le = function() { + var rval = this.data.charCodeAt(this.read) ^ this.data.charCodeAt(this.read + 1) << 8 ^ this.data.charCodeAt(this.read + 2) << 16 ^ this.data.charCodeAt(this.read + 3) << 24; + this.read += 4; + return rval; + }; + util.ByteStringBuffer.prototype.getInt = function(n) { + _checkBitsParam(n); + var rval = 0; + do { + rval = (rval << 8) + this.data.charCodeAt(this.read++); + n -= 8; + } while (n > 0); + return rval; + }; + util.ByteStringBuffer.prototype.getSignedInt = function(n) { + var x = this.getInt(n); + var max = 2 << n - 2; + if (x >= max) { + x -= max << 1; + } + return x; + }; + util.ByteStringBuffer.prototype.getBytes = function(count) { + var rval; + if (count) { + count = Math.min(this.length(), count); + rval = this.data.slice(this.read, this.read + count); + this.read += count; + } else if (count === 0) { + rval = ""; + } else { + rval = this.read === 0 ? this.data : this.data.slice(this.read); + this.clear(); + } + return rval; + }; + util.ByteStringBuffer.prototype.bytes = function(count) { + return typeof count === "undefined" ? this.data.slice(this.read) : this.data.slice(this.read, this.read + count); + }; + util.ByteStringBuffer.prototype.at = function(i) { + return this.data.charCodeAt(this.read + i); + }; + util.ByteStringBuffer.prototype.setAt = function(i, b) { + this.data = this.data.substr(0, this.read + i) + String.fromCharCode(b) + this.data.substr(this.read + i + 1); + return this; + }; + util.ByteStringBuffer.prototype.last = function() { + return this.data.charCodeAt(this.data.length - 1); + }; + util.ByteStringBuffer.prototype.copy = function() { + var c = util.createBuffer(this.data); + c.read = this.read; + return c; + }; + util.ByteStringBuffer.prototype.compact = function() { + if (this.read > 0) { + this.data = this.data.slice(this.read); + this.read = 0; + } + return this; + }; + util.ByteStringBuffer.prototype.clear = function() { + this.data = ""; + this.read = 0; + return this; + }; + util.ByteStringBuffer.prototype.truncate = function(count) { + var len = Math.max(0, this.length() - count); + this.data = this.data.substr(this.read, len); + this.read = 0; + return this; + }; + util.ByteStringBuffer.prototype.toHex = function() { + var rval = ""; + for (var i = this.read; i < this.data.length; ++i) { + var b = this.data.charCodeAt(i); + if (b < 16) { + rval += "0"; + } + rval += b.toString(16); + } + return rval; + }; + util.ByteStringBuffer.prototype.toString = function() { + return util.decodeUtf8(this.bytes()); + }; + function DataBuffer(b, options) { + options = options || {}; + this.read = options.readOffset || 0; + this.growSize = options.growSize || 1024; + var isArrayBuffer = util.isArrayBuffer(b); + var isArrayBufferView = util.isArrayBufferView(b); + if (isArrayBuffer || isArrayBufferView) { + if (isArrayBuffer) { + this.data = new DataView(b); + } else { + this.data = new DataView(b.buffer, b.byteOffset, b.byteLength); + } + this.write = "writeOffset" in options ? options.writeOffset : this.data.byteLength; + return; + } + this.data = new DataView(new ArrayBuffer(0)); + this.write = 0; + if (b !== null && b !== void 0) { + this.putBytes(b); + } + if ("writeOffset" in options) { + this.write = options.writeOffset; + } + } + util.DataBuffer = DataBuffer; + util.DataBuffer.prototype.length = function() { + return this.write - this.read; + }; + util.DataBuffer.prototype.isEmpty = function() { + return this.length() <= 0; + }; + util.DataBuffer.prototype.accommodate = function(amount, growSize) { + if (this.length() >= amount) { + return this; + } + growSize = Math.max(growSize || this.growSize, amount); + var src = new Uint8Array(this.data.buffer, this.data.byteOffset, this.data.byteLength); + var dst = new Uint8Array(this.length() + growSize); + dst.set(src); + this.data = new DataView(dst.buffer); + return this; + }; + util.DataBuffer.prototype.putByte = function(b) { + this.accommodate(1); + this.data.setUint8(this.write++, b); + return this; + }; + util.DataBuffer.prototype.fillWithByte = function(b, n) { + this.accommodate(n); + for (var i = 0; i < n; ++i) { + this.data.setUint8(b); + } + return this; + }; + util.DataBuffer.prototype.putBytes = function(bytes, encoding) { + if (util.isArrayBufferView(bytes)) { + var src = new Uint8Array(bytes.buffer, bytes.byteOffset, bytes.byteLength); + var len = src.byteLength - src.byteOffset; + this.accommodate(len); + var dst = new Uint8Array(this.data.buffer, this.write); + dst.set(src); + this.write += len; + return this; + } + if (util.isArrayBuffer(bytes)) { + var src = new Uint8Array(bytes); + this.accommodate(src.byteLength); + var dst = new Uint8Array(this.data.buffer); + dst.set(src, this.write); + this.write += src.byteLength; + return this; + } + if (bytes instanceof util.DataBuffer || typeof bytes === "object" && typeof bytes.read === "number" && typeof bytes.write === "number" && util.isArrayBufferView(bytes.data)) { + var src = new Uint8Array(bytes.data.byteLength, bytes.read, bytes.length()); + this.accommodate(src.byteLength); + var dst = new Uint8Array(bytes.data.byteLength, this.write); + dst.set(src); + this.write += src.byteLength; + return this; + } + if (bytes instanceof util.ByteStringBuffer) { + bytes = bytes.data; + encoding = "binary"; + } + encoding = encoding || "binary"; + if (typeof bytes === "string") { + var view; + if (encoding === "hex") { + this.accommodate(Math.ceil(bytes.length / 2)); + view = new Uint8Array(this.data.buffer, this.write); + this.write += util.binary.hex.decode(bytes, view, this.write); + return this; + } + if (encoding === "base64") { + this.accommodate(Math.ceil(bytes.length / 4) * 3); + view = new Uint8Array(this.data.buffer, this.write); + this.write += util.binary.base64.decode(bytes, view, this.write); + return this; + } + if (encoding === "utf8") { + bytes = util.encodeUtf8(bytes); + encoding = "binary"; + } + if (encoding === "binary" || encoding === "raw") { + this.accommodate(bytes.length); + view = new Uint8Array(this.data.buffer, this.write); + this.write += util.binary.raw.decode(view); + return this; + } + if (encoding === "utf16") { + this.accommodate(bytes.length * 2); + view = new Uint16Array(this.data.buffer, this.write); + this.write += util.text.utf16.encode(view); + return this; + } + throw new Error("Invalid encoding: " + encoding); + } + throw Error("Invalid parameter: " + bytes); + }; + util.DataBuffer.prototype.putBuffer = function(buffer) { + this.putBytes(buffer); + buffer.clear(); + return this; + }; + util.DataBuffer.prototype.putString = function(str) { + return this.putBytes(str, "utf16"); + }; + util.DataBuffer.prototype.putInt16 = function(i) { + this.accommodate(2); + this.data.setInt16(this.write, i); + this.write += 2; + return this; + }; + util.DataBuffer.prototype.putInt24 = function(i) { + this.accommodate(3); + this.data.setInt16(this.write, i >> 8 & 65535); + this.data.setInt8(this.write, i >> 16 & 255); + this.write += 3; + return this; + }; + util.DataBuffer.prototype.putInt32 = function(i) { + this.accommodate(4); + this.data.setInt32(this.write, i); + this.write += 4; + return this; + }; + util.DataBuffer.prototype.putInt16Le = function(i) { + this.accommodate(2); + this.data.setInt16(this.write, i, true); + this.write += 2; + return this; + }; + util.DataBuffer.prototype.putInt24Le = function(i) { + this.accommodate(3); + this.data.setInt8(this.write, i >> 16 & 255); + this.data.setInt16(this.write, i >> 8 & 65535, true); + this.write += 3; + return this; + }; + util.DataBuffer.prototype.putInt32Le = function(i) { + this.accommodate(4); + this.data.setInt32(this.write, i, true); + this.write += 4; + return this; + }; + util.DataBuffer.prototype.putInt = function(i, n) { + _checkBitsParam(n); + this.accommodate(n / 8); + do { + n -= 8; + this.data.setInt8(this.write++, i >> n & 255); + } while (n > 0); + return this; + }; + util.DataBuffer.prototype.putSignedInt = function(i, n) { + _checkBitsParam(n); + this.accommodate(n / 8); + if (i < 0) { + i += 2 << n - 1; + } + return this.putInt(i, n); + }; + util.DataBuffer.prototype.getByte = function() { + return this.data.getInt8(this.read++); + }; + util.DataBuffer.prototype.getInt16 = function() { + var rval = this.data.getInt16(this.read); + this.read += 2; + return rval; + }; + util.DataBuffer.prototype.getInt24 = function() { + var rval = this.data.getInt16(this.read) << 8 ^ this.data.getInt8(this.read + 2); + this.read += 3; + return rval; + }; + util.DataBuffer.prototype.getInt32 = function() { + var rval = this.data.getInt32(this.read); + this.read += 4; + return rval; + }; + util.DataBuffer.prototype.getInt16Le = function() { + var rval = this.data.getInt16(this.read, true); + this.read += 2; + return rval; + }; + util.DataBuffer.prototype.getInt24Le = function() { + var rval = this.data.getInt8(this.read) ^ this.data.getInt16(this.read + 1, true) << 8; + this.read += 3; + return rval; + }; + util.DataBuffer.prototype.getInt32Le = function() { + var rval = this.data.getInt32(this.read, true); + this.read += 4; + return rval; + }; + util.DataBuffer.prototype.getInt = function(n) { + _checkBitsParam(n); + var rval = 0; + do { + rval = (rval << 8) + this.data.getInt8(this.read++); + n -= 8; + } while (n > 0); + return rval; + }; + util.DataBuffer.prototype.getSignedInt = function(n) { + var x = this.getInt(n); + var max = 2 << n - 2; + if (x >= max) { + x -= max << 1; + } + return x; + }; + util.DataBuffer.prototype.getBytes = function(count) { + var rval; + if (count) { + count = Math.min(this.length(), count); + rval = this.data.slice(this.read, this.read + count); + this.read += count; + } else if (count === 0) { + rval = ""; + } else { + rval = this.read === 0 ? this.data : this.data.slice(this.read); + this.clear(); + } + return rval; + }; + util.DataBuffer.prototype.bytes = function(count) { + return typeof count === "undefined" ? this.data.slice(this.read) : this.data.slice(this.read, this.read + count); + }; + util.DataBuffer.prototype.at = function(i) { + return this.data.getUint8(this.read + i); + }; + util.DataBuffer.prototype.setAt = function(i, b) { + this.data.setUint8(i, b); + return this; + }; + util.DataBuffer.prototype.last = function() { + return this.data.getUint8(this.write - 1); + }; + util.DataBuffer.prototype.copy = function() { + return new util.DataBuffer(this); + }; + util.DataBuffer.prototype.compact = function() { + if (this.read > 0) { + var src = new Uint8Array(this.data.buffer, this.read); + var dst = new Uint8Array(src.byteLength); + dst.set(src); + this.data = new DataView(dst); + this.write -= this.read; + this.read = 0; + } + return this; + }; + util.DataBuffer.prototype.clear = function() { + this.data = new DataView(new ArrayBuffer(0)); + this.read = this.write = 0; + return this; + }; + util.DataBuffer.prototype.truncate = function(count) { + this.write = Math.max(0, this.length() - count); + this.read = Math.min(this.read, this.write); + return this; + }; + util.DataBuffer.prototype.toHex = function() { + var rval = ""; + for (var i = this.read; i < this.data.byteLength; ++i) { + var b = this.data.getUint8(i); + if (b < 16) { + rval += "0"; + } + rval += b.toString(16); + } + return rval; + }; + util.DataBuffer.prototype.toString = function(encoding) { + var view = new Uint8Array(this.data, this.read, this.length()); + encoding = encoding || "utf8"; + if (encoding === "binary" || encoding === "raw") { + return util.binary.raw.encode(view); + } + if (encoding === "hex") { + return util.binary.hex.encode(view); + } + if (encoding === "base64") { + return util.binary.base64.encode(view); + } + if (encoding === "utf8") { + return util.text.utf8.decode(view); + } + if (encoding === "utf16") { + return util.text.utf16.decode(view); + } + throw new Error("Invalid encoding: " + encoding); + }; + util.createBuffer = function(input, encoding) { + encoding = encoding || "raw"; + if (input !== void 0 && encoding === "utf8") { + input = util.encodeUtf8(input); + } + return new util.ByteBuffer(input); + }; + util.fillString = function(c, n) { + var s = ""; + while (n > 0) { + if (n & 1) { + s += c; + } + n >>>= 1; + if (n > 0) { + c += c; + } + } + return s; + }; + util.xorBytes = function(s1, s2, n) { + var s3 = ""; + var b = ""; + var t = ""; + var i = 0; + var c = 0; + for (; n > 0; --n, ++i) { + b = s1.charCodeAt(i) ^ s2.charCodeAt(i); + if (c >= 10) { + s3 += t; + t = ""; + c = 0; + } + t += String.fromCharCode(b); + ++c; + } + s3 += t; + return s3; + }; + util.hexToBytes = function(hex) { + var rval = ""; + var i = 0; + if (hex.length & true) { + i = 1; + rval += String.fromCharCode(parseInt(hex[0], 16)); + } + for (; i < hex.length; i += 2) { + rval += String.fromCharCode(parseInt(hex.substr(i, 2), 16)); + } + return rval; + }; + util.bytesToHex = function(bytes) { + return util.createBuffer(bytes).toHex(); + }; + util.int32ToBytes = function(i) { + return String.fromCharCode(i >> 24 & 255) + String.fromCharCode(i >> 16 & 255) + String.fromCharCode(i >> 8 & 255) + String.fromCharCode(i & 255); + }; + var _base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + var _base64Idx = [ + 62, + -1, + -1, + -1, + 63, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + -1, + -1, + -1, + 64, + -1, + -1, + -1, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + -1, + -1, + -1, + -1, + -1, + -1, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51 + ]; + var _base58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; + util.encode64 = function(input, maxline) { + var line = ""; + var output = ""; + var chr1, chr2, chr3; + var i = 0; + while (i < input.length) { + chr1 = input.charCodeAt(i++); + chr2 = input.charCodeAt(i++); + chr3 = input.charCodeAt(i++); + line += _base64.charAt(chr1 >> 2); + line += _base64.charAt((chr1 & 3) << 4 | chr2 >> 4); + if (isNaN(chr2)) { + line += "=="; + } else { + line += _base64.charAt((chr2 & 15) << 2 | chr3 >> 6); + line += isNaN(chr3) ? "=" : _base64.charAt(chr3 & 63); + } + if (maxline && line.length > maxline) { + output += line.substr(0, maxline) + "\r\n"; + line = line.substr(maxline); + } + } + output += line; + return output; + }; + util.decode64 = function(input) { + input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + var output = ""; + var enc1, enc2, enc3, enc4; + var i = 0; + while (i < input.length) { + enc1 = _base64Idx[input.charCodeAt(i++) - 43]; + enc2 = _base64Idx[input.charCodeAt(i++) - 43]; + enc3 = _base64Idx[input.charCodeAt(i++) - 43]; + enc4 = _base64Idx[input.charCodeAt(i++) - 43]; + output += String.fromCharCode(enc1 << 2 | enc2 >> 4); + if (enc3 !== 64) { + output += String.fromCharCode((enc2 & 15) << 4 | enc3 >> 2); + if (enc4 !== 64) { + output += String.fromCharCode((enc3 & 3) << 6 | enc4); + } + } + } + return output; + }; + util.encodeUtf8 = function(str) { + return unescape(encodeURIComponent(str)); + }; + util.decodeUtf8 = function(str) { + return decodeURIComponent(escape(str)); + }; + util.binary = { + raw: {}, + hex: {}, + base64: {}, + base58: {}, + baseN: { + encode: baseN.encode, + decode: baseN.decode + } + }; + util.binary.raw.encode = function(bytes) { + return String.fromCharCode.apply(null, bytes); + }; + util.binary.raw.decode = function(str, output, offset) { + var out = output; + if (!out) { + out = new Uint8Array(str.length); + } + offset = offset || 0; + var j = offset; + for (var i = 0; i < str.length; ++i) { + out[j++] = str.charCodeAt(i); + } + return output ? j - offset : out; + }; + util.binary.hex.encode = util.bytesToHex; + util.binary.hex.decode = function(hex, output, offset) { + var out = output; + if (!out) { + out = new Uint8Array(Math.ceil(hex.length / 2)); + } + offset = offset || 0; + var i = 0, j = offset; + if (hex.length & 1) { + i = 1; + out[j++] = parseInt(hex[0], 16); + } + for (; i < hex.length; i += 2) { + out[j++] = parseInt(hex.substr(i, 2), 16); + } + return output ? j - offset : out; + }; + util.binary.base64.encode = function(input, maxline) { + var line = ""; + var output = ""; + var chr1, chr2, chr3; + var i = 0; + while (i < input.byteLength) { + chr1 = input[i++]; + chr2 = input[i++]; + chr3 = input[i++]; + line += _base64.charAt(chr1 >> 2); + line += _base64.charAt((chr1 & 3) << 4 | chr2 >> 4); + if (isNaN(chr2)) { + line += "=="; + } else { + line += _base64.charAt((chr2 & 15) << 2 | chr3 >> 6); + line += isNaN(chr3) ? "=" : _base64.charAt(chr3 & 63); + } + if (maxline && line.length > maxline) { + output += line.substr(0, maxline) + "\r\n"; + line = line.substr(maxline); + } + } + output += line; + return output; + }; + util.binary.base64.decode = function(input, output, offset) { + var out = output; + if (!out) { + out = new Uint8Array(Math.ceil(input.length / 4) * 3); + } + input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + offset = offset || 0; + var enc1, enc2, enc3, enc4; + var i = 0, j = offset; + while (i < input.length) { + enc1 = _base64Idx[input.charCodeAt(i++) - 43]; + enc2 = _base64Idx[input.charCodeAt(i++) - 43]; + enc3 = _base64Idx[input.charCodeAt(i++) - 43]; + enc4 = _base64Idx[input.charCodeAt(i++) - 43]; + out[j++] = enc1 << 2 | enc2 >> 4; + if (enc3 !== 64) { + out[j++] = (enc2 & 15) << 4 | enc3 >> 2; + if (enc4 !== 64) { + out[j++] = (enc3 & 3) << 6 | enc4; + } + } + } + return output ? j - offset : out.subarray(0, j); + }; + util.binary.base58.encode = function(input, maxline) { + return util.binary.baseN.encode(input, _base58, maxline); + }; + util.binary.base58.decode = function(input, maxline) { + return util.binary.baseN.decode(input, _base58, maxline); + }; + util.text = { + utf8: {}, + utf16: {} + }; + util.text.utf8.encode = function(str, output, offset) { + str = util.encodeUtf8(str); + var out = output; + if (!out) { + out = new Uint8Array(str.length); + } + offset = offset || 0; + var j = offset; + for (var i = 0; i < str.length; ++i) { + out[j++] = str.charCodeAt(i); + } + return output ? j - offset : out; + }; + util.text.utf8.decode = function(bytes) { + return util.decodeUtf8(String.fromCharCode.apply(null, bytes)); + }; + util.text.utf16.encode = function(str, output, offset) { + var out = output; + if (!out) { + out = new Uint8Array(str.length * 2); + } + var view = new Uint16Array(out.buffer); + offset = offset || 0; + var j = offset; + var k = offset; + for (var i = 0; i < str.length; ++i) { + view[k++] = str.charCodeAt(i); + j += 2; + } + return output ? j - offset : out; + }; + util.text.utf16.decode = function(bytes) { + return String.fromCharCode.apply(null, new Uint16Array(bytes.buffer)); + }; + util.deflate = function(api, bytes, raw) { + bytes = util.decode64(api.deflate(util.encode64(bytes)).rval); + if (raw) { + var start = 2; + var flg = bytes.charCodeAt(1); + if (flg & 32) { + start = 6; + } + bytes = bytes.substring(start, bytes.length - 4); + } + return bytes; + }; + util.inflate = function(api, bytes, raw) { + var rval = api.inflate(util.encode64(bytes)).rval; + return rval === null ? null : util.decode64(rval); + }; + var _setStorageObject = function(api, id, obj) { + if (!api) { + throw new Error("WebStorage not available."); + } + var rval; + if (obj === null) { + rval = api.removeItem(id); + } else { + obj = util.encode64(JSON.stringify(obj)); + rval = api.setItem(id, obj); + } + if (typeof rval !== "undefined" && rval.rval !== true) { + var error = new Error(rval.error.message); + error.id = rval.error.id; + error.name = rval.error.name; + throw error; + } + }; + var _getStorageObject = function(api, id) { + if (!api) { + throw new Error("WebStorage not available."); + } + var rval = api.getItem(id); + if (api.init) { + if (rval.rval === null) { + if (rval.error) { + var error = new Error(rval.error.message); + error.id = rval.error.id; + error.name = rval.error.name; + throw error; + } + rval = null; + } else { + rval = rval.rval; + } + } + if (rval !== null) { + rval = JSON.parse(util.decode64(rval)); + } + return rval; + }; + var _setItem = function(api, id, key, data) { + var obj = _getStorageObject(api, id); + if (obj === null) { + obj = {}; + } + obj[key] = data; + _setStorageObject(api, id, obj); + }; + var _getItem = function(api, id, key) { + var rval = _getStorageObject(api, id); + if (rval !== null) { + rval = key in rval ? rval[key] : null; + } + return rval; + }; + var _removeItem = function(api, id, key) { + var obj = _getStorageObject(api, id); + if (obj !== null && key in obj) { + delete obj[key]; + var empty = true; + for (var prop in obj) { + empty = false; + break; + } + if (empty) { + obj = null; + } + _setStorageObject(api, id, obj); + } + }; + var _clearItems = function(api, id) { + _setStorageObject(api, id, null); + }; + var _callStorageFunction = function(func, args2, location) { + var rval = null; + if (typeof location === "undefined") { + location = ["web", "flash"]; + } + var type; + var done = false; + var exception = null; + for (var idx in location) { + type = location[idx]; + try { + if (type === "flash" || type === "both") { + if (args2[0] === null) { + throw new Error("Flash local storage not available."); + } + rval = func.apply(this, args2); + done = type === "flash"; + } + if (type === "web" || type === "both") { + args2[0] = localStorage; + rval = func.apply(this, args2); + done = true; + } + } catch (ex) { + exception = ex; + } + if (done) { + break; + } + } + if (!done) { + throw exception; + } + return rval; + }; + util.setItem = function(api, id, key, data, location) { + _callStorageFunction(_setItem, arguments, location); + }; + util.getItem = function(api, id, key, location) { + return _callStorageFunction(_getItem, arguments, location); + }; + util.removeItem = function(api, id, key, location) { + _callStorageFunction(_removeItem, arguments, location); + }; + util.clearItems = function(api, id, location) { + _callStorageFunction(_clearItems, arguments, location); + }; + util.isEmpty = function(obj) { + for (var prop in obj) { + if (obj.hasOwnProperty(prop)) { + return false; + } + } + return true; + }; + util.format = function(format) { + var re = /%./g; + var match; + var part; + var argi = 0; + var parts = []; + var last = 0; + while (match = re.exec(format)) { + part = format.substring(last, re.lastIndex - 2); + if (part.length > 0) { + parts.push(part); + } + last = re.lastIndex; + var code = match[0][1]; + switch (code) { + case "s": + case "o": + if (argi < arguments.length) { + parts.push(arguments[argi++ + 1]); + } else { + parts.push(""); + } + break; + case "%": + parts.push("%"); + break; + default: + parts.push("<%" + code + "?>"); + } + } + parts.push(format.substring(last)); + return parts.join(""); + }; + util.formatNumber = function(number, decimals, dec_point, thousands_sep) { + var n = number, c = isNaN(decimals = Math.abs(decimals)) ? 2 : decimals; + var d = dec_point === void 0 ? "," : dec_point; + var t = thousands_sep === void 0 ? "." : thousands_sep, s = n < 0 ? "-" : ""; + var i = parseInt(n = Math.abs(+n || 0).toFixed(c), 10) + ""; + var j = i.length > 3 ? i.length % 3 : 0; + return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : ""); + }; + util.formatSize = function(size) { + if (size >= 1073741824) { + size = util.formatNumber(size / 1073741824, 2, ".", "") + " GiB"; + } else if (size >= 1048576) { + size = util.formatNumber(size / 1048576, 2, ".", "") + " MiB"; + } else if (size >= 1024) { + size = util.formatNumber(size / 1024, 0) + " KiB"; + } else { + size = util.formatNumber(size, 0) + " bytes"; + } + return size; + }; + util.bytesFromIP = function(ip) { + if (ip.indexOf(".") !== -1) { + return util.bytesFromIPv4(ip); + } + if (ip.indexOf(":") !== -1) { + return util.bytesFromIPv6(ip); + } + return null; + }; + util.bytesFromIPv4 = function(ip) { + ip = ip.split("."); + if (ip.length !== 4) { + return null; + } + var b = util.createBuffer(); + for (var i = 0; i < ip.length; ++i) { + var num = parseInt(ip[i], 10); + if (isNaN(num)) { + return null; + } + b.putByte(num); + } + return b.getBytes(); + }; + util.bytesFromIPv6 = function(ip) { + var blanks = 0; + ip = ip.split(":").filter(function(e) { + if (e.length === 0) + ++blanks; + return true; + }); + var zeros = (8 - ip.length + blanks) * 2; + var b = util.createBuffer(); + for (var i = 0; i < 8; ++i) { + if (!ip[i] || ip[i].length === 0) { + b.fillWithByte(0, zeros); + zeros = 0; + continue; + } + var bytes = util.hexToBytes(ip[i]); + if (bytes.length < 2) { + b.putByte(0); + } + b.putBytes(bytes); + } + return b.getBytes(); + }; + util.bytesToIP = function(bytes) { + if (bytes.length === 4) { + return util.bytesToIPv4(bytes); + } + if (bytes.length === 16) { + return util.bytesToIPv6(bytes); + } + return null; + }; + util.bytesToIPv4 = function(bytes) { + if (bytes.length !== 4) { + return null; + } + var ip = []; + for (var i = 0; i < bytes.length; ++i) { + ip.push(bytes.charCodeAt(i)); + } + return ip.join("."); + }; + util.bytesToIPv6 = function(bytes) { + if (bytes.length !== 16) { + return null; + } + var ip = []; + var zeroGroups = []; + var zeroMaxGroup = 0; + for (var i = 0; i < bytes.length; i += 2) { + var hex = util.bytesToHex(bytes[i] + bytes[i + 1]); + while (hex[0] === "0" && hex !== "0") { + hex = hex.substr(1); + } + if (hex === "0") { + var last = zeroGroups[zeroGroups.length - 1]; + var idx = ip.length; + if (!last || idx !== last.end + 1) { + zeroGroups.push({ start: idx, end: idx }); + } else { + last.end = idx; + if (last.end - last.start > zeroGroups[zeroMaxGroup].end - zeroGroups[zeroMaxGroup].start) { + zeroMaxGroup = zeroGroups.length - 1; + } + } + } + ip.push(hex); + } + if (zeroGroups.length > 0) { + var group = zeroGroups[zeroMaxGroup]; + if (group.end - group.start > 0) { + ip.splice(group.start, group.end - group.start + 1, ""); + if (group.start === 0) { + ip.unshift(""); + } + if (group.end === 7) { + ip.push(""); + } + } + } + return ip.join(":"); + }; + util.estimateCores = function(options, callback) { + if (typeof options === "function") { + callback = options; + options = {}; + } + options = options || {}; + if ("cores" in util && !options.update) { + return callback(null, util.cores); + } + if (typeof navigator !== "undefined" && "hardwareConcurrency" in navigator && navigator.hardwareConcurrency > 0) { + util.cores = navigator.hardwareConcurrency; + return callback(null, util.cores); + } + if (typeof Worker === "undefined") { + util.cores = 1; + return callback(null, util.cores); + } + if (typeof Blob === "undefined") { + util.cores = 2; + return callback(null, util.cores); + } + var blobUrl = URL.createObjectURL(new Blob([ + "(", + function() { + self.addEventListener("message", function(e) { + var st = Date.now(); + var et = st + 4; + while (Date.now() < et) + ; + self.postMessage({ st, et }); + }); + }.toString(), + ")()" + ], { type: "application/javascript" })); + sample([], 5, 16); + function sample(max, samples, numWorkers) { + if (samples === 0) { + var avg = Math.floor(max.reduce(function(avg2, x) { + return avg2 + x; + }, 0) / max.length); + util.cores = Math.max(1, avg); + URL.revokeObjectURL(blobUrl); + return callback(null, util.cores); + } + map(numWorkers, function(err, results) { + max.push(reduce(numWorkers, results)); + sample(max, samples - 1, numWorkers); + }); + } + function map(numWorkers, callback2) { + var workers = []; + var results = []; + for (var i = 0; i < numWorkers; ++i) { + var worker = new Worker(blobUrl); + worker.addEventListener("message", function(e) { + results.push(e.data); + if (results.length === numWorkers) { + for (var i2 = 0; i2 < numWorkers; ++i2) { + workers[i2].terminate(); + } + callback2(null, results); + } + }); + workers.push(worker); + } + for (var i = 0; i < numWorkers; ++i) { + workers[i].postMessage(i); + } + } + function reduce(numWorkers, results) { + var overlaps = []; + for (var n = 0; n < numWorkers; ++n) { + var r1 = results[n]; + var overlap = overlaps[n] = []; + for (var i = 0; i < numWorkers; ++i) { + if (n === i) { + continue; + } + var r2 = results[i]; + if (r1.st > r2.st && r1.st < r2.et || r2.st > r1.st && r2.st < r1.et) { + overlap.push(i); + } + } + } + return overlaps.reduce(function(max, overlap2) { + return Math.max(max, overlap2.length); + }, 0); + } + }; + } +}); + +// node_modules/node-forge/lib/cipher.js +var require_cipher = __commonJS({ + "node_modules/node-forge/lib/cipher.js"(exports2, module2) { + var forge3 = require_forge(); + require_util(); + module2.exports = forge3.cipher = forge3.cipher || {}; + forge3.cipher.algorithms = forge3.cipher.algorithms || {}; + forge3.cipher.createCipher = function(algorithm, key) { + var api = algorithm; + if (typeof api === "string") { + api = forge3.cipher.getAlgorithm(api); + if (api) { + api = api(); + } + } + if (!api) { + throw new Error("Unsupported algorithm: " + algorithm); + } + return new forge3.cipher.BlockCipher({ + algorithm: api, + key, + decrypt: false + }); + }; + forge3.cipher.createDecipher = function(algorithm, key) { + var api = algorithm; + if (typeof api === "string") { + api = forge3.cipher.getAlgorithm(api); + if (api) { + api = api(); + } + } + if (!api) { + throw new Error("Unsupported algorithm: " + algorithm); + } + return new forge3.cipher.BlockCipher({ + algorithm: api, + key, + decrypt: true + }); + }; + forge3.cipher.registerAlgorithm = function(name, algorithm) { + name = name.toUpperCase(); + forge3.cipher.algorithms[name] = algorithm; + }; + forge3.cipher.getAlgorithm = function(name) { + name = name.toUpperCase(); + if (name in forge3.cipher.algorithms) { + return forge3.cipher.algorithms[name]; + } + return null; + }; + var BlockCipher = forge3.cipher.BlockCipher = function(options) { + this.algorithm = options.algorithm; + this.mode = this.algorithm.mode; + this.blockSize = this.mode.blockSize; + this._finish = false; + this._input = null; + this.output = null; + this._op = options.decrypt ? this.mode.decrypt : this.mode.encrypt; + this._decrypt = options.decrypt; + this.algorithm.initialize(options); + }; + BlockCipher.prototype.start = function(options) { + options = options || {}; + var opts = {}; + for (var key in options) { + opts[key] = options[key]; + } + opts.decrypt = this._decrypt; + this._finish = false; + this._input = forge3.util.createBuffer(); + this.output = options.output || forge3.util.createBuffer(); + this.mode.start(opts); + }; + BlockCipher.prototype.update = function(input) { + if (input) { + this._input.putBuffer(input); + } + while (!this._op.call(this.mode, this._input, this.output, this._finish) && !this._finish) { + } + this._input.compact(); + }; + BlockCipher.prototype.finish = function(pad) { + if (pad && (this.mode.name === "ECB" || this.mode.name === "CBC")) { + this.mode.pad = function(input) { + return pad(this.blockSize, input, false); + }; + this.mode.unpad = function(output) { + return pad(this.blockSize, output, true); + }; + } + var options = {}; + options.decrypt = this._decrypt; + options.overflow = this._input.length() % this.blockSize; + if (!this._decrypt && this.mode.pad) { + if (!this.mode.pad(this._input, options)) { + return false; + } + } + this._finish = true; + this.update(); + if (this._decrypt && this.mode.unpad) { + if (!this.mode.unpad(this.output, options)) { + return false; + } + } + if (this.mode.afterFinish) { + if (!this.mode.afterFinish(this.output, options)) { + return false; + } + } + return true; + }; + } +}); + +// node_modules/node-forge/lib/cipherModes.js +var require_cipherModes = __commonJS({ + "node_modules/node-forge/lib/cipherModes.js"(exports2, module2) { + var forge3 = require_forge(); + require_util(); + forge3.cipher = forge3.cipher || {}; + var modes = module2.exports = forge3.cipher.modes = forge3.cipher.modes || {}; + modes.ecb = function(options) { + options = options || {}; + this.name = "ECB"; + this.cipher = options.cipher; + this.blockSize = options.blockSize || 16; + this._ints = this.blockSize / 4; + this._inBlock = new Array(this._ints); + this._outBlock = new Array(this._ints); + }; + modes.ecb.prototype.start = function(options) { + }; + modes.ecb.prototype.encrypt = function(input, output, finish) { + if (input.length() < this.blockSize && !(finish && input.length() > 0)) { + return true; + } + for (var i = 0; i < this._ints; ++i) { + this._inBlock[i] = input.getInt32(); + } + this.cipher.encrypt(this._inBlock, this._outBlock); + for (var i = 0; i < this._ints; ++i) { + output.putInt32(this._outBlock[i]); + } + }; + modes.ecb.prototype.decrypt = function(input, output, finish) { + if (input.length() < this.blockSize && !(finish && input.length() > 0)) { + return true; + } + for (var i = 0; i < this._ints; ++i) { + this._inBlock[i] = input.getInt32(); + } + this.cipher.decrypt(this._inBlock, this._outBlock); + for (var i = 0; i < this._ints; ++i) { + output.putInt32(this._outBlock[i]); + } + }; + modes.ecb.prototype.pad = function(input, options) { + var padding = input.length() === this.blockSize ? this.blockSize : this.blockSize - input.length(); + input.fillWithByte(padding, padding); + return true; + }; + modes.ecb.prototype.unpad = function(output, options) { + if (options.overflow > 0) { + return false; + } + var len = output.length(); + var count = output.at(len - 1); + if (count > this.blockSize << 2) { + return false; + } + output.truncate(count); + return true; + }; + modes.cbc = function(options) { + options = options || {}; + this.name = "CBC"; + this.cipher = options.cipher; + this.blockSize = options.blockSize || 16; + this._ints = this.blockSize / 4; + this._inBlock = new Array(this._ints); + this._outBlock = new Array(this._ints); + }; + modes.cbc.prototype.start = function(options) { + if (options.iv === null) { + if (!this._prev) { + throw new Error("Invalid IV parameter."); + } + this._iv = this._prev.slice(0); + } else if (!("iv" in options)) { + throw new Error("Invalid IV parameter."); + } else { + this._iv = transformIV(options.iv, this.blockSize); + this._prev = this._iv.slice(0); + } + }; + modes.cbc.prototype.encrypt = function(input, output, finish) { + if (input.length() < this.blockSize && !(finish && input.length() > 0)) { + return true; + } + for (var i = 0; i < this._ints; ++i) { + this._inBlock[i] = this._prev[i] ^ input.getInt32(); + } + this.cipher.encrypt(this._inBlock, this._outBlock); + for (var i = 0; i < this._ints; ++i) { + output.putInt32(this._outBlock[i]); + } + this._prev = this._outBlock; + }; + modes.cbc.prototype.decrypt = function(input, output, finish) { + if (input.length() < this.blockSize && !(finish && input.length() > 0)) { + return true; + } + for (var i = 0; i < this._ints; ++i) { + this._inBlock[i] = input.getInt32(); + } + this.cipher.decrypt(this._inBlock, this._outBlock); + for (var i = 0; i < this._ints; ++i) { + output.putInt32(this._prev[i] ^ this._outBlock[i]); + } + this._prev = this._inBlock.slice(0); + }; + modes.cbc.prototype.pad = function(input, options) { + var padding = input.length() === this.blockSize ? this.blockSize : this.blockSize - input.length(); + input.fillWithByte(padding, padding); + return true; + }; + modes.cbc.prototype.unpad = function(output, options) { + if (options.overflow > 0) { + return false; + } + var len = output.length(); + var count = output.at(len - 1); + if (count > this.blockSize << 2) { + return false; + } + output.truncate(count); + return true; + }; + modes.cfb = function(options) { + options = options || {}; + this.name = "CFB"; + this.cipher = options.cipher; + this.blockSize = options.blockSize || 16; + this._ints = this.blockSize / 4; + this._inBlock = null; + this._outBlock = new Array(this._ints); + this._partialBlock = new Array(this._ints); + this._partialOutput = forge3.util.createBuffer(); + this._partialBytes = 0; + }; + modes.cfb.prototype.start = function(options) { + if (!("iv" in options)) { + throw new Error("Invalid IV parameter."); + } + this._iv = transformIV(options.iv, this.blockSize); + this._inBlock = this._iv.slice(0); + this._partialBytes = 0; + }; + modes.cfb.prototype.encrypt = function(input, output, finish) { + var inputLength = input.length(); + if (inputLength === 0) { + return true; + } + this.cipher.encrypt(this._inBlock, this._outBlock); + if (this._partialBytes === 0 && inputLength >= this.blockSize) { + for (var i = 0; i < this._ints; ++i) { + this._inBlock[i] = input.getInt32() ^ this._outBlock[i]; + output.putInt32(this._inBlock[i]); + } + return; + } + var partialBytes = (this.blockSize - inputLength) % this.blockSize; + if (partialBytes > 0) { + partialBytes = this.blockSize - partialBytes; + } + this._partialOutput.clear(); + for (var i = 0; i < this._ints; ++i) { + this._partialBlock[i] = input.getInt32() ^ this._outBlock[i]; + this._partialOutput.putInt32(this._partialBlock[i]); + } + if (partialBytes > 0) { + input.read -= this.blockSize; + } else { + for (var i = 0; i < this._ints; ++i) { + this._inBlock[i] = this._partialBlock[i]; + } + } + if (this._partialBytes > 0) { + this._partialOutput.getBytes(this._partialBytes); + } + if (partialBytes > 0 && !finish) { + output.putBytes(this._partialOutput.getBytes(partialBytes - this._partialBytes)); + this._partialBytes = partialBytes; + return true; + } + output.putBytes(this._partialOutput.getBytes(inputLength - this._partialBytes)); + this._partialBytes = 0; + }; + modes.cfb.prototype.decrypt = function(input, output, finish) { + var inputLength = input.length(); + if (inputLength === 0) { + return true; + } + this.cipher.encrypt(this._inBlock, this._outBlock); + if (this._partialBytes === 0 && inputLength >= this.blockSize) { + for (var i = 0; i < this._ints; ++i) { + this._inBlock[i] = input.getInt32(); + output.putInt32(this._inBlock[i] ^ this._outBlock[i]); + } + return; + } + var partialBytes = (this.blockSize - inputLength) % this.blockSize; + if (partialBytes > 0) { + partialBytes = this.blockSize - partialBytes; + } + this._partialOutput.clear(); + for (var i = 0; i < this._ints; ++i) { + this._partialBlock[i] = input.getInt32(); + this._partialOutput.putInt32(this._partialBlock[i] ^ this._outBlock[i]); + } + if (partialBytes > 0) { + input.read -= this.blockSize; + } else { + for (var i = 0; i < this._ints; ++i) { + this._inBlock[i] = this._partialBlock[i]; + } + } + if (this._partialBytes > 0) { + this._partialOutput.getBytes(this._partialBytes); + } + if (partialBytes > 0 && !finish) { + output.putBytes(this._partialOutput.getBytes(partialBytes - this._partialBytes)); + this._partialBytes = partialBytes; + return true; + } + output.putBytes(this._partialOutput.getBytes(inputLength - this._partialBytes)); + this._partialBytes = 0; + }; + modes.ofb = function(options) { + options = options || {}; + this.name = "OFB"; + this.cipher = options.cipher; + this.blockSize = options.blockSize || 16; + this._ints = this.blockSize / 4; + this._inBlock = null; + this._outBlock = new Array(this._ints); + this._partialOutput = forge3.util.createBuffer(); + this._partialBytes = 0; + }; + modes.ofb.prototype.start = function(options) { + if (!("iv" in options)) { + throw new Error("Invalid IV parameter."); + } + this._iv = transformIV(options.iv, this.blockSize); + this._inBlock = this._iv.slice(0); + this._partialBytes = 0; + }; + modes.ofb.prototype.encrypt = function(input, output, finish) { + var inputLength = input.length(); + if (input.length() === 0) { + return true; + } + this.cipher.encrypt(this._inBlock, this._outBlock); + if (this._partialBytes === 0 && inputLength >= this.blockSize) { + for (var i = 0; i < this._ints; ++i) { + output.putInt32(input.getInt32() ^ this._outBlock[i]); + this._inBlock[i] = this._outBlock[i]; + } + return; + } + var partialBytes = (this.blockSize - inputLength) % this.blockSize; + if (partialBytes > 0) { + partialBytes = this.blockSize - partialBytes; + } + this._partialOutput.clear(); + for (var i = 0; i < this._ints; ++i) { + this._partialOutput.putInt32(input.getInt32() ^ this._outBlock[i]); + } + if (partialBytes > 0) { + input.read -= this.blockSize; + } else { + for (var i = 0; i < this._ints; ++i) { + this._inBlock[i] = this._outBlock[i]; + } + } + if (this._partialBytes > 0) { + this._partialOutput.getBytes(this._partialBytes); + } + if (partialBytes > 0 && !finish) { + output.putBytes(this._partialOutput.getBytes(partialBytes - this._partialBytes)); + this._partialBytes = partialBytes; + return true; + } + output.putBytes(this._partialOutput.getBytes(inputLength - this._partialBytes)); + this._partialBytes = 0; + }; + modes.ofb.prototype.decrypt = modes.ofb.prototype.encrypt; + modes.ctr = function(options) { + options = options || {}; + this.name = "CTR"; + this.cipher = options.cipher; + this.blockSize = options.blockSize || 16; + this._ints = this.blockSize / 4; + this._inBlock = null; + this._outBlock = new Array(this._ints); + this._partialOutput = forge3.util.createBuffer(); + this._partialBytes = 0; + }; + modes.ctr.prototype.start = function(options) { + if (!("iv" in options)) { + throw new Error("Invalid IV parameter."); + } + this._iv = transformIV(options.iv, this.blockSize); + this._inBlock = this._iv.slice(0); + this._partialBytes = 0; + }; + modes.ctr.prototype.encrypt = function(input, output, finish) { + var inputLength = input.length(); + if (inputLength === 0) { + return true; + } + this.cipher.encrypt(this._inBlock, this._outBlock); + if (this._partialBytes === 0 && inputLength >= this.blockSize) { + for (var i = 0; i < this._ints; ++i) { + output.putInt32(input.getInt32() ^ this._outBlock[i]); + } + } else { + var partialBytes = (this.blockSize - inputLength) % this.blockSize; + if (partialBytes > 0) { + partialBytes = this.blockSize - partialBytes; + } + this._partialOutput.clear(); + for (var i = 0; i < this._ints; ++i) { + this._partialOutput.putInt32(input.getInt32() ^ this._outBlock[i]); + } + if (partialBytes > 0) { + input.read -= this.blockSize; + } + if (this._partialBytes > 0) { + this._partialOutput.getBytes(this._partialBytes); + } + if (partialBytes > 0 && !finish) { + output.putBytes(this._partialOutput.getBytes(partialBytes - this._partialBytes)); + this._partialBytes = partialBytes; + return true; + } + output.putBytes(this._partialOutput.getBytes(inputLength - this._partialBytes)); + this._partialBytes = 0; + } + inc32(this._inBlock); + }; + modes.ctr.prototype.decrypt = modes.ctr.prototype.encrypt; + modes.gcm = function(options) { + options = options || {}; + this.name = "GCM"; + this.cipher = options.cipher; + this.blockSize = options.blockSize || 16; + this._ints = this.blockSize / 4; + this._inBlock = new Array(this._ints); + this._outBlock = new Array(this._ints); + this._partialOutput = forge3.util.createBuffer(); + this._partialBytes = 0; + this._R = 3774873600; + }; + modes.gcm.prototype.start = function(options) { + if (!("iv" in options)) { + throw new Error("Invalid IV parameter."); + } + var iv = forge3.util.createBuffer(options.iv); + this._cipherLength = 0; + var additionalData; + if ("additionalData" in options) { + additionalData = forge3.util.createBuffer(options.additionalData); + } else { + additionalData = forge3.util.createBuffer(); + } + if ("tagLength" in options) { + this._tagLength = options.tagLength; + } else { + this._tagLength = 128; + } + this._tag = null; + if (options.decrypt) { + this._tag = forge3.util.createBuffer(options.tag).getBytes(); + if (this._tag.length !== this._tagLength / 8) { + throw new Error("Authentication tag does not match tag length."); + } + } + this._hashBlock = new Array(this._ints); + this.tag = null; + this._hashSubkey = new Array(this._ints); + this.cipher.encrypt([0, 0, 0, 0], this._hashSubkey); + this.componentBits = 4; + this._m = this.generateHashTable(this._hashSubkey, this.componentBits); + var ivLength = iv.length(); + if (ivLength === 12) { + this._j0 = [iv.getInt32(), iv.getInt32(), iv.getInt32(), 1]; + } else { + this._j0 = [0, 0, 0, 0]; + while (iv.length() > 0) { + this._j0 = this.ghash(this._hashSubkey, this._j0, [iv.getInt32(), iv.getInt32(), iv.getInt32(), iv.getInt32()]); + } + this._j0 = this.ghash(this._hashSubkey, this._j0, [0, 0].concat(from64To32(ivLength * 8))); + } + this._inBlock = this._j0.slice(0); + inc32(this._inBlock); + this._partialBytes = 0; + additionalData = forge3.util.createBuffer(additionalData); + this._aDataLength = from64To32(additionalData.length() * 8); + var overflow = additionalData.length() % this.blockSize; + if (overflow) { + additionalData.fillWithByte(0, this.blockSize - overflow); + } + this._s = [0, 0, 0, 0]; + while (additionalData.length() > 0) { + this._s = this.ghash(this._hashSubkey, this._s, [ + additionalData.getInt32(), + additionalData.getInt32(), + additionalData.getInt32(), + additionalData.getInt32() + ]); + } + }; + modes.gcm.prototype.encrypt = function(input, output, finish) { + var inputLength = input.length(); + if (inputLength === 0) { + return true; + } + this.cipher.encrypt(this._inBlock, this._outBlock); + if (this._partialBytes === 0 && inputLength >= this.blockSize) { + for (var i = 0; i < this._ints; ++i) { + output.putInt32(this._outBlock[i] ^= input.getInt32()); + } + this._cipherLength += this.blockSize; + } else { + var partialBytes = (this.blockSize - inputLength) % this.blockSize; + if (partialBytes > 0) { + partialBytes = this.blockSize - partialBytes; + } + this._partialOutput.clear(); + for (var i = 0; i < this._ints; ++i) { + this._partialOutput.putInt32(input.getInt32() ^ this._outBlock[i]); + } + if (partialBytes <= 0 || finish) { + if (finish) { + var overflow = inputLength % this.blockSize; + this._cipherLength += overflow; + this._partialOutput.truncate(this.blockSize - overflow); + } else { + this._cipherLength += this.blockSize; + } + for (var i = 0; i < this._ints; ++i) { + this._outBlock[i] = this._partialOutput.getInt32(); + } + this._partialOutput.read -= this.blockSize; + } + if (this._partialBytes > 0) { + this._partialOutput.getBytes(this._partialBytes); + } + if (partialBytes > 0 && !finish) { + input.read -= this.blockSize; + output.putBytes(this._partialOutput.getBytes(partialBytes - this._partialBytes)); + this._partialBytes = partialBytes; + return true; + } + output.putBytes(this._partialOutput.getBytes(inputLength - this._partialBytes)); + this._partialBytes = 0; + } + this._s = this.ghash(this._hashSubkey, this._s, this._outBlock); + inc32(this._inBlock); + }; + modes.gcm.prototype.decrypt = function(input, output, finish) { + var inputLength = input.length(); + if (inputLength < this.blockSize && !(finish && inputLength > 0)) { + return true; + } + this.cipher.encrypt(this._inBlock, this._outBlock); + inc32(this._inBlock); + this._hashBlock[0] = input.getInt32(); + this._hashBlock[1] = input.getInt32(); + this._hashBlock[2] = input.getInt32(); + this._hashBlock[3] = input.getInt32(); + this._s = this.ghash(this._hashSubkey, this._s, this._hashBlock); + for (var i = 0; i < this._ints; ++i) { + output.putInt32(this._outBlock[i] ^ this._hashBlock[i]); + } + if (inputLength < this.blockSize) { + this._cipherLength += inputLength % this.blockSize; + } else { + this._cipherLength += this.blockSize; + } + }; + modes.gcm.prototype.afterFinish = function(output, options) { + var rval = true; + if (options.decrypt && options.overflow) { + output.truncate(this.blockSize - options.overflow); + } + this.tag = forge3.util.createBuffer(); + var lengths = this._aDataLength.concat(from64To32(this._cipherLength * 8)); + this._s = this.ghash(this._hashSubkey, this._s, lengths); + var tag = []; + this.cipher.encrypt(this._j0, tag); + for (var i = 0; i < this._ints; ++i) { + this.tag.putInt32(this._s[i] ^ tag[i]); + } + this.tag.truncate(this.tag.length() % (this._tagLength / 8)); + if (options.decrypt && this.tag.bytes() !== this._tag) { + rval = false; + } + return rval; + }; + modes.gcm.prototype.multiply = function(x, y) { + var z_i = [0, 0, 0, 0]; + var v_i = y.slice(0); + for (var i = 0; i < 128; ++i) { + var x_i = x[i / 32 | 0] & 1 << 31 - i % 32; + if (x_i) { + z_i[0] ^= v_i[0]; + z_i[1] ^= v_i[1]; + z_i[2] ^= v_i[2]; + z_i[3] ^= v_i[3]; + } + this.pow(v_i, v_i); + } + return z_i; + }; + modes.gcm.prototype.pow = function(x, out) { + var lsb = x[3] & 1; + for (var i = 3; i > 0; --i) { + out[i] = x[i] >>> 1 | (x[i - 1] & 1) << 31; + } + out[0] = x[0] >>> 1; + if (lsb) { + out[0] ^= this._R; + } + }; + modes.gcm.prototype.tableMultiply = function(x) { + var z = [0, 0, 0, 0]; + for (var i = 0; i < 32; ++i) { + var idx = i / 8 | 0; + var x_i = x[idx] >>> (7 - i % 8) * 4 & 15; + var ah = this._m[i][x_i]; + z[0] ^= ah[0]; + z[1] ^= ah[1]; + z[2] ^= ah[2]; + z[3] ^= ah[3]; + } + return z; + }; + modes.gcm.prototype.ghash = function(h, y, x) { + y[0] ^= x[0]; + y[1] ^= x[1]; + y[2] ^= x[2]; + y[3] ^= x[3]; + return this.tableMultiply(y); + }; + modes.gcm.prototype.generateHashTable = function(h, bits) { + var multiplier = 8 / bits; + var perInt = 4 * multiplier; + var size = 16 * multiplier; + var m = new Array(size); + for (var i = 0; i < size; ++i) { + var tmp = [0, 0, 0, 0]; + var idx = i / perInt | 0; + var shft = (perInt - 1 - i % perInt) * bits; + tmp[idx] = 1 << bits - 1 << shft; + m[i] = this.generateSubHashTable(this.multiply(tmp, h), bits); + } + return m; + }; + modes.gcm.prototype.generateSubHashTable = function(mid, bits) { + var size = 1 << bits; + var half = size >>> 1; + var m = new Array(size); + m[half] = mid.slice(0); + var i = half >>> 1; + while (i > 0) { + this.pow(m[2 * i], m[i] = []); + i >>= 1; + } + i = 2; + while (i < half) { + for (var j = 1; j < i; ++j) { + var m_i = m[i]; + var m_j = m[j]; + m[i + j] = [ + m_i[0] ^ m_j[0], + m_i[1] ^ m_j[1], + m_i[2] ^ m_j[2], + m_i[3] ^ m_j[3] + ]; + } + i *= 2; + } + m[0] = [0, 0, 0, 0]; + for (i = half + 1; i < size; ++i) { + var c = m[i ^ half]; + m[i] = [mid[0] ^ c[0], mid[1] ^ c[1], mid[2] ^ c[2], mid[3] ^ c[3]]; + } + return m; + }; + function transformIV(iv, blockSize) { + if (typeof iv === "string") { + iv = forge3.util.createBuffer(iv); + } + if (forge3.util.isArray(iv) && iv.length > 4) { + var tmp = iv; + iv = forge3.util.createBuffer(); + for (var i = 0; i < tmp.length; ++i) { + iv.putByte(tmp[i]); + } + } + if (iv.length() < blockSize) { + throw new Error("Invalid IV length; got " + iv.length() + " bytes and expected " + blockSize + " bytes."); + } + if (!forge3.util.isArray(iv)) { + var ints = []; + var blocks = blockSize / 4; + for (var i = 0; i < blocks; ++i) { + ints.push(iv.getInt32()); + } + iv = ints; + } + return iv; + } + function inc32(block) { + block[block.length - 1] = block[block.length - 1] + 1 & 4294967295; + } + function from64To32(num) { + return [num / 4294967296 | 0, num & 4294967295]; + } + } +}); + +// node_modules/node-forge/lib/aes.js +var require_aes = __commonJS({ + "node_modules/node-forge/lib/aes.js"(exports2, module2) { + var forge3 = require_forge(); + require_cipher(); + require_cipherModes(); + require_util(); + module2.exports = forge3.aes = forge3.aes || {}; + forge3.aes.startEncrypting = function(key, iv, output, mode) { + var cipher = _createCipher({ + key, + output, + decrypt: false, + mode + }); + cipher.start(iv); + return cipher; + }; + forge3.aes.createEncryptionCipher = function(key, mode) { + return _createCipher({ + key, + output: null, + decrypt: false, + mode + }); + }; + forge3.aes.startDecrypting = function(key, iv, output, mode) { + var cipher = _createCipher({ + key, + output, + decrypt: true, + mode + }); + cipher.start(iv); + return cipher; + }; + forge3.aes.createDecryptionCipher = function(key, mode) { + return _createCipher({ + key, + output: null, + decrypt: true, + mode + }); + }; + forge3.aes.Algorithm = function(name, mode) { + if (!init) { + initialize(); + } + var self2 = this; + self2.name = name; + self2.mode = new mode({ + blockSize: 16, + cipher: { + encrypt: function(inBlock, outBlock) { + return _updateBlock(self2._w, inBlock, outBlock, false); + }, + decrypt: function(inBlock, outBlock) { + return _updateBlock(self2._w, inBlock, outBlock, true); + } + } + }); + self2._init = false; + }; + forge3.aes.Algorithm.prototype.initialize = function(options) { + if (this._init) { + return; + } + var key = options.key; + var tmp; + if (typeof key === "string" && (key.length === 16 || key.length === 24 || key.length === 32)) { + key = forge3.util.createBuffer(key); + } else if (forge3.util.isArray(key) && (key.length === 16 || key.length === 24 || key.length === 32)) { + tmp = key; + key = forge3.util.createBuffer(); + for (var i = 0; i < tmp.length; ++i) { + key.putByte(tmp[i]); + } + } + if (!forge3.util.isArray(key)) { + tmp = key; + key = []; + var len = tmp.length(); + if (len === 16 || len === 24 || len === 32) { + len = len >>> 2; + for (var i = 0; i < len; ++i) { + key.push(tmp.getInt32()); + } + } + } + if (!forge3.util.isArray(key) || !(key.length === 4 || key.length === 6 || key.length === 8)) { + throw new Error("Invalid key parameter."); + } + var mode = this.mode.name; + var encryptOp = ["CFB", "OFB", "CTR", "GCM"].indexOf(mode) !== -1; + this._w = _expandKey(key, options.decrypt && !encryptOp); + this._init = true; + }; + forge3.aes._expandKey = function(key, decrypt) { + if (!init) { + initialize(); + } + return _expandKey(key, decrypt); + }; + forge3.aes._updateBlock = _updateBlock; + registerAlgorithm("AES-ECB", forge3.cipher.modes.ecb); + registerAlgorithm("AES-CBC", forge3.cipher.modes.cbc); + registerAlgorithm("AES-CFB", forge3.cipher.modes.cfb); + registerAlgorithm("AES-OFB", forge3.cipher.modes.ofb); + registerAlgorithm("AES-CTR", forge3.cipher.modes.ctr); + registerAlgorithm("AES-GCM", forge3.cipher.modes.gcm); + function registerAlgorithm(name, mode) { + var factory = function() { + return new forge3.aes.Algorithm(name, mode); + }; + forge3.cipher.registerAlgorithm(name, factory); + } + var init = false; + var Nb = 4; + var sbox; + var isbox; + var rcon; + var mix; + var imix; + function initialize() { + init = true; + rcon = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54]; + var xtime = new Array(256); + for (var i = 0; i < 128; ++i) { + xtime[i] = i << 1; + xtime[i + 128] = i + 128 << 1 ^ 283; + } + sbox = new Array(256); + isbox = new Array(256); + mix = new Array(4); + imix = new Array(4); + for (var i = 0; i < 4; ++i) { + mix[i] = new Array(256); + imix[i] = new Array(256); + } + var e = 0, ei = 0, e2, e4, e8, sx, sx2, me, ime; + for (var i = 0; i < 256; ++i) { + sx = ei ^ ei << 1 ^ ei << 2 ^ ei << 3 ^ ei << 4; + sx = sx >> 8 ^ sx & 255 ^ 99; + sbox[e] = sx; + isbox[sx] = e; + sx2 = xtime[sx]; + e2 = xtime[e]; + e4 = xtime[e2]; + e8 = xtime[e4]; + me = sx2 << 24 ^ sx << 16 ^ sx << 8 ^ (sx ^ sx2); + ime = (e2 ^ e4 ^ e8) << 24 ^ (e ^ e8) << 16 ^ (e ^ e4 ^ e8) << 8 ^ (e ^ e2 ^ e8); + for (var n = 0; n < 4; ++n) { + mix[n][e] = me; + imix[n][sx] = ime; + me = me << 24 | me >>> 8; + ime = ime << 24 | ime >>> 8; + } + if (e === 0) { + e = ei = 1; + } else { + e = e2 ^ xtime[xtime[xtime[e2 ^ e8]]]; + ei ^= xtime[xtime[ei]]; + } + } + } + function _expandKey(key, decrypt) { + var w = key.slice(0); + var temp, iNk = 1; + var Nk = w.length; + var Nr1 = Nk + 6 + 1; + var end = Nb * Nr1; + for (var i = Nk; i < end; ++i) { + temp = w[i - 1]; + if (i % Nk === 0) { + temp = sbox[temp >>> 16 & 255] << 24 ^ sbox[temp >>> 8 & 255] << 16 ^ sbox[temp & 255] << 8 ^ sbox[temp >>> 24] ^ rcon[iNk] << 24; + iNk++; + } else if (Nk > 6 && i % Nk === 4) { + temp = sbox[temp >>> 24] << 24 ^ sbox[temp >>> 16 & 255] << 16 ^ sbox[temp >>> 8 & 255] << 8 ^ sbox[temp & 255]; + } + w[i] = w[i - Nk] ^ temp; + } + if (decrypt) { + var tmp; + var m0 = imix[0]; + var m1 = imix[1]; + var m2 = imix[2]; + var m3 = imix[3]; + var wnew = w.slice(0); + end = w.length; + for (var i = 0, wi = end - Nb; i < end; i += Nb, wi -= Nb) { + if (i === 0 || i === end - Nb) { + wnew[i] = w[wi]; + wnew[i + 1] = w[wi + 3]; + wnew[i + 2] = w[wi + 2]; + wnew[i + 3] = w[wi + 1]; + } else { + for (var n = 0; n < Nb; ++n) { + tmp = w[wi + n]; + wnew[i + (3 & -n)] = m0[sbox[tmp >>> 24]] ^ m1[sbox[tmp >>> 16 & 255]] ^ m2[sbox[tmp >>> 8 & 255]] ^ m3[sbox[tmp & 255]]; + } + } + } + w = wnew; + } + return w; + } + function _updateBlock(w, input, output, decrypt) { + var Nr = w.length / 4 - 1; + var m0, m1, m2, m3, sub; + if (decrypt) { + m0 = imix[0]; + m1 = imix[1]; + m2 = imix[2]; + m3 = imix[3]; + sub = isbox; + } else { + m0 = mix[0]; + m1 = mix[1]; + m2 = mix[2]; + m3 = mix[3]; + sub = sbox; + } + var a, b, c, d, a2, b2, c2; + a = input[0] ^ w[0]; + b = input[decrypt ? 3 : 1] ^ w[1]; + c = input[2] ^ w[2]; + d = input[decrypt ? 1 : 3] ^ w[3]; + var i = 3; + for (var round = 1; round < Nr; ++round) { + a2 = m0[a >>> 24] ^ m1[b >>> 16 & 255] ^ m2[c >>> 8 & 255] ^ m3[d & 255] ^ w[++i]; + b2 = m0[b >>> 24] ^ m1[c >>> 16 & 255] ^ m2[d >>> 8 & 255] ^ m3[a & 255] ^ w[++i]; + c2 = m0[c >>> 24] ^ m1[d >>> 16 & 255] ^ m2[a >>> 8 & 255] ^ m3[b & 255] ^ w[++i]; + d = m0[d >>> 24] ^ m1[a >>> 16 & 255] ^ m2[b >>> 8 & 255] ^ m3[c & 255] ^ w[++i]; + a = a2; + b = b2; + c = c2; + } + output[0] = sub[a >>> 24] << 24 ^ sub[b >>> 16 & 255] << 16 ^ sub[c >>> 8 & 255] << 8 ^ sub[d & 255] ^ w[++i]; + output[decrypt ? 3 : 1] = sub[b >>> 24] << 24 ^ sub[c >>> 16 & 255] << 16 ^ sub[d >>> 8 & 255] << 8 ^ sub[a & 255] ^ w[++i]; + output[2] = sub[c >>> 24] << 24 ^ sub[d >>> 16 & 255] << 16 ^ sub[a >>> 8 & 255] << 8 ^ sub[b & 255] ^ w[++i]; + output[decrypt ? 1 : 3] = sub[d >>> 24] << 24 ^ sub[a >>> 16 & 255] << 16 ^ sub[b >>> 8 & 255] << 8 ^ sub[c & 255] ^ w[++i]; + } + function _createCipher(options) { + options = options || {}; + var mode = (options.mode || "CBC").toUpperCase(); + var algorithm = "AES-" + mode; + var cipher; + if (options.decrypt) { + cipher = forge3.cipher.createDecipher(algorithm, options.key); + } else { + cipher = forge3.cipher.createCipher(algorithm, options.key); + } + var start = cipher.start; + cipher.start = function(iv, options2) { + var output = null; + if (options2 instanceof forge3.util.ByteBuffer) { + output = options2; + options2 = {}; + } + options2 = options2 || {}; + options2.output = output; + options2.iv = iv; + start.call(cipher, options2); + }; + return cipher; + } + } +}); + +// node_modules/node-forge/lib/oids.js +var require_oids = __commonJS({ + "node_modules/node-forge/lib/oids.js"(exports2, module2) { + var forge3 = require_forge(); + forge3.pki = forge3.pki || {}; + var oids = module2.exports = forge3.pki.oids = forge3.oids = forge3.oids || {}; + function _IN(id, name) { + oids[id] = name; + oids[name] = id; + } + function _I_(id, name) { + oids[id] = name; + } + _IN("1.2.840.113549.1.1.1", "rsaEncryption"); + _IN("1.2.840.113549.1.1.4", "md5WithRSAEncryption"); + _IN("1.2.840.113549.1.1.5", "sha1WithRSAEncryption"); + _IN("1.2.840.113549.1.1.7", "RSAES-OAEP"); + _IN("1.2.840.113549.1.1.8", "mgf1"); + _IN("1.2.840.113549.1.1.9", "pSpecified"); + _IN("1.2.840.113549.1.1.10", "RSASSA-PSS"); + _IN("1.2.840.113549.1.1.11", "sha256WithRSAEncryption"); + _IN("1.2.840.113549.1.1.12", "sha384WithRSAEncryption"); + _IN("1.2.840.113549.1.1.13", "sha512WithRSAEncryption"); + _IN("1.3.101.112", "EdDSA25519"); + _IN("1.2.840.10040.4.3", "dsa-with-sha1"); + _IN("1.3.14.3.2.7", "desCBC"); + _IN("1.3.14.3.2.26", "sha1"); + _IN("1.3.14.3.2.29", "sha1WithRSASignature"); + _IN("2.16.840.1.101.3.4.2.1", "sha256"); + _IN("2.16.840.1.101.3.4.2.2", "sha384"); + _IN("2.16.840.1.101.3.4.2.3", "sha512"); + _IN("2.16.840.1.101.3.4.2.4", "sha224"); + _IN("2.16.840.1.101.3.4.2.5", "sha512-224"); + _IN("2.16.840.1.101.3.4.2.6", "sha512-256"); + _IN("1.2.840.113549.2.2", "md2"); + _IN("1.2.840.113549.2.5", "md5"); + _IN("1.2.840.113549.1.7.1", "data"); + _IN("1.2.840.113549.1.7.2", "signedData"); + _IN("1.2.840.113549.1.7.3", "envelopedData"); + _IN("1.2.840.113549.1.7.4", "signedAndEnvelopedData"); + _IN("1.2.840.113549.1.7.5", "digestedData"); + _IN("1.2.840.113549.1.7.6", "encryptedData"); + _IN("1.2.840.113549.1.9.1", "emailAddress"); + _IN("1.2.840.113549.1.9.2", "unstructuredName"); + _IN("1.2.840.113549.1.9.3", "contentType"); + _IN("1.2.840.113549.1.9.4", "messageDigest"); + _IN("1.2.840.113549.1.9.5", "signingTime"); + _IN("1.2.840.113549.1.9.6", "counterSignature"); + _IN("1.2.840.113549.1.9.7", "challengePassword"); + _IN("1.2.840.113549.1.9.8", "unstructuredAddress"); + _IN("1.2.840.113549.1.9.14", "extensionRequest"); + _IN("1.2.840.113549.1.9.20", "friendlyName"); + _IN("1.2.840.113549.1.9.21", "localKeyId"); + _IN("1.2.840.113549.1.9.22.1", "x509Certificate"); + _IN("1.2.840.113549.1.12.10.1.1", "keyBag"); + _IN("1.2.840.113549.1.12.10.1.2", "pkcs8ShroudedKeyBag"); + _IN("1.2.840.113549.1.12.10.1.3", "certBag"); + _IN("1.2.840.113549.1.12.10.1.4", "crlBag"); + _IN("1.2.840.113549.1.12.10.1.5", "secretBag"); + _IN("1.2.840.113549.1.12.10.1.6", "safeContentsBag"); + _IN("1.2.840.113549.1.5.13", "pkcs5PBES2"); + _IN("1.2.840.113549.1.5.12", "pkcs5PBKDF2"); + _IN("1.2.840.113549.1.12.1.1", "pbeWithSHAAnd128BitRC4"); + _IN("1.2.840.113549.1.12.1.2", "pbeWithSHAAnd40BitRC4"); + _IN("1.2.840.113549.1.12.1.3", "pbeWithSHAAnd3-KeyTripleDES-CBC"); + _IN("1.2.840.113549.1.12.1.4", "pbeWithSHAAnd2-KeyTripleDES-CBC"); + _IN("1.2.840.113549.1.12.1.5", "pbeWithSHAAnd128BitRC2-CBC"); + _IN("1.2.840.113549.1.12.1.6", "pbewithSHAAnd40BitRC2-CBC"); + _IN("1.2.840.113549.2.7", "hmacWithSHA1"); + _IN("1.2.840.113549.2.8", "hmacWithSHA224"); + _IN("1.2.840.113549.2.9", "hmacWithSHA256"); + _IN("1.2.840.113549.2.10", "hmacWithSHA384"); + _IN("1.2.840.113549.2.11", "hmacWithSHA512"); + _IN("1.2.840.113549.3.7", "des-EDE3-CBC"); + _IN("2.16.840.1.101.3.4.1.2", "aes128-CBC"); + _IN("2.16.840.1.101.3.4.1.22", "aes192-CBC"); + _IN("2.16.840.1.101.3.4.1.42", "aes256-CBC"); + _IN("2.5.4.3", "commonName"); + _IN("2.5.4.4", "surname"); + _IN("2.5.4.5", "serialNumber"); + _IN("2.5.4.6", "countryName"); + _IN("2.5.4.7", "localityName"); + _IN("2.5.4.8", "stateOrProvinceName"); + _IN("2.5.4.9", "streetAddress"); + _IN("2.5.4.10", "organizationName"); + _IN("2.5.4.11", "organizationalUnitName"); + _IN("2.5.4.12", "title"); + _IN("2.5.4.13", "description"); + _IN("2.5.4.15", "businessCategory"); + _IN("2.5.4.17", "postalCode"); + _IN("2.5.4.42", "givenName"); + _IN("1.3.6.1.4.1.311.60.2.1.2", "jurisdictionOfIncorporationStateOrProvinceName"); + _IN("1.3.6.1.4.1.311.60.2.1.3", "jurisdictionOfIncorporationCountryName"); + _IN("2.16.840.1.113730.1.1", "nsCertType"); + _IN("2.16.840.1.113730.1.13", "nsComment"); + _I_("2.5.29.1", "authorityKeyIdentifier"); + _I_("2.5.29.2", "keyAttributes"); + _I_("2.5.29.3", "certificatePolicies"); + _I_("2.5.29.4", "keyUsageRestriction"); + _I_("2.5.29.5", "policyMapping"); + _I_("2.5.29.6", "subtreesConstraint"); + _I_("2.5.29.7", "subjectAltName"); + _I_("2.5.29.8", "issuerAltName"); + _I_("2.5.29.9", "subjectDirectoryAttributes"); + _I_("2.5.29.10", "basicConstraints"); + _I_("2.5.29.11", "nameConstraints"); + _I_("2.5.29.12", "policyConstraints"); + _I_("2.5.29.13", "basicConstraints"); + _IN("2.5.29.14", "subjectKeyIdentifier"); + _IN("2.5.29.15", "keyUsage"); + _I_("2.5.29.16", "privateKeyUsagePeriod"); + _IN("2.5.29.17", "subjectAltName"); + _IN("2.5.29.18", "issuerAltName"); + _IN("2.5.29.19", "basicConstraints"); + _I_("2.5.29.20", "cRLNumber"); + _I_("2.5.29.21", "cRLReason"); + _I_("2.5.29.22", "expirationDate"); + _I_("2.5.29.23", "instructionCode"); + _I_("2.5.29.24", "invalidityDate"); + _I_("2.5.29.25", "cRLDistributionPoints"); + _I_("2.5.29.26", "issuingDistributionPoint"); + _I_("2.5.29.27", "deltaCRLIndicator"); + _I_("2.5.29.28", "issuingDistributionPoint"); + _I_("2.5.29.29", "certificateIssuer"); + _I_("2.5.29.30", "nameConstraints"); + _IN("2.5.29.31", "cRLDistributionPoints"); + _IN("2.5.29.32", "certificatePolicies"); + _I_("2.5.29.33", "policyMappings"); + _I_("2.5.29.34", "policyConstraints"); + _IN("2.5.29.35", "authorityKeyIdentifier"); + _I_("2.5.29.36", "policyConstraints"); + _IN("2.5.29.37", "extKeyUsage"); + _I_("2.5.29.46", "freshestCRL"); + _I_("2.5.29.54", "inhibitAnyPolicy"); + _IN("1.3.6.1.4.1.11129.2.4.2", "timestampList"); + _IN("1.3.6.1.5.5.7.1.1", "authorityInfoAccess"); + _IN("1.3.6.1.5.5.7.3.1", "serverAuth"); + _IN("1.3.6.1.5.5.7.3.2", "clientAuth"); + _IN("1.3.6.1.5.5.7.3.3", "codeSigning"); + _IN("1.3.6.1.5.5.7.3.4", "emailProtection"); + _IN("1.3.6.1.5.5.7.3.8", "timeStamping"); + } +}); + +// node_modules/node-forge/lib/asn1.js +var require_asn1 = __commonJS({ + "node_modules/node-forge/lib/asn1.js"(exports2, module2) { + var forge3 = require_forge(); + require_util(); + require_oids(); + var asn1 = module2.exports = forge3.asn1 = forge3.asn1 || {}; + asn1.Class = { + UNIVERSAL: 0, + APPLICATION: 64, + CONTEXT_SPECIFIC: 128, + PRIVATE: 192 + }; + asn1.Type = { + NONE: 0, + BOOLEAN: 1, + INTEGER: 2, + BITSTRING: 3, + OCTETSTRING: 4, + NULL: 5, + OID: 6, + ODESC: 7, + EXTERNAL: 8, + REAL: 9, + ENUMERATED: 10, + EMBEDDED: 11, + UTF8: 12, + ROID: 13, + SEQUENCE: 16, + SET: 17, + PRINTABLESTRING: 19, + IA5STRING: 22, + UTCTIME: 23, + GENERALIZEDTIME: 24, + BMPSTRING: 30 + }; + asn1.create = function(tagClass, type, constructed, value, options) { + if (forge3.util.isArray(value)) { + var tmp = []; + for (var i = 0; i < value.length; ++i) { + if (value[i] !== void 0) { + tmp.push(value[i]); + } + } + value = tmp; + } + var obj = { + tagClass, + type, + constructed, + composed: constructed || forge3.util.isArray(value), + value + }; + if (options && "bitStringContents" in options) { + obj.bitStringContents = options.bitStringContents; + obj.original = asn1.copy(obj); + } + return obj; + }; + asn1.copy = function(obj, options) { + var copy; + if (forge3.util.isArray(obj)) { + copy = []; + for (var i = 0; i < obj.length; ++i) { + copy.push(asn1.copy(obj[i], options)); + } + return copy; + } + if (typeof obj === "string") { + return obj; + } + copy = { + tagClass: obj.tagClass, + type: obj.type, + constructed: obj.constructed, + composed: obj.composed, + value: asn1.copy(obj.value, options) + }; + if (options && !options.excludeBitStringContents) { + copy.bitStringContents = obj.bitStringContents; + } + return copy; + }; + asn1.equals = function(obj1, obj2, options) { + if (forge3.util.isArray(obj1)) { + if (!forge3.util.isArray(obj2)) { + return false; + } + if (obj1.length !== obj2.length) { + return false; + } + for (var i = 0; i < obj1.length; ++i) { + if (!asn1.equals(obj1[i], obj2[i])) { + return false; + } + } + return true; + } + if (typeof obj1 !== typeof obj2) { + return false; + } + if (typeof obj1 === "string") { + return obj1 === obj2; + } + var equal = obj1.tagClass === obj2.tagClass && obj1.type === obj2.type && obj1.constructed === obj2.constructed && obj1.composed === obj2.composed && asn1.equals(obj1.value, obj2.value); + if (options && options.includeBitStringContents) { + equal = equal && obj1.bitStringContents === obj2.bitStringContents; + } + return equal; + }; + asn1.getBerValueLength = function(b) { + var b2 = b.getByte(); + if (b2 === 128) { + return void 0; + } + var length; + var longForm = b2 & 128; + if (!longForm) { + length = b2; + } else { + length = b.getInt((b2 & 127) << 3); + } + return length; + }; + function _checkBufferLength(bytes, remaining, n) { + if (n > remaining) { + var error = new Error("Too few bytes to parse DER."); + error.available = bytes.length(); + error.remaining = remaining; + error.requested = n; + throw error; + } + } + var _getValueLength = function(bytes, remaining) { + var b2 = bytes.getByte(); + remaining--; + if (b2 === 128) { + return void 0; + } + var length; + var longForm = b2 & 128; + if (!longForm) { + length = b2; + } else { + var longFormBytes = b2 & 127; + _checkBufferLength(bytes, remaining, longFormBytes); + length = bytes.getInt(longFormBytes << 3); + } + if (length < 0) { + throw new Error("Negative length: " + length); + } + return length; + }; + asn1.fromDer = function(bytes, options) { + if (options === void 0) { + options = { + strict: true, + parseAllBytes: true, + decodeBitStrings: true + }; + } + if (typeof options === "boolean") { + options = { + strict: options, + parseAllBytes: true, + decodeBitStrings: true + }; + } + if (!("strict" in options)) { + options.strict = true; + } + if (!("parseAllBytes" in options)) { + options.parseAllBytes = true; + } + if (!("decodeBitStrings" in options)) { + options.decodeBitStrings = true; + } + if (typeof bytes === "string") { + bytes = forge3.util.createBuffer(bytes); + } + var byteCount = bytes.length(); + var value = _fromDer(bytes, bytes.length(), 0, options); + if (options.parseAllBytes && bytes.length() !== 0) { + var error = new Error("Unparsed DER bytes remain after ASN.1 parsing."); + error.byteCount = byteCount; + error.remaining = bytes.length(); + throw error; + } + return value; + }; + function _fromDer(bytes, remaining, depth, options) { + var start; + _checkBufferLength(bytes, remaining, 2); + var b1 = bytes.getByte(); + remaining--; + var tagClass = b1 & 192; + var type = b1 & 31; + start = bytes.length(); + var length = _getValueLength(bytes, remaining); + remaining -= start - bytes.length(); + if (length !== void 0 && length > remaining) { + if (options.strict) { + var error = new Error("Too few bytes to read ASN.1 value."); + error.available = bytes.length(); + error.remaining = remaining; + error.requested = length; + throw error; + } + length = remaining; + } + var value; + var bitStringContents; + var constructed = (b1 & 32) === 32; + if (constructed) { + value = []; + if (length === void 0) { + for (; ; ) { + _checkBufferLength(bytes, remaining, 2); + if (bytes.bytes(2) === String.fromCharCode(0, 0)) { + bytes.getBytes(2); + remaining -= 2; + break; + } + start = bytes.length(); + value.push(_fromDer(bytes, remaining, depth + 1, options)); + remaining -= start - bytes.length(); + } + } else { + while (length > 0) { + start = bytes.length(); + value.push(_fromDer(bytes, length, depth + 1, options)); + remaining -= start - bytes.length(); + length -= start - bytes.length(); + } + } + } + if (value === void 0 && tagClass === asn1.Class.UNIVERSAL && type === asn1.Type.BITSTRING) { + bitStringContents = bytes.bytes(length); + } + if (value === void 0 && options.decodeBitStrings && tagClass === asn1.Class.UNIVERSAL && type === asn1.Type.BITSTRING && length > 1) { + var savedRead = bytes.read; + var savedRemaining = remaining; + var unused = 0; + if (type === asn1.Type.BITSTRING) { + _checkBufferLength(bytes, remaining, 1); + unused = bytes.getByte(); + remaining--; + } + if (unused === 0) { + try { + start = bytes.length(); + var subOptions = { + strict: true, + decodeBitStrings: true + }; + var composed = _fromDer(bytes, remaining, depth + 1, subOptions); + var used = start - bytes.length(); + remaining -= used; + if (type == asn1.Type.BITSTRING) { + used++; + } + var tc = composed.tagClass; + if (used === length && (tc === asn1.Class.UNIVERSAL || tc === asn1.Class.CONTEXT_SPECIFIC)) { + value = [composed]; + } + } catch (ex) { + } + } + if (value === void 0) { + bytes.read = savedRead; + remaining = savedRemaining; + } + } + if (value === void 0) { + if (length === void 0) { + if (options.strict) { + throw new Error("Non-constructed ASN.1 object of indefinite length."); + } + length = remaining; + } + if (type === asn1.Type.BMPSTRING) { + value = ""; + for (; length > 0; length -= 2) { + _checkBufferLength(bytes, remaining, 2); + value += String.fromCharCode(bytes.getInt16()); + remaining -= 2; + } + } else { + value = bytes.getBytes(length); + remaining -= length; + } + } + var asn1Options = bitStringContents === void 0 ? null : { + bitStringContents + }; + return asn1.create(tagClass, type, constructed, value, asn1Options); + } + asn1.toDer = function(obj) { + var bytes = forge3.util.createBuffer(); + var b1 = obj.tagClass | obj.type; + var value = forge3.util.createBuffer(); + var useBitStringContents = false; + if ("bitStringContents" in obj) { + useBitStringContents = true; + if (obj.original) { + useBitStringContents = asn1.equals(obj, obj.original); + } + } + if (useBitStringContents) { + value.putBytes(obj.bitStringContents); + } else if (obj.composed) { + if (obj.constructed) { + b1 |= 32; + } else { + value.putByte(0); + } + for (var i = 0; i < obj.value.length; ++i) { + if (obj.value[i] !== void 0) { + value.putBuffer(asn1.toDer(obj.value[i])); + } + } + } else { + if (obj.type === asn1.Type.BMPSTRING) { + for (var i = 0; i < obj.value.length; ++i) { + value.putInt16(obj.value.charCodeAt(i)); + } + } else { + if (obj.type === asn1.Type.INTEGER && obj.value.length > 1 && (obj.value.charCodeAt(0) === 0 && (obj.value.charCodeAt(1) & 128) === 0 || obj.value.charCodeAt(0) === 255 && (obj.value.charCodeAt(1) & 128) === 128)) { + value.putBytes(obj.value.substr(1)); + } else { + value.putBytes(obj.value); + } + } + } + bytes.putByte(b1); + if (value.length() <= 127) { + bytes.putByte(value.length() & 127); + } else { + var len = value.length(); + var lenBytes = ""; + do { + lenBytes += String.fromCharCode(len & 255); + len = len >>> 8; + } while (len > 0); + bytes.putByte(lenBytes.length | 128); + for (var i = lenBytes.length - 1; i >= 0; --i) { + bytes.putByte(lenBytes.charCodeAt(i)); + } + } + bytes.putBuffer(value); + return bytes; + }; + asn1.oidToDer = function(oid) { + var values = oid.split("."); + var bytes = forge3.util.createBuffer(); + bytes.putByte(40 * parseInt(values[0], 10) + parseInt(values[1], 10)); + var last, valueBytes, value, b; + for (var i = 2; i < values.length; ++i) { + last = true; + valueBytes = []; + value = parseInt(values[i], 10); + do { + b = value & 127; + value = value >>> 7; + if (!last) { + b |= 128; + } + valueBytes.push(b); + last = false; + } while (value > 0); + for (var n = valueBytes.length - 1; n >= 0; --n) { + bytes.putByte(valueBytes[n]); + } + } + return bytes; + }; + asn1.derToOid = function(bytes) { + var oid; + if (typeof bytes === "string") { + bytes = forge3.util.createBuffer(bytes); + } + var b = bytes.getByte(); + oid = Math.floor(b / 40) + "." + b % 40; + var value = 0; + while (bytes.length() > 0) { + b = bytes.getByte(); + value = value << 7; + if (b & 128) { + value += b & 127; + } else { + oid += "." + (value + b); + value = 0; + } + } + return oid; + }; + asn1.utcTimeToDate = function(utc) { + var date = new Date(); + var year = parseInt(utc.substr(0, 2), 10); + year = year >= 50 ? 1900 + year : 2e3 + year; + var MM = parseInt(utc.substr(2, 2), 10) - 1; + var DD = parseInt(utc.substr(4, 2), 10); + var hh = parseInt(utc.substr(6, 2), 10); + var mm = parseInt(utc.substr(8, 2), 10); + var ss = 0; + if (utc.length > 11) { + var c = utc.charAt(10); + var end = 10; + if (c !== "+" && c !== "-") { + ss = parseInt(utc.substr(10, 2), 10); + end += 2; + } + } + date.setUTCFullYear(year, MM, DD); + date.setUTCHours(hh, mm, ss, 0); + if (end) { + c = utc.charAt(end); + if (c === "+" || c === "-") { + var hhoffset = parseInt(utc.substr(end + 1, 2), 10); + var mmoffset = parseInt(utc.substr(end + 4, 2), 10); + var offset = hhoffset * 60 + mmoffset; + offset *= 6e4; + if (c === "+") { + date.setTime(+date - offset); + } else { + date.setTime(+date + offset); + } + } + } + return date; + }; + asn1.generalizedTimeToDate = function(gentime) { + var date = new Date(); + var YYYY = parseInt(gentime.substr(0, 4), 10); + var MM = parseInt(gentime.substr(4, 2), 10) - 1; + var DD = parseInt(gentime.substr(6, 2), 10); + var hh = parseInt(gentime.substr(8, 2), 10); + var mm = parseInt(gentime.substr(10, 2), 10); + var ss = parseInt(gentime.substr(12, 2), 10); + var fff = 0; + var offset = 0; + var isUTC = false; + if (gentime.charAt(gentime.length - 1) === "Z") { + isUTC = true; + } + var end = gentime.length - 5, c = gentime.charAt(end); + if (c === "+" || c === "-") { + var hhoffset = parseInt(gentime.substr(end + 1, 2), 10); + var mmoffset = parseInt(gentime.substr(end + 4, 2), 10); + offset = hhoffset * 60 + mmoffset; + offset *= 6e4; + if (c === "+") { + offset *= -1; + } + isUTC = true; + } + if (gentime.charAt(14) === ".") { + fff = parseFloat(gentime.substr(14), 10) * 1e3; + } + if (isUTC) { + date.setUTCFullYear(YYYY, MM, DD); + date.setUTCHours(hh, mm, ss, fff); + date.setTime(+date + offset); + } else { + date.setFullYear(YYYY, MM, DD); + date.setHours(hh, mm, ss, fff); + } + return date; + }; + asn1.dateToUtcTime = function(date) { + if (typeof date === "string") { + return date; + } + var rval = ""; + var format = []; + format.push(("" + date.getUTCFullYear()).substr(2)); + format.push("" + (date.getUTCMonth() + 1)); + format.push("" + date.getUTCDate()); + format.push("" + date.getUTCHours()); + format.push("" + date.getUTCMinutes()); + format.push("" + date.getUTCSeconds()); + for (var i = 0; i < format.length; ++i) { + if (format[i].length < 2) { + rval += "0"; + } + rval += format[i]; + } + rval += "Z"; + return rval; + }; + asn1.dateToGeneralizedTime = function(date) { + if (typeof date === "string") { + return date; + } + var rval = ""; + var format = []; + format.push("" + date.getUTCFullYear()); + format.push("" + (date.getUTCMonth() + 1)); + format.push("" + date.getUTCDate()); + format.push("" + date.getUTCHours()); + format.push("" + date.getUTCMinutes()); + format.push("" + date.getUTCSeconds()); + for (var i = 0; i < format.length; ++i) { + if (format[i].length < 2) { + rval += "0"; + } + rval += format[i]; + } + rval += "Z"; + return rval; + }; + asn1.integerToDer = function(x) { + var rval = forge3.util.createBuffer(); + if (x >= -128 && x < 128) { + return rval.putSignedInt(x, 8); + } + if (x >= -32768 && x < 32768) { + return rval.putSignedInt(x, 16); + } + if (x >= -8388608 && x < 8388608) { + return rval.putSignedInt(x, 24); + } + if (x >= -2147483648 && x < 2147483648) { + return rval.putSignedInt(x, 32); + } + var error = new Error("Integer too large; max is 32-bits."); + error.integer = x; + throw error; + }; + asn1.derToInteger = function(bytes) { + if (typeof bytes === "string") { + bytes = forge3.util.createBuffer(bytes); + } + var n = bytes.length() * 8; + if (n > 32) { + throw new Error("Integer too large; max is 32-bits."); + } + return bytes.getSignedInt(n); + }; + asn1.validate = function(obj, v, capture, errors) { + var rval = false; + if ((obj.tagClass === v.tagClass || typeof v.tagClass === "undefined") && (obj.type === v.type || typeof v.type === "undefined")) { + if (obj.constructed === v.constructed || typeof v.constructed === "undefined") { + rval = true; + if (v.value && forge3.util.isArray(v.value)) { + var j = 0; + for (var i = 0; rval && i < v.value.length; ++i) { + rval = v.value[i].optional || false; + if (obj.value[j]) { + rval = asn1.validate(obj.value[j], v.value[i], capture, errors); + if (rval) { + ++j; + } else if (v.value[i].optional) { + rval = true; + } + } + if (!rval && errors) { + errors.push("[" + v.name + '] Tag class "' + v.tagClass + '", type "' + v.type + '" expected value length "' + v.value.length + '", got "' + obj.value.length + '"'); + } + } + } + if (rval && capture) { + if (v.capture) { + capture[v.capture] = obj.value; + } + if (v.captureAsn1) { + capture[v.captureAsn1] = obj; + } + if (v.captureBitStringContents && "bitStringContents" in obj) { + capture[v.captureBitStringContents] = obj.bitStringContents; + } + if (v.captureBitStringValue && "bitStringContents" in obj) { + var value; + if (obj.bitStringContents.length < 2) { + capture[v.captureBitStringValue] = ""; + } else { + var unused = obj.bitStringContents.charCodeAt(0); + if (unused !== 0) { + throw new Error("captureBitStringValue only supported for zero unused bits"); + } + capture[v.captureBitStringValue] = obj.bitStringContents.slice(1); + } + } + } + } else if (errors) { + errors.push("[" + v.name + '] Expected constructed "' + v.constructed + '", got "' + obj.constructed + '"'); + } + } else if (errors) { + if (obj.tagClass !== v.tagClass) { + errors.push("[" + v.name + '] Expected tag class "' + v.tagClass + '", got "' + obj.tagClass + '"'); + } + if (obj.type !== v.type) { + errors.push("[" + v.name + '] Expected type "' + v.type + '", got "' + obj.type + '"'); + } + } + return rval; + }; + var _nonLatinRegex = /[^\\u0000-\\u00ff]/; + asn1.prettyPrint = function(obj, level, indentation) { + var rval = ""; + level = level || 0; + indentation = indentation || 2; + if (level > 0) { + rval += "\n"; + } + var indent = ""; + for (var i = 0; i < level * indentation; ++i) { + indent += " "; + } + rval += indent + "Tag: "; + switch (obj.tagClass) { + case asn1.Class.UNIVERSAL: + rval += "Universal:"; + break; + case asn1.Class.APPLICATION: + rval += "Application:"; + break; + case asn1.Class.CONTEXT_SPECIFIC: + rval += "Context-Specific:"; + break; + case asn1.Class.PRIVATE: + rval += "Private:"; + break; + } + if (obj.tagClass === asn1.Class.UNIVERSAL) { + rval += obj.type; + switch (obj.type) { + case asn1.Type.NONE: + rval += " (None)"; + break; + case asn1.Type.BOOLEAN: + rval += " (Boolean)"; + break; + case asn1.Type.INTEGER: + rval += " (Integer)"; + break; + case asn1.Type.BITSTRING: + rval += " (Bit string)"; + break; + case asn1.Type.OCTETSTRING: + rval += " (Octet string)"; + break; + case asn1.Type.NULL: + rval += " (Null)"; + break; + case asn1.Type.OID: + rval += " (Object Identifier)"; + break; + case asn1.Type.ODESC: + rval += " (Object Descriptor)"; + break; + case asn1.Type.EXTERNAL: + rval += " (External or Instance of)"; + break; + case asn1.Type.REAL: + rval += " (Real)"; + break; + case asn1.Type.ENUMERATED: + rval += " (Enumerated)"; + break; + case asn1.Type.EMBEDDED: + rval += " (Embedded PDV)"; + break; + case asn1.Type.UTF8: + rval += " (UTF8)"; + break; + case asn1.Type.ROID: + rval += " (Relative Object Identifier)"; + break; + case asn1.Type.SEQUENCE: + rval += " (Sequence)"; + break; + case asn1.Type.SET: + rval += " (Set)"; + break; + case asn1.Type.PRINTABLESTRING: + rval += " (Printable String)"; + break; + case asn1.Type.IA5String: + rval += " (IA5String (ASCII))"; + break; + case asn1.Type.UTCTIME: + rval += " (UTC time)"; + break; + case asn1.Type.GENERALIZEDTIME: + rval += " (Generalized time)"; + break; + case asn1.Type.BMPSTRING: + rval += " (BMP String)"; + break; + } + } else { + rval += obj.type; + } + rval += "\n"; + rval += indent + "Constructed: " + obj.constructed + "\n"; + if (obj.composed) { + var subvalues = 0; + var sub = ""; + for (var i = 0; i < obj.value.length; ++i) { + if (obj.value[i] !== void 0) { + subvalues += 1; + sub += asn1.prettyPrint(obj.value[i], level + 1, indentation); + if (i + 1 < obj.value.length) { + sub += ","; + } + } + } + rval += indent + "Sub values: " + subvalues + sub; + } else { + rval += indent + "Value: "; + if (obj.type === asn1.Type.OID) { + var oid = asn1.derToOid(obj.value); + rval += oid; + if (forge3.pki && forge3.pki.oids) { + if (oid in forge3.pki.oids) { + rval += " (" + forge3.pki.oids[oid] + ") "; + } + } + } + if (obj.type === asn1.Type.INTEGER) { + try { + rval += asn1.derToInteger(obj.value); + } catch (ex) { + rval += "0x" + forge3.util.bytesToHex(obj.value); + } + } else if (obj.type === asn1.Type.BITSTRING) { + if (obj.value.length > 1) { + rval += "0x" + forge3.util.bytesToHex(obj.value.slice(1)); + } else { + rval += "(none)"; + } + if (obj.value.length > 0) { + var unused = obj.value.charCodeAt(0); + if (unused == 1) { + rval += " (1 unused bit shown)"; + } else if (unused > 1) { + rval += " (" + unused + " unused bits shown)"; + } + } + } else if (obj.type === asn1.Type.OCTETSTRING) { + if (!_nonLatinRegex.test(obj.value)) { + rval += "(" + obj.value + ") "; + } + rval += "0x" + forge3.util.bytesToHex(obj.value); + } else if (obj.type === asn1.Type.UTF8) { + try { + rval += forge3.util.decodeUtf8(obj.value); + } catch (e) { + if (e.message === "URI malformed") { + rval += "0x" + forge3.util.bytesToHex(obj.value) + " (malformed UTF8)"; + } else { + throw e; + } + } + } else if (obj.type === asn1.Type.PRINTABLESTRING || obj.type === asn1.Type.IA5String) { + rval += obj.value; + } else if (_nonLatinRegex.test(obj.value)) { + rval += "0x" + forge3.util.bytesToHex(obj.value); + } else if (obj.value.length === 0) { + rval += "[null]"; + } else { + rval += obj.value; + } + } + return rval; + }; + } +}); + +// node_modules/node-forge/lib/md.js +var require_md = __commonJS({ + "node_modules/node-forge/lib/md.js"(exports2, module2) { + var forge3 = require_forge(); + module2.exports = forge3.md = forge3.md || {}; + forge3.md.algorithms = forge3.md.algorithms || {}; + } +}); + +// node_modules/node-forge/lib/hmac.js +var require_hmac = __commonJS({ + "node_modules/node-forge/lib/hmac.js"(exports2, module2) { + var forge3 = require_forge(); + require_md(); + require_util(); + var hmac = module2.exports = forge3.hmac = forge3.hmac || {}; + hmac.create = function() { + var _key = null; + var _md = null; + var _ipadding = null; + var _opadding = null; + var ctx = {}; + ctx.start = function(md, key) { + if (md !== null) { + if (typeof md === "string") { + md = md.toLowerCase(); + if (md in forge3.md.algorithms) { + _md = forge3.md.algorithms[md].create(); + } else { + throw new Error('Unknown hash algorithm "' + md + '"'); + } + } else { + _md = md; + } + } + if (key === null) { + key = _key; + } else { + if (typeof key === "string") { + key = forge3.util.createBuffer(key); + } else if (forge3.util.isArray(key)) { + var tmp = key; + key = forge3.util.createBuffer(); + for (var i = 0; i < tmp.length; ++i) { + key.putByte(tmp[i]); + } + } + var keylen = key.length(); + if (keylen > _md.blockLength) { + _md.start(); + _md.update(key.bytes()); + key = _md.digest(); + } + _ipadding = forge3.util.createBuffer(); + _opadding = forge3.util.createBuffer(); + keylen = key.length(); + for (var i = 0; i < keylen; ++i) { + var tmp = key.at(i); + _ipadding.putByte(54 ^ tmp); + _opadding.putByte(92 ^ tmp); + } + if (keylen < _md.blockLength) { + var tmp = _md.blockLength - keylen; + for (var i = 0; i < tmp; ++i) { + _ipadding.putByte(54); + _opadding.putByte(92); + } + } + _key = key; + _ipadding = _ipadding.bytes(); + _opadding = _opadding.bytes(); + } + _md.start(); + _md.update(_ipadding); + }; + ctx.update = function(bytes) { + _md.update(bytes); + }; + ctx.getMac = function() { + var inner = _md.digest().bytes(); + _md.start(); + _md.update(_opadding); + _md.update(inner); + return _md.digest(); + }; + ctx.digest = ctx.getMac; + return ctx; + }; + } +}); + +// node_modules/node-forge/lib/md5.js +var require_md5 = __commonJS({ + "node_modules/node-forge/lib/md5.js"(exports2, module2) { + var forge3 = require_forge(); + require_md(); + require_util(); + var md5 = module2.exports = forge3.md5 = forge3.md5 || {}; + forge3.md.md5 = forge3.md.algorithms.md5 = md5; + md5.create = function() { + if (!_initialized) { + _init(); + } + var _state = null; + var _input = forge3.util.createBuffer(); + var _w = new Array(16); + var md = { + algorithm: "md5", + blockLength: 64, + digestLength: 16, + messageLength: 0, + fullMessageLength: null, + messageLengthSize: 8 + }; + md.start = function() { + md.messageLength = 0; + md.fullMessageLength = md.messageLength64 = []; + var int32s = md.messageLengthSize / 4; + for (var i = 0; i < int32s; ++i) { + md.fullMessageLength.push(0); + } + _input = forge3.util.createBuffer(); + _state = { + h0: 1732584193, + h1: 4023233417, + h2: 2562383102, + h3: 271733878 + }; + return md; + }; + md.start(); + md.update = function(msg, encoding) { + if (encoding === "utf8") { + msg = forge3.util.encodeUtf8(msg); + } + var len = msg.length; + md.messageLength += len; + len = [len / 4294967296 >>> 0, len >>> 0]; + for (var i = md.fullMessageLength.length - 1; i >= 0; --i) { + md.fullMessageLength[i] += len[1]; + len[1] = len[0] + (md.fullMessageLength[i] / 4294967296 >>> 0); + md.fullMessageLength[i] = md.fullMessageLength[i] >>> 0; + len[0] = len[1] / 4294967296 >>> 0; + } + _input.putBytes(msg); + _update(_state, _w, _input); + if (_input.read > 2048 || _input.length() === 0) { + _input.compact(); + } + return md; + }; + md.digest = function() { + var finalBlock = forge3.util.createBuffer(); + finalBlock.putBytes(_input.bytes()); + var remaining = md.fullMessageLength[md.fullMessageLength.length - 1] + md.messageLengthSize; + var overflow = remaining & md.blockLength - 1; + finalBlock.putBytes(_padding.substr(0, md.blockLength - overflow)); + var bits, carry = 0; + for (var i = md.fullMessageLength.length - 1; i >= 0; --i) { + bits = md.fullMessageLength[i] * 8 + carry; + carry = bits / 4294967296 >>> 0; + finalBlock.putInt32Le(bits >>> 0); + } + var s2 = { + h0: _state.h0, + h1: _state.h1, + h2: _state.h2, + h3: _state.h3 + }; + _update(s2, _w, finalBlock); + var rval = forge3.util.createBuffer(); + rval.putInt32Le(s2.h0); + rval.putInt32Le(s2.h1); + rval.putInt32Le(s2.h2); + rval.putInt32Le(s2.h3); + return rval; + }; + return md; + }; + var _padding = null; + var _g = null; + var _r = null; + var _k = null; + var _initialized = false; + function _init() { + _padding = String.fromCharCode(128); + _padding += forge3.util.fillString(String.fromCharCode(0), 64); + _g = [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 1, + 6, + 11, + 0, + 5, + 10, + 15, + 4, + 9, + 14, + 3, + 8, + 13, + 2, + 7, + 12, + 5, + 8, + 11, + 14, + 1, + 4, + 7, + 10, + 13, + 0, + 3, + 6, + 9, + 12, + 15, + 2, + 0, + 7, + 14, + 5, + 12, + 3, + 10, + 1, + 8, + 15, + 6, + 13, + 4, + 11, + 2, + 9 + ]; + _r = [ + 7, + 12, + 17, + 22, + 7, + 12, + 17, + 22, + 7, + 12, + 17, + 22, + 7, + 12, + 17, + 22, + 5, + 9, + 14, + 20, + 5, + 9, + 14, + 20, + 5, + 9, + 14, + 20, + 5, + 9, + 14, + 20, + 4, + 11, + 16, + 23, + 4, + 11, + 16, + 23, + 4, + 11, + 16, + 23, + 4, + 11, + 16, + 23, + 6, + 10, + 15, + 21, + 6, + 10, + 15, + 21, + 6, + 10, + 15, + 21, + 6, + 10, + 15, + 21 + ]; + _k = new Array(64); + for (var i = 0; i < 64; ++i) { + _k[i] = Math.floor(Math.abs(Math.sin(i + 1)) * 4294967296); + } + _initialized = true; + } + function _update(s, w, bytes) { + var t, a, b, c, d, f, r, i; + var len = bytes.length(); + while (len >= 64) { + a = s.h0; + b = s.h1; + c = s.h2; + d = s.h3; + for (i = 0; i < 16; ++i) { + w[i] = bytes.getInt32Le(); + f = d ^ b & (c ^ d); + t = a + f + _k[i] + w[i]; + r = _r[i]; + a = d; + d = c; + c = b; + b += t << r | t >>> 32 - r; + } + for (; i < 32; ++i) { + f = c ^ d & (b ^ c); + t = a + f + _k[i] + w[_g[i]]; + r = _r[i]; + a = d; + d = c; + c = b; + b += t << r | t >>> 32 - r; + } + for (; i < 48; ++i) { + f = b ^ c ^ d; + t = a + f + _k[i] + w[_g[i]]; + r = _r[i]; + a = d; + d = c; + c = b; + b += t << r | t >>> 32 - r; + } + for (; i < 64; ++i) { + f = c ^ (b | ~d); + t = a + f + _k[i] + w[_g[i]]; + r = _r[i]; + a = d; + d = c; + c = b; + b += t << r | t >>> 32 - r; + } + s.h0 = s.h0 + a | 0; + s.h1 = s.h1 + b | 0; + s.h2 = s.h2 + c | 0; + s.h3 = s.h3 + d | 0; + len -= 64; + } + } + } +}); + +// node_modules/node-forge/lib/pem.js +var require_pem = __commonJS({ + "node_modules/node-forge/lib/pem.js"(exports2, module2) { + var forge3 = require_forge(); + require_util(); + var pem = module2.exports = forge3.pem = forge3.pem || {}; + pem.encode = function(msg, options) { + options = options || {}; + var rval = "-----BEGIN " + msg.type + "-----\r\n"; + var header; + if (msg.procType) { + header = { + name: "Proc-Type", + values: [String(msg.procType.version), msg.procType.type] + }; + rval += foldHeader(header); + } + if (msg.contentDomain) { + header = { name: "Content-Domain", values: [msg.contentDomain] }; + rval += foldHeader(header); + } + if (msg.dekInfo) { + header = { name: "DEK-Info", values: [msg.dekInfo.algorithm] }; + if (msg.dekInfo.parameters) { + header.values.push(msg.dekInfo.parameters); + } + rval += foldHeader(header); + } + if (msg.headers) { + for (var i = 0; i < msg.headers.length; ++i) { + rval += foldHeader(msg.headers[i]); + } + } + if (msg.procType) { + rval += "\r\n"; + } + rval += forge3.util.encode64(msg.body, options.maxline || 64) + "\r\n"; + rval += "-----END " + msg.type + "-----\r\n"; + return rval; + }; + pem.decode = function(str) { + var rval = []; + var rMessage = /\s*-----BEGIN ([A-Z0-9- ]+)-----\r?\n?([\x21-\x7e\s]+?(?:\r?\n\r?\n))?([:A-Za-z0-9+\/=\s]+?)-----END \1-----/g; + var rHeader = /([\x21-\x7e]+):\s*([\x21-\x7e\s^:]+)/; + var rCRLF = /\r?\n/; + var match; + while (true) { + match = rMessage.exec(str); + if (!match) { + break; + } + var type = match[1]; + if (type === "NEW CERTIFICATE REQUEST") { + type = "CERTIFICATE REQUEST"; + } + var msg = { + type, + procType: null, + contentDomain: null, + dekInfo: null, + headers: [], + body: forge3.util.decode64(match[3]) + }; + rval.push(msg); + if (!match[2]) { + continue; + } + var lines = match[2].split(rCRLF); + var li = 0; + while (match && li < lines.length) { + var line = lines[li].replace(/\s+$/, ""); + for (var nl = li + 1; nl < lines.length; ++nl) { + var next = lines[nl]; + if (!/\s/.test(next[0])) { + break; + } + line += next; + li = nl; + } + match = line.match(rHeader); + if (match) { + var header = { name: match[1], values: [] }; + var values = match[2].split(","); + for (var vi = 0; vi < values.length; ++vi) { + header.values.push(ltrim(values[vi])); + } + if (!msg.procType) { + if (header.name !== "Proc-Type") { + throw new Error('Invalid PEM formatted message. The first encapsulated header must be "Proc-Type".'); + } else if (header.values.length !== 2) { + throw new Error('Invalid PEM formatted message. The "Proc-Type" header must have two subfields.'); + } + msg.procType = { version: values[0], type: values[1] }; + } else if (!msg.contentDomain && header.name === "Content-Domain") { + msg.contentDomain = values[0] || ""; + } else if (!msg.dekInfo && header.name === "DEK-Info") { + if (header.values.length === 0) { + throw new Error('Invalid PEM formatted message. The "DEK-Info" header must have at least one subfield.'); + } + msg.dekInfo = { algorithm: values[0], parameters: values[1] || null }; + } else { + msg.headers.push(header); + } + } + ++li; + } + if (msg.procType === "ENCRYPTED" && !msg.dekInfo) { + throw new Error('Invalid PEM formatted message. The "DEK-Info" header must be present if "Proc-Type" is "ENCRYPTED".'); + } + } + if (rval.length === 0) { + throw new Error("Invalid PEM formatted message."); + } + return rval; + }; + function foldHeader(header) { + var rval = header.name + ": "; + var values = []; + var insertSpace = function(match, $1) { + return " " + $1; + }; + for (var i = 0; i < header.values.length; ++i) { + values.push(header.values[i].replace(/^(\S+\r\n)/, insertSpace)); + } + rval += values.join(",") + "\r\n"; + var length = 0; + var candidate = -1; + for (var i = 0; i < rval.length; ++i, ++length) { + if (length > 65 && candidate !== -1) { + var insert = rval[candidate]; + if (insert === ",") { + ++candidate; + rval = rval.substr(0, candidate) + "\r\n " + rval.substr(candidate); + } else { + rval = rval.substr(0, candidate) + "\r\n" + insert + rval.substr(candidate + 1); + } + length = i - candidate - 1; + candidate = -1; + ++i; + } else if (rval[i] === " " || rval[i] === " " || rval[i] === ",") { + candidate = i; + } + } + return rval; + } + function ltrim(str) { + return str.replace(/^\s+/, ""); + } + } +}); + +// node_modules/node-forge/lib/des.js +var require_des = __commonJS({ + "node_modules/node-forge/lib/des.js"(exports2, module2) { + var forge3 = require_forge(); + require_cipher(); + require_cipherModes(); + require_util(); + module2.exports = forge3.des = forge3.des || {}; + forge3.des.startEncrypting = function(key, iv, output, mode) { + var cipher = _createCipher({ + key, + output, + decrypt: false, + mode: mode || (iv === null ? "ECB" : "CBC") + }); + cipher.start(iv); + return cipher; + }; + forge3.des.createEncryptionCipher = function(key, mode) { + return _createCipher({ + key, + output: null, + decrypt: false, + mode + }); + }; + forge3.des.startDecrypting = function(key, iv, output, mode) { + var cipher = _createCipher({ + key, + output, + decrypt: true, + mode: mode || (iv === null ? "ECB" : "CBC") + }); + cipher.start(iv); + return cipher; + }; + forge3.des.createDecryptionCipher = function(key, mode) { + return _createCipher({ + key, + output: null, + decrypt: true, + mode + }); + }; + forge3.des.Algorithm = function(name, mode) { + var self2 = this; + self2.name = name; + self2.mode = new mode({ + blockSize: 8, + cipher: { + encrypt: function(inBlock, outBlock) { + return _updateBlock(self2._keys, inBlock, outBlock, false); + }, + decrypt: function(inBlock, outBlock) { + return _updateBlock(self2._keys, inBlock, outBlock, true); + } + } + }); + self2._init = false; + }; + forge3.des.Algorithm.prototype.initialize = function(options) { + if (this._init) { + return; + } + var key = forge3.util.createBuffer(options.key); + if (this.name.indexOf("3DES") === 0) { + if (key.length() !== 24) { + throw new Error("Invalid Triple-DES key size: " + key.length() * 8); + } + } + this._keys = _createKeys(key); + this._init = true; + }; + registerAlgorithm("DES-ECB", forge3.cipher.modes.ecb); + registerAlgorithm("DES-CBC", forge3.cipher.modes.cbc); + registerAlgorithm("DES-CFB", forge3.cipher.modes.cfb); + registerAlgorithm("DES-OFB", forge3.cipher.modes.ofb); + registerAlgorithm("DES-CTR", forge3.cipher.modes.ctr); + registerAlgorithm("3DES-ECB", forge3.cipher.modes.ecb); + registerAlgorithm("3DES-CBC", forge3.cipher.modes.cbc); + registerAlgorithm("3DES-CFB", forge3.cipher.modes.cfb); + registerAlgorithm("3DES-OFB", forge3.cipher.modes.ofb); + registerAlgorithm("3DES-CTR", forge3.cipher.modes.ctr); + function registerAlgorithm(name, mode) { + var factory = function() { + return new forge3.des.Algorithm(name, mode); + }; + forge3.cipher.registerAlgorithm(name, factory); + } + var spfunction1 = [16843776, 0, 65536, 16843780, 16842756, 66564, 4, 65536, 1024, 16843776, 16843780, 1024, 16778244, 16842756, 16777216, 4, 1028, 16778240, 16778240, 66560, 66560, 16842752, 16842752, 16778244, 65540, 16777220, 16777220, 65540, 0, 1028, 66564, 16777216, 65536, 16843780, 4, 16842752, 16843776, 16777216, 16777216, 1024, 16842756, 65536, 66560, 16777220, 1024, 4, 16778244, 66564, 16843780, 65540, 16842752, 16778244, 16777220, 1028, 66564, 16843776, 1028, 16778240, 16778240, 0, 65540, 66560, 0, 16842756]; + var spfunction2 = [-2146402272, -2147450880, 32768, 1081376, 1048576, 32, -2146435040, -2147450848, -2147483616, -2146402272, -2146402304, -2147483648, -2147450880, 1048576, 32, -2146435040, 1081344, 1048608, -2147450848, 0, -2147483648, 32768, 1081376, -2146435072, 1048608, -2147483616, 0, 1081344, 32800, -2146402304, -2146435072, 32800, 0, 1081376, -2146435040, 1048576, -2147450848, -2146435072, -2146402304, 32768, -2146435072, -2147450880, 32, -2146402272, 1081376, 32, 32768, -2147483648, 32800, -2146402304, 1048576, -2147483616, 1048608, -2147450848, -2147483616, 1048608, 1081344, 0, -2147450880, 32800, -2147483648, -2146435040, -2146402272, 1081344]; + var spfunction3 = [520, 134349312, 0, 134348808, 134218240, 0, 131592, 134218240, 131080, 134217736, 134217736, 131072, 134349320, 131080, 134348800, 520, 134217728, 8, 134349312, 512, 131584, 134348800, 134348808, 131592, 134218248, 131584, 131072, 134218248, 8, 134349320, 512, 134217728, 134349312, 134217728, 131080, 520, 131072, 134349312, 134218240, 0, 512, 131080, 134349320, 134218240, 134217736, 512, 0, 134348808, 134218248, 131072, 134217728, 134349320, 8, 131592, 131584, 134217736, 134348800, 134218248, 520, 134348800, 131592, 8, 134348808, 131584]; + var spfunction4 = [8396801, 8321, 8321, 128, 8396928, 8388737, 8388609, 8193, 0, 8396800, 8396800, 8396929, 129, 0, 8388736, 8388609, 1, 8192, 8388608, 8396801, 128, 8388608, 8193, 8320, 8388737, 1, 8320, 8388736, 8192, 8396928, 8396929, 129, 8388736, 8388609, 8396800, 8396929, 129, 0, 0, 8396800, 8320, 8388736, 8388737, 1, 8396801, 8321, 8321, 128, 8396929, 129, 1, 8192, 8388609, 8193, 8396928, 8388737, 8193, 8320, 8388608, 8396801, 128, 8388608, 8192, 8396928]; + var spfunction5 = [256, 34078976, 34078720, 1107296512, 524288, 256, 1073741824, 34078720, 1074266368, 524288, 33554688, 1074266368, 1107296512, 1107820544, 524544, 1073741824, 33554432, 1074266112, 1074266112, 0, 1073742080, 1107820800, 1107820800, 33554688, 1107820544, 1073742080, 0, 1107296256, 34078976, 33554432, 1107296256, 524544, 524288, 1107296512, 256, 33554432, 1073741824, 34078720, 1107296512, 1074266368, 33554688, 1073741824, 1107820544, 34078976, 1074266368, 256, 33554432, 1107820544, 1107820800, 524544, 1107296256, 1107820800, 34078720, 0, 1074266112, 1107296256, 524544, 33554688, 1073742080, 524288, 0, 1074266112, 34078976, 1073742080]; + var spfunction6 = [536870928, 541065216, 16384, 541081616, 541065216, 16, 541081616, 4194304, 536887296, 4210704, 4194304, 536870928, 4194320, 536887296, 536870912, 16400, 0, 4194320, 536887312, 16384, 4210688, 536887312, 16, 541065232, 541065232, 0, 4210704, 541081600, 16400, 4210688, 541081600, 536870912, 536887296, 16, 541065232, 4210688, 541081616, 4194304, 16400, 536870928, 4194304, 536887296, 536870912, 16400, 536870928, 541081616, 4210688, 541065216, 4210704, 541081600, 0, 541065232, 16, 16384, 541065216, 4210704, 16384, 4194320, 536887312, 0, 541081600, 536870912, 4194320, 536887312]; + var spfunction7 = [2097152, 69206018, 67110914, 0, 2048, 67110914, 2099202, 69208064, 69208066, 2097152, 0, 67108866, 2, 67108864, 69206018, 2050, 67110912, 2099202, 2097154, 67110912, 67108866, 69206016, 69208064, 2097154, 69206016, 2048, 2050, 69208066, 2099200, 2, 67108864, 2099200, 67108864, 2099200, 2097152, 67110914, 67110914, 69206018, 69206018, 2, 2097154, 67108864, 67110912, 2097152, 69208064, 2050, 2099202, 69208064, 2050, 67108866, 69208066, 69206016, 2099200, 0, 2, 69208066, 0, 2099202, 69206016, 2048, 67108866, 67110912, 2048, 2097154]; + var spfunction8 = [268439616, 4096, 262144, 268701760, 268435456, 268439616, 64, 268435456, 262208, 268697600, 268701760, 266240, 268701696, 266304, 4096, 64, 268697600, 268435520, 268439552, 4160, 266240, 262208, 268697664, 268701696, 4160, 0, 0, 268697664, 268435520, 268439552, 266304, 262144, 266304, 262144, 268701696, 4096, 64, 268697664, 4096, 266304, 268439552, 64, 268435520, 268697600, 268697664, 268435456, 262144, 268439616, 0, 268701760, 262208, 268435520, 268697600, 268439552, 268439616, 0, 268701760, 266240, 266240, 4160, 4160, 262208, 268435456, 268701696]; + function _createKeys(key) { + var pc2bytes0 = [0, 4, 536870912, 536870916, 65536, 65540, 536936448, 536936452, 512, 516, 536871424, 536871428, 66048, 66052, 536936960, 536936964], pc2bytes1 = [0, 1, 1048576, 1048577, 67108864, 67108865, 68157440, 68157441, 256, 257, 1048832, 1048833, 67109120, 67109121, 68157696, 68157697], pc2bytes2 = [0, 8, 2048, 2056, 16777216, 16777224, 16779264, 16779272, 0, 8, 2048, 2056, 16777216, 16777224, 16779264, 16779272], pc2bytes3 = [0, 2097152, 134217728, 136314880, 8192, 2105344, 134225920, 136323072, 131072, 2228224, 134348800, 136445952, 139264, 2236416, 134356992, 136454144], pc2bytes4 = [0, 262144, 16, 262160, 0, 262144, 16, 262160, 4096, 266240, 4112, 266256, 4096, 266240, 4112, 266256], pc2bytes5 = [0, 1024, 32, 1056, 0, 1024, 32, 1056, 33554432, 33555456, 33554464, 33555488, 33554432, 33555456, 33554464, 33555488], pc2bytes6 = [0, 268435456, 524288, 268959744, 2, 268435458, 524290, 268959746, 0, 268435456, 524288, 268959744, 2, 268435458, 524290, 268959746], pc2bytes7 = [0, 65536, 2048, 67584, 536870912, 536936448, 536872960, 536938496, 131072, 196608, 133120, 198656, 537001984, 537067520, 537004032, 537069568], pc2bytes8 = [0, 262144, 0, 262144, 2, 262146, 2, 262146, 33554432, 33816576, 33554432, 33816576, 33554434, 33816578, 33554434, 33816578], pc2bytes9 = [0, 268435456, 8, 268435464, 0, 268435456, 8, 268435464, 1024, 268436480, 1032, 268436488, 1024, 268436480, 1032, 268436488], pc2bytes10 = [0, 32, 0, 32, 1048576, 1048608, 1048576, 1048608, 8192, 8224, 8192, 8224, 1056768, 1056800, 1056768, 1056800], pc2bytes11 = [0, 16777216, 512, 16777728, 2097152, 18874368, 2097664, 18874880, 67108864, 83886080, 67109376, 83886592, 69206016, 85983232, 69206528, 85983744], pc2bytes12 = [0, 4096, 134217728, 134221824, 524288, 528384, 134742016, 134746112, 16, 4112, 134217744, 134221840, 524304, 528400, 134742032, 134746128], pc2bytes13 = [0, 4, 256, 260, 0, 4, 256, 260, 1, 5, 257, 261, 1, 5, 257, 261]; + var iterations = key.length() > 8 ? 3 : 1; + var keys = []; + var shifts = [0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0]; + var n = 0, tmp; + for (var j = 0; j < iterations; j++) { + var left = key.getInt32(); + var right = key.getInt32(); + tmp = (left >>> 4 ^ right) & 252645135; + right ^= tmp; + left ^= tmp << 4; + tmp = (right >>> -16 ^ left) & 65535; + left ^= tmp; + right ^= tmp << -16; + tmp = (left >>> 2 ^ right) & 858993459; + right ^= tmp; + left ^= tmp << 2; + tmp = (right >>> -16 ^ left) & 65535; + left ^= tmp; + right ^= tmp << -16; + tmp = (left >>> 1 ^ right) & 1431655765; + right ^= tmp; + left ^= tmp << 1; + tmp = (right >>> 8 ^ left) & 16711935; + left ^= tmp; + right ^= tmp << 8; + tmp = (left >>> 1 ^ right) & 1431655765; + right ^= tmp; + left ^= tmp << 1; + tmp = left << 8 | right >>> 20 & 240; + left = right << 24 | right << 8 & 16711680 | right >>> 8 & 65280 | right >>> 24 & 240; + right = tmp; + for (var i = 0; i < shifts.length; ++i) { + if (shifts[i]) { + left = left << 2 | left >>> 26; + right = right << 2 | right >>> 26; + } else { + left = left << 1 | left >>> 27; + right = right << 1 | right >>> 27; + } + left &= -15; + right &= -15; + var lefttmp = pc2bytes0[left >>> 28] | pc2bytes1[left >>> 24 & 15] | pc2bytes2[left >>> 20 & 15] | pc2bytes3[left >>> 16 & 15] | pc2bytes4[left >>> 12 & 15] | pc2bytes5[left >>> 8 & 15] | pc2bytes6[left >>> 4 & 15]; + var righttmp = pc2bytes7[right >>> 28] | pc2bytes8[right >>> 24 & 15] | pc2bytes9[right >>> 20 & 15] | pc2bytes10[right >>> 16 & 15] | pc2bytes11[right >>> 12 & 15] | pc2bytes12[right >>> 8 & 15] | pc2bytes13[right >>> 4 & 15]; + tmp = (righttmp >>> 16 ^ lefttmp) & 65535; + keys[n++] = lefttmp ^ tmp; + keys[n++] = righttmp ^ tmp << 16; + } + } + return keys; + } + function _updateBlock(keys, input, output, decrypt) { + var iterations = keys.length === 32 ? 3 : 9; + var looping; + if (iterations === 3) { + looping = decrypt ? [30, -2, -2] : [0, 32, 2]; + } else { + looping = decrypt ? [94, 62, -2, 32, 64, 2, 30, -2, -2] : [0, 32, 2, 62, 30, -2, 64, 96, 2]; + } + var tmp; + var left = input[0]; + var right = input[1]; + tmp = (left >>> 4 ^ right) & 252645135; + right ^= tmp; + left ^= tmp << 4; + tmp = (left >>> 16 ^ right) & 65535; + right ^= tmp; + left ^= tmp << 16; + tmp = (right >>> 2 ^ left) & 858993459; + left ^= tmp; + right ^= tmp << 2; + tmp = (right >>> 8 ^ left) & 16711935; + left ^= tmp; + right ^= tmp << 8; + tmp = (left >>> 1 ^ right) & 1431655765; + right ^= tmp; + left ^= tmp << 1; + left = left << 1 | left >>> 31; + right = right << 1 | right >>> 31; + for (var j = 0; j < iterations; j += 3) { + var endloop = looping[j + 1]; + var loopinc = looping[j + 2]; + for (var i = looping[j]; i != endloop; i += loopinc) { + var right1 = right ^ keys[i]; + var right2 = (right >>> 4 | right << 28) ^ keys[i + 1]; + tmp = left; + left = right; + right = tmp ^ (spfunction2[right1 >>> 24 & 63] | spfunction4[right1 >>> 16 & 63] | spfunction6[right1 >>> 8 & 63] | spfunction8[right1 & 63] | spfunction1[right2 >>> 24 & 63] | spfunction3[right2 >>> 16 & 63] | spfunction5[right2 >>> 8 & 63] | spfunction7[right2 & 63]); + } + tmp = left; + left = right; + right = tmp; + } + left = left >>> 1 | left << 31; + right = right >>> 1 | right << 31; + tmp = (left >>> 1 ^ right) & 1431655765; + right ^= tmp; + left ^= tmp << 1; + tmp = (right >>> 8 ^ left) & 16711935; + left ^= tmp; + right ^= tmp << 8; + tmp = (right >>> 2 ^ left) & 858993459; + left ^= tmp; + right ^= tmp << 2; + tmp = (left >>> 16 ^ right) & 65535; + right ^= tmp; + left ^= tmp << 16; + tmp = (left >>> 4 ^ right) & 252645135; + right ^= tmp; + left ^= tmp << 4; + output[0] = left; + output[1] = right; + } + function _createCipher(options) { + options = options || {}; + var mode = (options.mode || "CBC").toUpperCase(); + var algorithm = "DES-" + mode; + var cipher; + if (options.decrypt) { + cipher = forge3.cipher.createDecipher(algorithm, options.key); + } else { + cipher = forge3.cipher.createCipher(algorithm, options.key); + } + var start = cipher.start; + cipher.start = function(iv, options2) { + var output = null; + if (options2 instanceof forge3.util.ByteBuffer) { + output = options2; + options2 = {}; + } + options2 = options2 || {}; + options2.output = output; + options2.iv = iv; + start.call(cipher, options2); + }; + return cipher; + } + } +}); + +// node_modules/node-forge/lib/pbkdf2.js +var require_pbkdf2 = __commonJS({ + "node_modules/node-forge/lib/pbkdf2.js"(exports2, module2) { + var forge3 = require_forge(); + require_hmac(); + require_md(); + require_util(); + var pkcs5 = forge3.pkcs5 = forge3.pkcs5 || {}; + var crypto; + if (forge3.util.isNodejs && !forge3.options.usePureJavaScript) { + crypto = require("crypto"); + } + module2.exports = forge3.pbkdf2 = pkcs5.pbkdf2 = function(p, s, c, dkLen, md, callback) { + if (typeof md === "function") { + callback = md; + md = null; + } + if (forge3.util.isNodejs && !forge3.options.usePureJavaScript && crypto.pbkdf2 && (md === null || typeof md !== "object") && (crypto.pbkdf2Sync.length > 4 || (!md || md === "sha1"))) { + if (typeof md !== "string") { + md = "sha1"; + } + p = Buffer.from(p, "binary"); + s = Buffer.from(s, "binary"); + if (!callback) { + if (crypto.pbkdf2Sync.length === 4) { + return crypto.pbkdf2Sync(p, s, c, dkLen).toString("binary"); + } + return crypto.pbkdf2Sync(p, s, c, dkLen, md).toString("binary"); + } + if (crypto.pbkdf2Sync.length === 4) { + return crypto.pbkdf2(p, s, c, dkLen, function(err2, key) { + if (err2) { + return callback(err2); + } + callback(null, key.toString("binary")); + }); + } + return crypto.pbkdf2(p, s, c, dkLen, md, function(err2, key) { + if (err2) { + return callback(err2); + } + callback(null, key.toString("binary")); + }); + } + if (typeof md === "undefined" || md === null) { + md = "sha1"; + } + if (typeof md === "string") { + if (!(md in forge3.md.algorithms)) { + throw new Error("Unknown hash algorithm: " + md); + } + md = forge3.md[md].create(); + } + var hLen = md.digestLength; + if (dkLen > 4294967295 * hLen) { + var err = new Error("Derived key is too long."); + if (callback) { + return callback(err); + } + throw err; + } + var len = Math.ceil(dkLen / hLen); + var r = dkLen - (len - 1) * hLen; + var prf = forge3.hmac.create(); + prf.start(md, p); + var dk = ""; + var xor, u_c, u_c1; + if (!callback) { + for (var i = 1; i <= len; ++i) { + prf.start(null, null); + prf.update(s); + prf.update(forge3.util.int32ToBytes(i)); + xor = u_c1 = prf.digest().getBytes(); + for (var j = 2; j <= c; ++j) { + prf.start(null, null); + prf.update(u_c1); + u_c = prf.digest().getBytes(); + xor = forge3.util.xorBytes(xor, u_c, hLen); + u_c1 = u_c; + } + dk += i < len ? xor : xor.substr(0, r); + } + return dk; + } + var i = 1, j; + function outer() { + if (i > len) { + return callback(null, dk); + } + prf.start(null, null); + prf.update(s); + prf.update(forge3.util.int32ToBytes(i)); + xor = u_c1 = prf.digest().getBytes(); + j = 2; + inner(); + } + function inner() { + if (j <= c) { + prf.start(null, null); + prf.update(u_c1); + u_c = prf.digest().getBytes(); + xor = forge3.util.xorBytes(xor, u_c, hLen); + u_c1 = u_c; + ++j; + return forge3.util.setImmediate(inner); + } + dk += i < len ? xor : xor.substr(0, r); + ++i; + outer(); + } + outer(); + }; + } +}); + +// node_modules/node-forge/lib/sha256.js +var require_sha256 = __commonJS({ + "node_modules/node-forge/lib/sha256.js"(exports2, module2) { + var forge3 = require_forge(); + require_md(); + require_util(); + var sha256 = module2.exports = forge3.sha256 = forge3.sha256 || {}; + forge3.md.sha256 = forge3.md.algorithms.sha256 = sha256; + sha256.create = function() { + if (!_initialized) { + _init(); + } + var _state = null; + var _input = forge3.util.createBuffer(); + var _w = new Array(64); + var md = { + algorithm: "sha256", + blockLength: 64, + digestLength: 32, + messageLength: 0, + fullMessageLength: null, + messageLengthSize: 8 + }; + md.start = function() { + md.messageLength = 0; + md.fullMessageLength = md.messageLength64 = []; + var int32s = md.messageLengthSize / 4; + for (var i = 0; i < int32s; ++i) { + md.fullMessageLength.push(0); + } + _input = forge3.util.createBuffer(); + _state = { + h0: 1779033703, + h1: 3144134277, + h2: 1013904242, + h3: 2773480762, + h4: 1359893119, + h5: 2600822924, + h6: 528734635, + h7: 1541459225 + }; + return md; + }; + md.start(); + md.update = function(msg, encoding) { + if (encoding === "utf8") { + msg = forge3.util.encodeUtf8(msg); + } + var len = msg.length; + md.messageLength += len; + len = [len / 4294967296 >>> 0, len >>> 0]; + for (var i = md.fullMessageLength.length - 1; i >= 0; --i) { + md.fullMessageLength[i] += len[1]; + len[1] = len[0] + (md.fullMessageLength[i] / 4294967296 >>> 0); + md.fullMessageLength[i] = md.fullMessageLength[i] >>> 0; + len[0] = len[1] / 4294967296 >>> 0; + } + _input.putBytes(msg); + _update(_state, _w, _input); + if (_input.read > 2048 || _input.length() === 0) { + _input.compact(); + } + return md; + }; + md.digest = function() { + var finalBlock = forge3.util.createBuffer(); + finalBlock.putBytes(_input.bytes()); + var remaining = md.fullMessageLength[md.fullMessageLength.length - 1] + md.messageLengthSize; + var overflow = remaining & md.blockLength - 1; + finalBlock.putBytes(_padding.substr(0, md.blockLength - overflow)); + var next, carry; + var bits = md.fullMessageLength[0] * 8; + for (var i = 0; i < md.fullMessageLength.length - 1; ++i) { + next = md.fullMessageLength[i + 1] * 8; + carry = next / 4294967296 >>> 0; + bits += carry; + finalBlock.putInt32(bits >>> 0); + bits = next >>> 0; + } + finalBlock.putInt32(bits); + var s2 = { + h0: _state.h0, + h1: _state.h1, + h2: _state.h2, + h3: _state.h3, + h4: _state.h4, + h5: _state.h5, + h6: _state.h6, + h7: _state.h7 + }; + _update(s2, _w, finalBlock); + var rval = forge3.util.createBuffer(); + rval.putInt32(s2.h0); + rval.putInt32(s2.h1); + rval.putInt32(s2.h2); + rval.putInt32(s2.h3); + rval.putInt32(s2.h4); + rval.putInt32(s2.h5); + rval.putInt32(s2.h6); + rval.putInt32(s2.h7); + return rval; + }; + return md; + }; + var _padding = null; + var _initialized = false; + var _k = null; + function _init() { + _padding = String.fromCharCode(128); + _padding += forge3.util.fillString(String.fromCharCode(0), 64); + _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 + ]; + _initialized = true; + } + function _update(s, w, bytes) { + var t1, t2, s0, s1, ch, maj, i, a, b, c, d, e, f, g, h; + var len = bytes.length(); + while (len >= 64) { + for (i = 0; i < 16; ++i) { + w[i] = bytes.getInt32(); + } + for (; i < 64; ++i) { + t1 = w[i - 2]; + t1 = (t1 >>> 17 | t1 << 15) ^ (t1 >>> 19 | t1 << 13) ^ t1 >>> 10; + t2 = w[i - 15]; + t2 = (t2 >>> 7 | t2 << 25) ^ (t2 >>> 18 | t2 << 14) ^ t2 >>> 3; + w[i] = t1 + w[i - 7] + t2 + w[i - 16] | 0; + } + a = s.h0; + b = s.h1; + c = s.h2; + d = s.h3; + e = s.h4; + f = s.h5; + g = s.h6; + h = s.h7; + for (i = 0; i < 64; ++i) { + s1 = (e >>> 6 | e << 26) ^ (e >>> 11 | e << 21) ^ (e >>> 25 | e << 7); + ch = g ^ e & (f ^ g); + s0 = (a >>> 2 | a << 30) ^ (a >>> 13 | a << 19) ^ (a >>> 22 | a << 10); + maj = a & b | c & (a ^ b); + t1 = h + s1 + ch + _k[i] + w[i]; + t2 = s0 + maj; + h = g; + g = f; + f = e; + e = d + t1 >>> 0; + d = c; + c = b; + b = a; + a = t1 + t2 >>> 0; + } + s.h0 = s.h0 + a | 0; + s.h1 = s.h1 + b | 0; + s.h2 = s.h2 + c | 0; + s.h3 = s.h3 + d | 0; + s.h4 = s.h4 + e | 0; + s.h5 = s.h5 + f | 0; + s.h6 = s.h6 + g | 0; + s.h7 = s.h7 + h | 0; + len -= 64; + } + } + } +}); + +// node_modules/node-forge/lib/prng.js +var require_prng = __commonJS({ + "node_modules/node-forge/lib/prng.js"(exports2, module2) { + var forge3 = require_forge(); + require_util(); + var _crypto = null; + if (forge3.util.isNodejs && !forge3.options.usePureJavaScript && !process.versions["node-webkit"]) { + _crypto = require("crypto"); + } + var prng = module2.exports = forge3.prng = forge3.prng || {}; + prng.create = function(plugin) { + var ctx = { + plugin, + key: null, + seed: null, + time: null, + reseeds: 0, + generated: 0, + keyBytes: "" + }; + var md = plugin.md; + var pools = new Array(32); + for (var i = 0; i < 32; ++i) { + pools[i] = md.create(); + } + ctx.pools = pools; + ctx.pool = 0; + ctx.generate = function(count, callback) { + if (!callback) { + return ctx.generateSync(count); + } + var cipher = ctx.plugin.cipher; + var increment = ctx.plugin.increment; + var formatKey = ctx.plugin.formatKey; + var formatSeed = ctx.plugin.formatSeed; + var b = forge3.util.createBuffer(); + ctx.key = null; + generate(); + function generate(err) { + if (err) { + return callback(err); + } + if (b.length() >= count) { + return callback(null, b.getBytes(count)); + } + if (ctx.generated > 1048575) { + ctx.key = null; + } + if (ctx.key === null) { + return forge3.util.nextTick(function() { + _reseed(generate); + }); + } + var bytes = cipher(ctx.key, ctx.seed); + ctx.generated += bytes.length; + b.putBytes(bytes); + ctx.key = formatKey(cipher(ctx.key, increment(ctx.seed))); + ctx.seed = formatSeed(cipher(ctx.key, ctx.seed)); + forge3.util.setImmediate(generate); + } + }; + ctx.generateSync = function(count) { + var cipher = ctx.plugin.cipher; + var increment = ctx.plugin.increment; + var formatKey = ctx.plugin.formatKey; + var formatSeed = ctx.plugin.formatSeed; + ctx.key = null; + var b = forge3.util.createBuffer(); + while (b.length() < count) { + if (ctx.generated > 1048575) { + ctx.key = null; + } + if (ctx.key === null) { + _reseedSync(); + } + var bytes = cipher(ctx.key, ctx.seed); + ctx.generated += bytes.length; + b.putBytes(bytes); + ctx.key = formatKey(cipher(ctx.key, increment(ctx.seed))); + ctx.seed = formatSeed(cipher(ctx.key, ctx.seed)); + } + return b.getBytes(count); + }; + function _reseed(callback) { + if (ctx.pools[0].messageLength >= 32) { + _seed(); + return callback(); + } + var needed = 32 - ctx.pools[0].messageLength << 5; + ctx.seedFile(needed, function(err, bytes) { + if (err) { + return callback(err); + } + ctx.collect(bytes); + _seed(); + callback(); + }); + } + function _reseedSync() { + if (ctx.pools[0].messageLength >= 32) { + return _seed(); + } + var needed = 32 - ctx.pools[0].messageLength << 5; + ctx.collect(ctx.seedFileSync(needed)); + _seed(); + } + function _seed() { + ctx.reseeds = ctx.reseeds === 4294967295 ? 0 : ctx.reseeds + 1; + var md2 = ctx.plugin.md.create(); + md2.update(ctx.keyBytes); + var _2powK = 1; + for (var k = 0; k < 32; ++k) { + if (ctx.reseeds % _2powK === 0) { + md2.update(ctx.pools[k].digest().getBytes()); + ctx.pools[k].start(); + } + _2powK = _2powK << 1; + } + ctx.keyBytes = md2.digest().getBytes(); + md2.start(); + md2.update(ctx.keyBytes); + var seedBytes = md2.digest().getBytes(); + ctx.key = ctx.plugin.formatKey(ctx.keyBytes); + ctx.seed = ctx.plugin.formatSeed(seedBytes); + ctx.generated = 0; + } + function defaultSeedFile(needed) { + var getRandomValues = null; + var globalScope = forge3.util.globalScope; + var _crypto2 = globalScope.crypto || globalScope.msCrypto; + if (_crypto2 && _crypto2.getRandomValues) { + getRandomValues = function(arr) { + return _crypto2.getRandomValues(arr); + }; + } + var b = forge3.util.createBuffer(); + if (getRandomValues) { + while (b.length() < needed) { + var count = Math.max(1, Math.min(needed - b.length(), 65536) / 4); + var entropy = new Uint32Array(Math.floor(count)); + try { + getRandomValues(entropy); + for (var i2 = 0; i2 < entropy.length; ++i2) { + b.putInt32(entropy[i2]); + } + } catch (e) { + if (!(typeof QuotaExceededError !== "undefined" && e instanceof QuotaExceededError)) { + throw e; + } + } + } + } + if (b.length() < needed) { + var hi, lo, next; + var seed = Math.floor(Math.random() * 65536); + while (b.length() < needed) { + lo = 16807 * (seed & 65535); + hi = 16807 * (seed >> 16); + lo += (hi & 32767) << 16; + lo += hi >> 15; + lo = (lo & 2147483647) + (lo >> 31); + seed = lo & 4294967295; + for (var i2 = 0; i2 < 3; ++i2) { + next = seed >>> (i2 << 3); + next ^= Math.floor(Math.random() * 256); + b.putByte(next & 255); + } + } + } + return b.getBytes(needed); + } + if (_crypto) { + ctx.seedFile = function(needed, callback) { + _crypto.randomBytes(needed, function(err, bytes) { + if (err) { + return callback(err); + } + callback(null, bytes.toString()); + }); + }; + ctx.seedFileSync = function(needed) { + return _crypto.randomBytes(needed).toString(); + }; + } else { + ctx.seedFile = function(needed, callback) { + try { + callback(null, defaultSeedFile(needed)); + } catch (e) { + callback(e); + } + }; + ctx.seedFileSync = defaultSeedFile; + } + ctx.collect = function(bytes) { + var count = bytes.length; + for (var i2 = 0; i2 < count; ++i2) { + ctx.pools[ctx.pool].update(bytes.substr(i2, 1)); + ctx.pool = ctx.pool === 31 ? 0 : ctx.pool + 1; + } + }; + ctx.collectInt = function(i2, n) { + var bytes = ""; + for (var x = 0; x < n; x += 8) { + bytes += String.fromCharCode(i2 >> x & 255); + } + ctx.collect(bytes); + }; + ctx.registerWorker = function(worker) { + if (worker === self) { + ctx.seedFile = function(needed, callback) { + function listener2(e) { + var data = e.data; + if (data.forge && data.forge.prng) { + self.removeEventListener("message", listener2); + callback(data.forge.prng.err, data.forge.prng.bytes); + } + } + self.addEventListener("message", listener2); + self.postMessage({ forge: { prng: { needed } } }); + }; + } else { + var listener = function(e) { + var data = e.data; + if (data.forge && data.forge.prng) { + ctx.seedFile(data.forge.prng.needed, function(err, bytes) { + worker.postMessage({ forge: { prng: { err, bytes } } }); + }); + } + }; + worker.addEventListener("message", listener); + } + }; + return ctx; + }; + } +}); + +// node_modules/node-forge/lib/random.js +var require_random = __commonJS({ + "node_modules/node-forge/lib/random.js"(exports2, module2) { + var forge3 = require_forge(); + require_aes(); + require_sha256(); + require_prng(); + require_util(); + (function() { + if (forge3.random && forge3.random.getBytes) { + module2.exports = forge3.random; + return; + } + (function(jQuery2) { + var prng_aes = {}; + var _prng_aes_output = new Array(4); + var _prng_aes_buffer = forge3.util.createBuffer(); + prng_aes.formatKey = function(key2) { + var tmp = forge3.util.createBuffer(key2); + key2 = new Array(4); + key2[0] = tmp.getInt32(); + key2[1] = tmp.getInt32(); + key2[2] = tmp.getInt32(); + key2[3] = tmp.getInt32(); + return forge3.aes._expandKey(key2, false); + }; + prng_aes.formatSeed = function(seed) { + var tmp = forge3.util.createBuffer(seed); + seed = new Array(4); + seed[0] = tmp.getInt32(); + seed[1] = tmp.getInt32(); + seed[2] = tmp.getInt32(); + seed[3] = tmp.getInt32(); + return seed; + }; + prng_aes.cipher = function(key2, seed) { + forge3.aes._updateBlock(key2, seed, _prng_aes_output, false); + _prng_aes_buffer.putInt32(_prng_aes_output[0]); + _prng_aes_buffer.putInt32(_prng_aes_output[1]); + _prng_aes_buffer.putInt32(_prng_aes_output[2]); + _prng_aes_buffer.putInt32(_prng_aes_output[3]); + return _prng_aes_buffer.getBytes(); + }; + prng_aes.increment = function(seed) { + ++seed[3]; + return seed; + }; + prng_aes.md = forge3.md.sha256; + function spawnPrng() { + var ctx = forge3.prng.create(prng_aes); + ctx.getBytes = function(count, callback) { + return ctx.generate(count, callback); + }; + ctx.getBytesSync = function(count) { + return ctx.generate(count); + }; + return ctx; + } + var _ctx = spawnPrng(); + var getRandomValues = null; + var globalScope = forge3.util.globalScope; + var _crypto = globalScope.crypto || globalScope.msCrypto; + if (_crypto && _crypto.getRandomValues) { + getRandomValues = function(arr) { + return _crypto.getRandomValues(arr); + }; + } + if (forge3.options.usePureJavaScript || !forge3.util.isNodejs && !getRandomValues) { + if (typeof window === "undefined" || window.document === void 0) { + } + _ctx.collectInt(+new Date(), 32); + if (typeof navigator !== "undefined") { + var _navBytes = ""; + for (var key in navigator) { + try { + if (typeof navigator[key] == "string") { + _navBytes += navigator[key]; + } + } catch (e) { + } + } + _ctx.collect(_navBytes); + _navBytes = null; + } + if (jQuery2) { + jQuery2().mousemove(function(e) { + _ctx.collectInt(e.clientX, 16); + _ctx.collectInt(e.clientY, 16); + }); + jQuery2().keypress(function(e) { + _ctx.collectInt(e.charCode, 8); + }); + } + } + if (!forge3.random) { + forge3.random = _ctx; + } else { + for (var key in _ctx) { + forge3.random[key] = _ctx[key]; + } + } + forge3.random.createInstance = spawnPrng; + module2.exports = forge3.random; + })(typeof jQuery !== "undefined" ? jQuery : null); + })(); + } +}); + +// node_modules/node-forge/lib/rc2.js +var require_rc2 = __commonJS({ + "node_modules/node-forge/lib/rc2.js"(exports2, module2) { + var forge3 = require_forge(); + require_util(); + var piTable = [ + 217, + 120, + 249, + 196, + 25, + 221, + 181, + 237, + 40, + 233, + 253, + 121, + 74, + 160, + 216, + 157, + 198, + 126, + 55, + 131, + 43, + 118, + 83, + 142, + 98, + 76, + 100, + 136, + 68, + 139, + 251, + 162, + 23, + 154, + 89, + 245, + 135, + 179, + 79, + 19, + 97, + 69, + 109, + 141, + 9, + 129, + 125, + 50, + 189, + 143, + 64, + 235, + 134, + 183, + 123, + 11, + 240, + 149, + 33, + 34, + 92, + 107, + 78, + 130, + 84, + 214, + 101, + 147, + 206, + 96, + 178, + 28, + 115, + 86, + 192, + 20, + 167, + 140, + 241, + 220, + 18, + 117, + 202, + 31, + 59, + 190, + 228, + 209, + 66, + 61, + 212, + 48, + 163, + 60, + 182, + 38, + 111, + 191, + 14, + 218, + 70, + 105, + 7, + 87, + 39, + 242, + 29, + 155, + 188, + 148, + 67, + 3, + 248, + 17, + 199, + 246, + 144, + 239, + 62, + 231, + 6, + 195, + 213, + 47, + 200, + 102, + 30, + 215, + 8, + 232, + 234, + 222, + 128, + 82, + 238, + 247, + 132, + 170, + 114, + 172, + 53, + 77, + 106, + 42, + 150, + 26, + 210, + 113, + 90, + 21, + 73, + 116, + 75, + 159, + 208, + 94, + 4, + 24, + 164, + 236, + 194, + 224, + 65, + 110, + 15, + 81, + 203, + 204, + 36, + 145, + 175, + 80, + 161, + 244, + 112, + 57, + 153, + 124, + 58, + 133, + 35, + 184, + 180, + 122, + 252, + 2, + 54, + 91, + 37, + 85, + 151, + 49, + 45, + 93, + 250, + 152, + 227, + 138, + 146, + 174, + 5, + 223, + 41, + 16, + 103, + 108, + 186, + 201, + 211, + 0, + 230, + 207, + 225, + 158, + 168, + 44, + 99, + 22, + 1, + 63, + 88, + 226, + 137, + 169, + 13, + 56, + 52, + 27, + 171, + 51, + 255, + 176, + 187, + 72, + 12, + 95, + 185, + 177, + 205, + 46, + 197, + 243, + 219, + 71, + 229, + 165, + 156, + 119, + 10, + 166, + 32, + 104, + 254, + 127, + 193, + 173 + ]; + var s = [1, 2, 3, 5]; + var rol = function(word, bits) { + return word << bits & 65535 | (word & 65535) >> 16 - bits; + }; + var ror = function(word, bits) { + return (word & 65535) >> bits | word << 16 - bits & 65535; + }; + module2.exports = forge3.rc2 = forge3.rc2 || {}; + forge3.rc2.expandKey = function(key, effKeyBits) { + if (typeof key === "string") { + key = forge3.util.createBuffer(key); + } + effKeyBits = effKeyBits || 128; + var L = key; + var T = key.length(); + var T1 = effKeyBits; + var T8 = Math.ceil(T1 / 8); + var TM = 255 >> (T1 & 7); + var i; + for (i = T; i < 128; i++) { + L.putByte(piTable[L.at(i - 1) + L.at(i - T) & 255]); + } + L.setAt(128 - T8, piTable[L.at(128 - T8) & TM]); + for (i = 127 - T8; i >= 0; i--) { + L.setAt(i, piTable[L.at(i + 1) ^ L.at(i + T8)]); + } + return L; + }; + var createCipher = function(key, bits, encrypt) { + var _finish = false, _input = null, _output = null, _iv = null; + var mixRound, mashRound; + var i, j, K = []; + key = forge3.rc2.expandKey(key, bits); + for (i = 0; i < 64; i++) { + K.push(key.getInt16Le()); + } + if (encrypt) { + mixRound = function(R) { + for (i = 0; i < 4; i++) { + R[i] += K[j] + (R[(i + 3) % 4] & R[(i + 2) % 4]) + (~R[(i + 3) % 4] & R[(i + 1) % 4]); + R[i] = rol(R[i], s[i]); + j++; + } + }; + mashRound = function(R) { + for (i = 0; i < 4; i++) { + R[i] += K[R[(i + 3) % 4] & 63]; + } + }; + } else { + mixRound = function(R) { + for (i = 3; i >= 0; i--) { + R[i] = ror(R[i], s[i]); + R[i] -= K[j] + (R[(i + 3) % 4] & R[(i + 2) % 4]) + (~R[(i + 3) % 4] & R[(i + 1) % 4]); + j--; + } + }; + mashRound = function(R) { + for (i = 3; i >= 0; i--) { + R[i] -= K[R[(i + 3) % 4] & 63]; + } + }; + } + var runPlan = function(plan) { + var R = []; + for (i = 0; i < 4; i++) { + var val = _input.getInt16Le(); + if (_iv !== null) { + if (encrypt) { + val ^= _iv.getInt16Le(); + } else { + _iv.putInt16Le(val); + } + } + R.push(val & 65535); + } + j = encrypt ? 0 : 63; + for (var ptr = 0; ptr < plan.length; ptr++) { + for (var ctr = 0; ctr < plan[ptr][0]; ctr++) { + plan[ptr][1](R); + } + } + for (i = 0; i < 4; i++) { + if (_iv !== null) { + if (encrypt) { + _iv.putInt16Le(R[i]); + } else { + R[i] ^= _iv.getInt16Le(); + } + } + _output.putInt16Le(R[i]); + } + }; + var cipher = null; + cipher = { + start: function(iv, output) { + if (iv) { + if (typeof iv === "string") { + iv = forge3.util.createBuffer(iv); + } + } + _finish = false; + _input = forge3.util.createBuffer(); + _output = output || new forge3.util.createBuffer(); + _iv = iv; + cipher.output = _output; + }, + update: function(input) { + if (!_finish) { + _input.putBuffer(input); + } + while (_input.length() >= 8) { + runPlan([ + [5, mixRound], + [1, mashRound], + [6, mixRound], + [1, mashRound], + [5, mixRound] + ]); + } + }, + finish: function(pad) { + var rval = true; + if (encrypt) { + if (pad) { + rval = pad(8, _input, !encrypt); + } else { + var padding = _input.length() === 8 ? 8 : 8 - _input.length(); + _input.fillWithByte(padding, padding); + } + } + if (rval) { + _finish = true; + cipher.update(); + } + if (!encrypt) { + rval = _input.length() === 0; + if (rval) { + if (pad) { + rval = pad(8, _output, !encrypt); + } else { + var len = _output.length(); + var count = _output.at(len - 1); + if (count > len) { + rval = false; + } else { + _output.truncate(count); + } + } + } + } + return rval; + } + }; + return cipher; + }; + forge3.rc2.startEncrypting = function(key, iv, output) { + var cipher = forge3.rc2.createEncryptionCipher(key, 128); + cipher.start(iv, output); + return cipher; + }; + forge3.rc2.createEncryptionCipher = function(key, bits) { + return createCipher(key, bits, true); + }; + forge3.rc2.startDecrypting = function(key, iv, output) { + var cipher = forge3.rc2.createDecryptionCipher(key, 128); + cipher.start(iv, output); + return cipher; + }; + forge3.rc2.createDecryptionCipher = function(key, bits) { + return createCipher(key, bits, false); + }; + } +}); + +// node_modules/node-forge/lib/jsbn.js +var require_jsbn = __commonJS({ + "node_modules/node-forge/lib/jsbn.js"(exports2, module2) { + var forge3 = require_forge(); + module2.exports = forge3.jsbn = forge3.jsbn || {}; + var dbits; + var canary = 244837814094590; + var j_lm = (canary & 16777215) == 15715070; + function BigInteger(a, b, c) { + this.data = []; + if (a != null) + if (typeof a == "number") + this.fromNumber(a, b, c); + else if (b == null && typeof a != "string") + this.fromString(a, 256); + else + this.fromString(a, b); + } + forge3.jsbn.BigInteger = BigInteger; + function nbi() { + return new BigInteger(null); + } + function am1(i, x, w, j, c, n) { + while (--n >= 0) { + var v = x * this.data[i++] + w.data[j] + c; + c = Math.floor(v / 67108864); + w.data[j++] = v & 67108863; + } + return c; + } + function am2(i, x, w, j, c, n) { + var xl = x & 32767, xh = x >> 15; + while (--n >= 0) { + var l = this.data[i] & 32767; + var h = this.data[i++] >> 15; + var m = xh * l + h * xl; + l = xl * l + ((m & 32767) << 15) + w.data[j] + (c & 1073741823); + c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30); + w.data[j++] = l & 1073741823; + } + return c; + } + function am3(i, x, w, j, c, n) { + var xl = x & 16383, xh = x >> 14; + while (--n >= 0) { + var l = this.data[i] & 16383; + var h = this.data[i++] >> 14; + var m = xh * l + h * xl; + l = xl * l + ((m & 16383) << 14) + w.data[j] + c; + c = (l >> 28) + (m >> 14) + xh * h; + w.data[j++] = l & 268435455; + } + return c; + } + if (typeof navigator === "undefined") { + BigInteger.prototype.am = am3; + dbits = 28; + } else if (j_lm && navigator.appName == "Microsoft Internet Explorer") { + BigInteger.prototype.am = am2; + dbits = 30; + } else if (j_lm && navigator.appName != "Netscape") { + BigInteger.prototype.am = am1; + dbits = 26; + } else { + BigInteger.prototype.am = am3; + dbits = 28; + } + BigInteger.prototype.DB = dbits; + BigInteger.prototype.DM = (1 << dbits) - 1; + BigInteger.prototype.DV = 1 << dbits; + var BI_FP = 52; + BigInteger.prototype.FV = Math.pow(2, BI_FP); + BigInteger.prototype.F1 = BI_FP - dbits; + BigInteger.prototype.F2 = 2 * dbits - BI_FP; + var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"; + var BI_RC = new Array(); + var rr; + var vv; + rr = "0".charCodeAt(0); + for (vv = 0; vv <= 9; ++vv) + BI_RC[rr++] = vv; + rr = "a".charCodeAt(0); + for (vv = 10; vv < 36; ++vv) + BI_RC[rr++] = vv; + rr = "A".charCodeAt(0); + for (vv = 10; vv < 36; ++vv) + BI_RC[rr++] = vv; + function int2char(n) { + return BI_RM.charAt(n); + } + function intAt(s, i) { + var c = BI_RC[s.charCodeAt(i)]; + return c == null ? -1 : c; + } + function bnpCopyTo(r) { + for (var i = this.t - 1; i >= 0; --i) + r.data[i] = this.data[i]; + r.t = this.t; + r.s = this.s; + } + function bnpFromInt(x) { + this.t = 1; + this.s = x < 0 ? -1 : 0; + if (x > 0) + this.data[0] = x; + else if (x < -1) + this.data[0] = x + this.DV; + else + this.t = 0; + } + function nbv(i) { + var r = nbi(); + r.fromInt(i); + return r; + } + function bnpFromString(s, b) { + var k; + if (b == 16) + k = 4; + else if (b == 8) + k = 3; + else if (b == 256) + k = 8; + else if (b == 2) + k = 1; + else if (b == 32) + k = 5; + else if (b == 4) + k = 2; + else { + this.fromRadix(s, b); + return; + } + this.t = 0; + this.s = 0; + var i = s.length, mi = false, sh = 0; + while (--i >= 0) { + var x = k == 8 ? s[i] & 255 : intAt(s, i); + if (x < 0) { + if (s.charAt(i) == "-") + mi = true; + continue; + } + mi = false; + if (sh == 0) + this.data[this.t++] = x; + else if (sh + k > this.DB) { + this.data[this.t - 1] |= (x & (1 << this.DB - sh) - 1) << sh; + this.data[this.t++] = x >> this.DB - sh; + } else + this.data[this.t - 1] |= x << sh; + sh += k; + if (sh >= this.DB) + sh -= this.DB; + } + if (k == 8 && (s[0] & 128) != 0) { + this.s = -1; + if (sh > 0) + this.data[this.t - 1] |= (1 << this.DB - sh) - 1 << sh; + } + this.clamp(); + if (mi) + BigInteger.ZERO.subTo(this, this); + } + function bnpClamp() { + var c = this.s & this.DM; + while (this.t > 0 && this.data[this.t - 1] == c) + --this.t; + } + function bnToString(b) { + if (this.s < 0) + return "-" + this.negate().toString(b); + var k; + if (b == 16) + k = 4; + else if (b == 8) + k = 3; + else if (b == 2) + k = 1; + else if (b == 32) + k = 5; + else if (b == 4) + k = 2; + else + return this.toRadix(b); + var km = (1 << k) - 1, d, m = false, r = "", i = this.t; + var p = this.DB - i * this.DB % k; + if (i-- > 0) { + if (p < this.DB && (d = this.data[i] >> p) > 0) { + m = true; + r = int2char(d); + } + while (i >= 0) { + if (p < k) { + d = (this.data[i] & (1 << p) - 1) << k - p; + d |= this.data[--i] >> (p += this.DB - k); + } else { + d = this.data[i] >> (p -= k) & km; + if (p <= 0) { + p += this.DB; + --i; + } + } + if (d > 0) + m = true; + if (m) + r += int2char(d); + } + } + return m ? r : "0"; + } + function bnNegate() { + var r = nbi(); + BigInteger.ZERO.subTo(this, r); + return r; + } + function bnAbs() { + return this.s < 0 ? this.negate() : this; + } + function bnCompareTo(a) { + var r = this.s - a.s; + if (r != 0) + return r; + var i = this.t; + r = i - a.t; + if (r != 0) + return this.s < 0 ? -r : r; + while (--i >= 0) + if ((r = this.data[i] - a.data[i]) != 0) + return r; + return 0; + } + function nbits(x) { + var r = 1, t; + if ((t = x >>> 16) != 0) { + x = t; + r += 16; + } + if ((t = x >> 8) != 0) { + x = t; + r += 8; + } + if ((t = x >> 4) != 0) { + x = t; + r += 4; + } + if ((t = x >> 2) != 0) { + x = t; + r += 2; + } + if ((t = x >> 1) != 0) { + x = t; + r += 1; + } + return r; + } + function bnBitLength() { + if (this.t <= 0) + return 0; + return this.DB * (this.t - 1) + nbits(this.data[this.t - 1] ^ this.s & this.DM); + } + function bnpDLShiftTo(n, r) { + var i; + for (i = this.t - 1; i >= 0; --i) + r.data[i + n] = this.data[i]; + for (i = n - 1; i >= 0; --i) + r.data[i] = 0; + r.t = this.t + n; + r.s = this.s; + } + function bnpDRShiftTo(n, r) { + for (var i = n; i < this.t; ++i) + r.data[i - n] = this.data[i]; + r.t = Math.max(this.t - n, 0); + r.s = this.s; + } + function bnpLShiftTo(n, r) { + var bs = n % this.DB; + var cbs = this.DB - bs; + var bm = (1 << cbs) - 1; + var ds = Math.floor(n / this.DB), c = this.s << bs & this.DM, i; + for (i = this.t - 1; i >= 0; --i) { + r.data[i + ds + 1] = this.data[i] >> cbs | c; + c = (this.data[i] & bm) << bs; + } + for (i = ds - 1; i >= 0; --i) + r.data[i] = 0; + r.data[ds] = c; + r.t = this.t + ds + 1; + r.s = this.s; + r.clamp(); + } + function bnpRShiftTo(n, r) { + r.s = this.s; + var ds = Math.floor(n / this.DB); + if (ds >= this.t) { + r.t = 0; + return; + } + var bs = n % this.DB; + var cbs = this.DB - bs; + var bm = (1 << bs) - 1; + r.data[0] = this.data[ds] >> bs; + for (var i = ds + 1; i < this.t; ++i) { + r.data[i - ds - 1] |= (this.data[i] & bm) << cbs; + r.data[i - ds] = this.data[i] >> bs; + } + if (bs > 0) + r.data[this.t - ds - 1] |= (this.s & bm) << cbs; + r.t = this.t - ds; + r.clamp(); + } + function bnpSubTo(a, r) { + var i = 0, c = 0, m = Math.min(a.t, this.t); + while (i < m) { + c += this.data[i] - a.data[i]; + r.data[i++] = c & this.DM; + c >>= this.DB; + } + if (a.t < this.t) { + c -= a.s; + while (i < this.t) { + c += this.data[i]; + r.data[i++] = c & this.DM; + c >>= this.DB; + } + c += this.s; + } else { + c += this.s; + while (i < a.t) { + c -= a.data[i]; + r.data[i++] = c & this.DM; + c >>= this.DB; + } + c -= a.s; + } + r.s = c < 0 ? -1 : 0; + if (c < -1) + r.data[i++] = this.DV + c; + else if (c > 0) + r.data[i++] = c; + r.t = i; + r.clamp(); + } + function bnpMultiplyTo(a, r) { + var x = this.abs(), y = a.abs(); + var i = x.t; + r.t = i + y.t; + while (--i >= 0) + r.data[i] = 0; + for (i = 0; i < y.t; ++i) + r.data[i + x.t] = x.am(0, y.data[i], r, i, 0, x.t); + r.s = 0; + r.clamp(); + if (this.s != a.s) + BigInteger.ZERO.subTo(r, r); + } + function bnpSquareTo(r) { + var x = this.abs(); + var i = r.t = 2 * x.t; + while (--i >= 0) + r.data[i] = 0; + for (i = 0; i < x.t - 1; ++i) { + var c = x.am(i, x.data[i], r, 2 * i, 0, 1); + if ((r.data[i + x.t] += x.am(i + 1, 2 * x.data[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) { + r.data[i + x.t] -= x.DV; + r.data[i + x.t + 1] = 1; + } + } + if (r.t > 0) + r.data[r.t - 1] += x.am(i, x.data[i], r, 2 * i, 0, 1); + r.s = 0; + r.clamp(); + } + function bnpDivRemTo(m, q, r) { + var pm = m.abs(); + if (pm.t <= 0) + return; + var pt = this.abs(); + if (pt.t < pm.t) { + if (q != null) + q.fromInt(0); + if (r != null) + this.copyTo(r); + return; + } + if (r == null) + r = nbi(); + var y = nbi(), ts = this.s, ms = m.s; + var nsh = this.DB - nbits(pm.data[pm.t - 1]); + if (nsh > 0) { + pm.lShiftTo(nsh, y); + pt.lShiftTo(nsh, r); + } else { + pm.copyTo(y); + pt.copyTo(r); + } + var ys = y.t; + var y0 = y.data[ys - 1]; + if (y0 == 0) + return; + var yt = y0 * (1 << this.F1) + (ys > 1 ? y.data[ys - 2] >> this.F2 : 0); + var d1 = this.FV / yt, d2 = (1 << this.F1) / yt, e = 1 << this.F2; + var i = r.t, j = i - ys, t = q == null ? nbi() : q; + y.dlShiftTo(j, t); + if (r.compareTo(t) >= 0) { + r.data[r.t++] = 1; + r.subTo(t, r); + } + BigInteger.ONE.dlShiftTo(ys, t); + t.subTo(y, y); + while (y.t < ys) + y.data[y.t++] = 0; + while (--j >= 0) { + var qd = r.data[--i] == y0 ? this.DM : Math.floor(r.data[i] * d1 + (r.data[i - 1] + e) * d2); + if ((r.data[i] += y.am(0, qd, r, j, 0, ys)) < qd) { + y.dlShiftTo(j, t); + r.subTo(t, r); + while (r.data[i] < --qd) + r.subTo(t, r); + } + } + if (q != null) { + r.drShiftTo(ys, q); + if (ts != ms) + BigInteger.ZERO.subTo(q, q); + } + r.t = ys; + r.clamp(); + if (nsh > 0) + r.rShiftTo(nsh, r); + if (ts < 0) + BigInteger.ZERO.subTo(r, r); + } + function bnMod(a) { + var r = nbi(); + this.abs().divRemTo(a, null, r); + if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) + a.subTo(r, r); + return r; + } + function Classic(m) { + this.m = m; + } + function cConvert(x) { + if (x.s < 0 || x.compareTo(this.m) >= 0) + return x.mod(this.m); + else + return x; + } + function cRevert(x) { + return x; + } + function cReduce(x) { + x.divRemTo(this.m, null, x); + } + function cMulTo(x, y, r) { + x.multiplyTo(y, r); + this.reduce(r); + } + function cSqrTo(x, r) { + x.squareTo(r); + this.reduce(r); + } + Classic.prototype.convert = cConvert; + Classic.prototype.revert = cRevert; + Classic.prototype.reduce = cReduce; + Classic.prototype.mulTo = cMulTo; + Classic.prototype.sqrTo = cSqrTo; + function bnpInvDigit() { + if (this.t < 1) + return 0; + var x = this.data[0]; + if ((x & 1) == 0) + return 0; + var y = x & 3; + y = y * (2 - (x & 15) * y) & 15; + y = y * (2 - (x & 255) * y) & 255; + y = y * (2 - ((x & 65535) * y & 65535)) & 65535; + y = y * (2 - x * y % this.DV) % this.DV; + return y > 0 ? this.DV - y : -y; + } + function Montgomery(m) { + this.m = m; + this.mp = m.invDigit(); + this.mpl = this.mp & 32767; + this.mph = this.mp >> 15; + this.um = (1 << m.DB - 15) - 1; + this.mt2 = 2 * m.t; + } + function montConvert(x) { + var r = nbi(); + x.abs().dlShiftTo(this.m.t, r); + r.divRemTo(this.m, null, r); + if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) + this.m.subTo(r, r); + return r; + } + function montRevert(x) { + var r = nbi(); + x.copyTo(r); + this.reduce(r); + return r; + } + function montReduce(x) { + while (x.t <= this.mt2) + x.data[x.t++] = 0; + for (var i = 0; i < this.m.t; ++i) { + var j = x.data[i] & 32767; + var u0 = j * this.mpl + ((j * this.mph + (x.data[i] >> 15) * this.mpl & this.um) << 15) & x.DM; + j = i + this.m.t; + x.data[j] += this.m.am(0, u0, x, i, 0, this.m.t); + while (x.data[j] >= x.DV) { + x.data[j] -= x.DV; + x.data[++j]++; + } + } + x.clamp(); + x.drShiftTo(this.m.t, x); + if (x.compareTo(this.m) >= 0) + x.subTo(this.m, x); + } + function montSqrTo(x, r) { + x.squareTo(r); + this.reduce(r); + } + function montMulTo(x, y, r) { + x.multiplyTo(y, r); + this.reduce(r); + } + Montgomery.prototype.convert = montConvert; + Montgomery.prototype.revert = montRevert; + Montgomery.prototype.reduce = montReduce; + Montgomery.prototype.mulTo = montMulTo; + Montgomery.prototype.sqrTo = montSqrTo; + function bnpIsEven() { + return (this.t > 0 ? this.data[0] & 1 : this.s) == 0; + } + function bnpExp(e, z) { + if (e > 4294967295 || e < 1) + return BigInteger.ONE; + var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e) - 1; + g.copyTo(r); + while (--i >= 0) { + z.sqrTo(r, r2); + if ((e & 1 << i) > 0) + z.mulTo(r2, g, r); + else { + var t = r; + r = r2; + r2 = t; + } + } + return z.revert(r); + } + function bnModPowInt(e, m) { + var z; + if (e < 256 || m.isEven()) + z = new Classic(m); + else + z = new Montgomery(m); + return this.exp(e, z); + } + BigInteger.prototype.copyTo = bnpCopyTo; + BigInteger.prototype.fromInt = bnpFromInt; + BigInteger.prototype.fromString = bnpFromString; + BigInteger.prototype.clamp = bnpClamp; + BigInteger.prototype.dlShiftTo = bnpDLShiftTo; + BigInteger.prototype.drShiftTo = bnpDRShiftTo; + BigInteger.prototype.lShiftTo = bnpLShiftTo; + BigInteger.prototype.rShiftTo = bnpRShiftTo; + BigInteger.prototype.subTo = bnpSubTo; + BigInteger.prototype.multiplyTo = bnpMultiplyTo; + BigInteger.prototype.squareTo = bnpSquareTo; + BigInteger.prototype.divRemTo = bnpDivRemTo; + BigInteger.prototype.invDigit = bnpInvDigit; + BigInteger.prototype.isEven = bnpIsEven; + BigInteger.prototype.exp = bnpExp; + BigInteger.prototype.toString = bnToString; + BigInteger.prototype.negate = bnNegate; + BigInteger.prototype.abs = bnAbs; + BigInteger.prototype.compareTo = bnCompareTo; + BigInteger.prototype.bitLength = bnBitLength; + BigInteger.prototype.mod = bnMod; + BigInteger.prototype.modPowInt = bnModPowInt; + BigInteger.ZERO = nbv(0); + BigInteger.ONE = nbv(1); + function bnClone() { + var r = nbi(); + this.copyTo(r); + return r; + } + function bnIntValue() { + if (this.s < 0) { + if (this.t == 1) + return this.data[0] - this.DV; + else if (this.t == 0) + return -1; + } else if (this.t == 1) + return this.data[0]; + else if (this.t == 0) + return 0; + return (this.data[1] & (1 << 32 - this.DB) - 1) << this.DB | this.data[0]; + } + function bnByteValue() { + return this.t == 0 ? this.s : this.data[0] << 24 >> 24; + } + function bnShortValue() { + return this.t == 0 ? this.s : this.data[0] << 16 >> 16; + } + function bnpChunkSize(r) { + return Math.floor(Math.LN2 * this.DB / Math.log(r)); + } + function bnSigNum() { + if (this.s < 0) + return -1; + else if (this.t <= 0 || this.t == 1 && this.data[0] <= 0) + return 0; + else + return 1; + } + function bnpToRadix(b) { + if (b == null) + b = 10; + if (this.signum() == 0 || b < 2 || b > 36) + return "0"; + var cs = this.chunkSize(b); + var a = Math.pow(b, cs); + var d = nbv(a), y = nbi(), z = nbi(), r = ""; + this.divRemTo(d, y, z); + while (y.signum() > 0) { + r = (a + z.intValue()).toString(b).substr(1) + r; + y.divRemTo(d, y, z); + } + return z.intValue().toString(b) + r; + } + function bnpFromRadix(s, b) { + this.fromInt(0); + if (b == null) + b = 10; + var cs = this.chunkSize(b); + var d = Math.pow(b, cs), mi = false, j = 0, w = 0; + for (var i = 0; i < s.length; ++i) { + var x = intAt(s, i); + if (x < 0) { + if (s.charAt(i) == "-" && this.signum() == 0) + mi = true; + continue; + } + w = b * w + x; + if (++j >= cs) { + this.dMultiply(d); + this.dAddOffset(w, 0); + j = 0; + w = 0; + } + } + if (j > 0) { + this.dMultiply(Math.pow(b, j)); + this.dAddOffset(w, 0); + } + if (mi) + BigInteger.ZERO.subTo(this, this); + } + function bnpFromNumber(a, b, c) { + if (typeof b == "number") { + if (a < 2) + this.fromInt(1); + else { + this.fromNumber(a, c); + if (!this.testBit(a - 1)) + this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, this); + if (this.isEven()) + this.dAddOffset(1, 0); + while (!this.isProbablePrime(b)) { + this.dAddOffset(2, 0); + if (this.bitLength() > a) + this.subTo(BigInteger.ONE.shiftLeft(a - 1), this); + } + } + } else { + var x = new Array(), t = a & 7; + x.length = (a >> 3) + 1; + b.nextBytes(x); + if (t > 0) + x[0] &= (1 << t) - 1; + else + x[0] = 0; + this.fromString(x, 256); + } + } + function bnToByteArray() { + var i = this.t, r = new Array(); + r[0] = this.s; + var p = this.DB - i * this.DB % 8, d, k = 0; + if (i-- > 0) { + if (p < this.DB && (d = this.data[i] >> p) != (this.s & this.DM) >> p) + r[k++] = d | this.s << this.DB - p; + while (i >= 0) { + if (p < 8) { + d = (this.data[i] & (1 << p) - 1) << 8 - p; + d |= this.data[--i] >> (p += this.DB - 8); + } else { + d = this.data[i] >> (p -= 8) & 255; + if (p <= 0) { + p += this.DB; + --i; + } + } + if ((d & 128) != 0) + d |= -256; + if (k == 0 && (this.s & 128) != (d & 128)) + ++k; + if (k > 0 || d != this.s) + r[k++] = d; + } + } + return r; + } + function bnEquals(a) { + return this.compareTo(a) == 0; + } + function bnMin(a) { + return this.compareTo(a) < 0 ? this : a; + } + function bnMax(a) { + return this.compareTo(a) > 0 ? this : a; + } + function bnpBitwiseTo(a, op, r) { + var i, f, m = Math.min(a.t, this.t); + for (i = 0; i < m; ++i) + r.data[i] = op(this.data[i], a.data[i]); + if (a.t < this.t) { + f = a.s & this.DM; + for (i = m; i < this.t; ++i) + r.data[i] = op(this.data[i], f); + r.t = this.t; + } else { + f = this.s & this.DM; + for (i = m; i < a.t; ++i) + r.data[i] = op(f, a.data[i]); + r.t = a.t; + } + r.s = op(this.s, a.s); + r.clamp(); + } + function op_and(x, y) { + return x & y; + } + function bnAnd(a) { + var r = nbi(); + this.bitwiseTo(a, op_and, r); + return r; + } + function op_or(x, y) { + return x | y; + } + function bnOr(a) { + var r = nbi(); + this.bitwiseTo(a, op_or, r); + return r; + } + function op_xor(x, y) { + return x ^ y; + } + function bnXor(a) { + var r = nbi(); + this.bitwiseTo(a, op_xor, r); + return r; + } + function op_andnot(x, y) { + return x & ~y; + } + function bnAndNot(a) { + var r = nbi(); + this.bitwiseTo(a, op_andnot, r); + return r; + } + function bnNot() { + var r = nbi(); + for (var i = 0; i < this.t; ++i) + r.data[i] = this.DM & ~this.data[i]; + r.t = this.t; + r.s = ~this.s; + return r; + } + function bnShiftLeft(n) { + var r = nbi(); + if (n < 0) + this.rShiftTo(-n, r); + else + this.lShiftTo(n, r); + return r; + } + function bnShiftRight(n) { + var r = nbi(); + if (n < 0) + this.lShiftTo(-n, r); + else + this.rShiftTo(n, r); + return r; + } + function lbit(x) { + if (x == 0) + return -1; + var r = 0; + if ((x & 65535) == 0) { + x >>= 16; + r += 16; + } + if ((x & 255) == 0) { + x >>= 8; + r += 8; + } + if ((x & 15) == 0) { + x >>= 4; + r += 4; + } + if ((x & 3) == 0) { + x >>= 2; + r += 2; + } + if ((x & 1) == 0) + ++r; + return r; + } + function bnGetLowestSetBit() { + for (var i = 0; i < this.t; ++i) + if (this.data[i] != 0) + return i * this.DB + lbit(this.data[i]); + if (this.s < 0) + return this.t * this.DB; + return -1; + } + function cbit(x) { + var r = 0; + while (x != 0) { + x &= x - 1; + ++r; + } + return r; + } + function bnBitCount() { + var r = 0, x = this.s & this.DM; + for (var i = 0; i < this.t; ++i) + r += cbit(this.data[i] ^ x); + return r; + } + function bnTestBit(n) { + var j = Math.floor(n / this.DB); + if (j >= this.t) + return this.s != 0; + return (this.data[j] & 1 << n % this.DB) != 0; + } + function bnpChangeBit(n, op) { + var r = BigInteger.ONE.shiftLeft(n); + this.bitwiseTo(r, op, r); + return r; + } + function bnSetBit(n) { + return this.changeBit(n, op_or); + } + function bnClearBit(n) { + return this.changeBit(n, op_andnot); + } + function bnFlipBit(n) { + return this.changeBit(n, op_xor); + } + function bnpAddTo(a, r) { + var i = 0, c = 0, m = Math.min(a.t, this.t); + while (i < m) { + c += this.data[i] + a.data[i]; + r.data[i++] = c & this.DM; + c >>= this.DB; + } + if (a.t < this.t) { + c += a.s; + while (i < this.t) { + c += this.data[i]; + r.data[i++] = c & this.DM; + c >>= this.DB; + } + c += this.s; + } else { + c += this.s; + while (i < a.t) { + c += a.data[i]; + r.data[i++] = c & this.DM; + c >>= this.DB; + } + c += a.s; + } + r.s = c < 0 ? -1 : 0; + if (c > 0) + r.data[i++] = c; + else if (c < -1) + r.data[i++] = this.DV + c; + r.t = i; + r.clamp(); + } + function bnAdd(a) { + var r = nbi(); + this.addTo(a, r); + return r; + } + function bnSubtract(a) { + var r = nbi(); + this.subTo(a, r); + return r; + } + function bnMultiply(a) { + var r = nbi(); + this.multiplyTo(a, r); + return r; + } + function bnDivide(a) { + var r = nbi(); + this.divRemTo(a, r, null); + return r; + } + function bnRemainder(a) { + var r = nbi(); + this.divRemTo(a, null, r); + return r; + } + function bnDivideAndRemainder(a) { + var q = nbi(), r = nbi(); + this.divRemTo(a, q, r); + return new Array(q, r); + } + function bnpDMultiply(n) { + this.data[this.t] = this.am(0, n - 1, this, 0, 0, this.t); + ++this.t; + this.clamp(); + } + function bnpDAddOffset(n, w) { + if (n == 0) + return; + while (this.t <= w) + this.data[this.t++] = 0; + this.data[w] += n; + while (this.data[w] >= this.DV) { + this.data[w] -= this.DV; + if (++w >= this.t) + this.data[this.t++] = 0; + ++this.data[w]; + } + } + function NullExp() { + } + function nNop(x) { + return x; + } + function nMulTo(x, y, r) { + x.multiplyTo(y, r); + } + function nSqrTo(x, r) { + x.squareTo(r); + } + NullExp.prototype.convert = nNop; + NullExp.prototype.revert = nNop; + NullExp.prototype.mulTo = nMulTo; + NullExp.prototype.sqrTo = nSqrTo; + function bnPow(e) { + return this.exp(e, new NullExp()); + } + function bnpMultiplyLowerTo(a, n, r) { + var i = Math.min(this.t + a.t, n); + r.s = 0; + r.t = i; + while (i > 0) + r.data[--i] = 0; + var j; + for (j = r.t - this.t; i < j; ++i) + r.data[i + this.t] = this.am(0, a.data[i], r, i, 0, this.t); + for (j = Math.min(a.t, n); i < j; ++i) + this.am(0, a.data[i], r, i, 0, n - i); + r.clamp(); + } + function bnpMultiplyUpperTo(a, n, r) { + --n; + var i = r.t = this.t + a.t - n; + r.s = 0; + while (--i >= 0) + r.data[i] = 0; + for (i = Math.max(n - this.t, 0); i < a.t; ++i) + r.data[this.t + i - n] = this.am(n - i, a.data[i], r, 0, 0, this.t + i - n); + r.clamp(); + r.drShiftTo(1, r); + } + function Barrett(m) { + this.r2 = nbi(); + this.q3 = nbi(); + BigInteger.ONE.dlShiftTo(2 * m.t, this.r2); + this.mu = this.r2.divide(m); + this.m = m; + } + function barrettConvert(x) { + if (x.s < 0 || x.t > 2 * this.m.t) + return x.mod(this.m); + else if (x.compareTo(this.m) < 0) + return x; + else { + var r = nbi(); + x.copyTo(r); + this.reduce(r); + return r; + } + } + function barrettRevert(x) { + return x; + } + function barrettReduce(x) { + x.drShiftTo(this.m.t - 1, this.r2); + if (x.t > this.m.t + 1) { + x.t = this.m.t + 1; + x.clamp(); + } + this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3); + this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2); + while (x.compareTo(this.r2) < 0) + x.dAddOffset(1, this.m.t + 1); + x.subTo(this.r2, x); + while (x.compareTo(this.m) >= 0) + x.subTo(this.m, x); + } + function barrettSqrTo(x, r) { + x.squareTo(r); + this.reduce(r); + } + function barrettMulTo(x, y, r) { + x.multiplyTo(y, r); + this.reduce(r); + } + Barrett.prototype.convert = barrettConvert; + Barrett.prototype.revert = barrettRevert; + Barrett.prototype.reduce = barrettReduce; + Barrett.prototype.mulTo = barrettMulTo; + Barrett.prototype.sqrTo = barrettSqrTo; + function bnModPow(e, m) { + var i = e.bitLength(), k, r = nbv(1), z; + if (i <= 0) + return r; + else if (i < 18) + k = 1; + else if (i < 48) + k = 3; + else if (i < 144) + k = 4; + else if (i < 768) + k = 5; + else + k = 6; + if (i < 8) + z = new Classic(m); + else if (m.isEven()) + z = new Barrett(m); + else + z = new Montgomery(m); + var g = new Array(), n = 3, k1 = k - 1, km = (1 << k) - 1; + g[1] = z.convert(this); + if (k > 1) { + var g2 = nbi(); + z.sqrTo(g[1], g2); + while (n <= km) { + g[n] = nbi(); + z.mulTo(g2, g[n - 2], g[n]); + n += 2; + } + } + var j = e.t - 1, w, is1 = true, r2 = nbi(), t; + i = nbits(e.data[j]) - 1; + while (j >= 0) { + if (i >= k1) + w = e.data[j] >> i - k1 & km; + else { + w = (e.data[j] & (1 << i + 1) - 1) << k1 - i; + if (j > 0) + w |= e.data[j - 1] >> this.DB + i - k1; + } + n = k; + while ((w & 1) == 0) { + w >>= 1; + --n; + } + if ((i -= n) < 0) { + i += this.DB; + --j; + } + if (is1) { + g[w].copyTo(r); + is1 = false; + } else { + while (n > 1) { + z.sqrTo(r, r2); + z.sqrTo(r2, r); + n -= 2; + } + if (n > 0) + z.sqrTo(r, r2); + else { + t = r; + r = r2; + r2 = t; + } + z.mulTo(r2, g[w], r); + } + while (j >= 0 && (e.data[j] & 1 << i) == 0) { + z.sqrTo(r, r2); + t = r; + r = r2; + r2 = t; + if (--i < 0) { + i = this.DB - 1; + --j; + } + } + } + return z.revert(r); + } + function bnGCD(a) { + var x = this.s < 0 ? this.negate() : this.clone(); + var y = a.s < 0 ? a.negate() : a.clone(); + if (x.compareTo(y) < 0) { + var t = x; + x = y; + y = t; + } + var i = x.getLowestSetBit(), g = y.getLowestSetBit(); + if (g < 0) + return x; + if (i < g) + g = i; + if (g > 0) { + x.rShiftTo(g, x); + y.rShiftTo(g, y); + } + while (x.signum() > 0) { + if ((i = x.getLowestSetBit()) > 0) + x.rShiftTo(i, x); + if ((i = y.getLowestSetBit()) > 0) + y.rShiftTo(i, y); + if (x.compareTo(y) >= 0) { + x.subTo(y, x); + x.rShiftTo(1, x); + } else { + y.subTo(x, y); + y.rShiftTo(1, y); + } + } + if (g > 0) + y.lShiftTo(g, y); + return y; + } + function bnpModInt(n) { + if (n <= 0) + return 0; + var d = this.DV % n, r = this.s < 0 ? n - 1 : 0; + if (this.t > 0) + if (d == 0) + r = this.data[0] % n; + else + for (var i = this.t - 1; i >= 0; --i) + r = (d * r + this.data[i]) % n; + return r; + } + function bnModInverse(m) { + var ac = m.isEven(); + if (this.isEven() && ac || m.signum() == 0) + return BigInteger.ZERO; + var u = m.clone(), v = this.clone(); + var a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1); + while (u.signum() != 0) { + while (u.isEven()) { + u.rShiftTo(1, u); + if (ac) { + if (!a.isEven() || !b.isEven()) { + a.addTo(this, a); + b.subTo(m, b); + } + a.rShiftTo(1, a); + } else if (!b.isEven()) + b.subTo(m, b); + b.rShiftTo(1, b); + } + while (v.isEven()) { + v.rShiftTo(1, v); + if (ac) { + if (!c.isEven() || !d.isEven()) { + c.addTo(this, c); + d.subTo(m, d); + } + c.rShiftTo(1, c); + } else if (!d.isEven()) + d.subTo(m, d); + d.rShiftTo(1, d); + } + if (u.compareTo(v) >= 0) { + u.subTo(v, u); + if (ac) + a.subTo(c, a); + b.subTo(d, b); + } else { + v.subTo(u, v); + if (ac) + c.subTo(a, c); + d.subTo(b, d); + } + } + if (v.compareTo(BigInteger.ONE) != 0) + return BigInteger.ZERO; + if (d.compareTo(m) >= 0) + return d.subtract(m); + if (d.signum() < 0) + d.addTo(m, d); + else + return d; + if (d.signum() < 0) + return d.add(m); + else + return d; + } + var lowprimes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509]; + var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]; + function bnIsProbablePrime(t) { + var i, x = this.abs(); + if (x.t == 1 && x.data[0] <= lowprimes[lowprimes.length - 1]) { + for (i = 0; i < lowprimes.length; ++i) + if (x.data[0] == lowprimes[i]) + return true; + return false; + } + if (x.isEven()) + return false; + i = 1; + while (i < lowprimes.length) { + var m = lowprimes[i], j = i + 1; + while (j < lowprimes.length && m < lplim) + m *= lowprimes[j++]; + m = x.modInt(m); + while (i < j) + if (m % lowprimes[i++] == 0) + return false; + } + return x.millerRabin(t); + } + function bnpMillerRabin(t) { + var n1 = this.subtract(BigInteger.ONE); + var k = n1.getLowestSetBit(); + if (k <= 0) + return false; + var r = n1.shiftRight(k); + var prng = bnGetPrng(); + var a; + for (var i = 0; i < t; ++i) { + do { + a = new BigInteger(this.bitLength(), prng); + } while (a.compareTo(BigInteger.ONE) <= 0 || a.compareTo(n1) >= 0); + var y = a.modPow(r, this); + if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) { + var j = 1; + while (j++ < k && y.compareTo(n1) != 0) { + y = y.modPowInt(2, this); + if (y.compareTo(BigInteger.ONE) == 0) + return false; + } + if (y.compareTo(n1) != 0) + return false; + } + } + return true; + } + function bnGetPrng() { + return { + nextBytes: function(x) { + for (var i = 0; i < x.length; ++i) { + x[i] = Math.floor(Math.random() * 256); + } + } + }; + } + BigInteger.prototype.chunkSize = bnpChunkSize; + BigInteger.prototype.toRadix = bnpToRadix; + BigInteger.prototype.fromRadix = bnpFromRadix; + BigInteger.prototype.fromNumber = bnpFromNumber; + BigInteger.prototype.bitwiseTo = bnpBitwiseTo; + BigInteger.prototype.changeBit = bnpChangeBit; + BigInteger.prototype.addTo = bnpAddTo; + BigInteger.prototype.dMultiply = bnpDMultiply; + BigInteger.prototype.dAddOffset = bnpDAddOffset; + BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo; + BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo; + BigInteger.prototype.modInt = bnpModInt; + BigInteger.prototype.millerRabin = bnpMillerRabin; + BigInteger.prototype.clone = bnClone; + BigInteger.prototype.intValue = bnIntValue; + BigInteger.prototype.byteValue = bnByteValue; + BigInteger.prototype.shortValue = bnShortValue; + BigInteger.prototype.signum = bnSigNum; + BigInteger.prototype.toByteArray = bnToByteArray; + BigInteger.prototype.equals = bnEquals; + BigInteger.prototype.min = bnMin; + BigInteger.prototype.max = bnMax; + BigInteger.prototype.and = bnAnd; + BigInteger.prototype.or = bnOr; + BigInteger.prototype.xor = bnXor; + BigInteger.prototype.andNot = bnAndNot; + BigInteger.prototype.not = bnNot; + BigInteger.prototype.shiftLeft = bnShiftLeft; + BigInteger.prototype.shiftRight = bnShiftRight; + BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit; + BigInteger.prototype.bitCount = bnBitCount; + BigInteger.prototype.testBit = bnTestBit; + BigInteger.prototype.setBit = bnSetBit; + BigInteger.prototype.clearBit = bnClearBit; + BigInteger.prototype.flipBit = bnFlipBit; + BigInteger.prototype.add = bnAdd; + BigInteger.prototype.subtract = bnSubtract; + BigInteger.prototype.multiply = bnMultiply; + BigInteger.prototype.divide = bnDivide; + BigInteger.prototype.remainder = bnRemainder; + BigInteger.prototype.divideAndRemainder = bnDivideAndRemainder; + BigInteger.prototype.modPow = bnModPow; + BigInteger.prototype.modInverse = bnModInverse; + BigInteger.prototype.pow = bnPow; + BigInteger.prototype.gcd = bnGCD; + BigInteger.prototype.isProbablePrime = bnIsProbablePrime; + } +}); + +// node_modules/node-forge/lib/sha1.js +var require_sha1 = __commonJS({ + "node_modules/node-forge/lib/sha1.js"(exports2, module2) { + var forge3 = require_forge(); + require_md(); + require_util(); + var sha1 = module2.exports = forge3.sha1 = forge3.sha1 || {}; + forge3.md.sha1 = forge3.md.algorithms.sha1 = sha1; + sha1.create = function() { + if (!_initialized) { + _init(); + } + var _state = null; + var _input = forge3.util.createBuffer(); + var _w = new Array(80); + var md = { + algorithm: "sha1", + blockLength: 64, + digestLength: 20, + messageLength: 0, + fullMessageLength: null, + messageLengthSize: 8 + }; + md.start = function() { + md.messageLength = 0; + md.fullMessageLength = md.messageLength64 = []; + var int32s = md.messageLengthSize / 4; + for (var i = 0; i < int32s; ++i) { + md.fullMessageLength.push(0); + } + _input = forge3.util.createBuffer(); + _state = { + h0: 1732584193, + h1: 4023233417, + h2: 2562383102, + h3: 271733878, + h4: 3285377520 + }; + return md; + }; + md.start(); + md.update = function(msg, encoding) { + if (encoding === "utf8") { + msg = forge3.util.encodeUtf8(msg); + } + var len = msg.length; + md.messageLength += len; + len = [len / 4294967296 >>> 0, len >>> 0]; + for (var i = md.fullMessageLength.length - 1; i >= 0; --i) { + md.fullMessageLength[i] += len[1]; + len[1] = len[0] + (md.fullMessageLength[i] / 4294967296 >>> 0); + md.fullMessageLength[i] = md.fullMessageLength[i] >>> 0; + len[0] = len[1] / 4294967296 >>> 0; + } + _input.putBytes(msg); + _update(_state, _w, _input); + if (_input.read > 2048 || _input.length() === 0) { + _input.compact(); + } + return md; + }; + md.digest = function() { + var finalBlock = forge3.util.createBuffer(); + finalBlock.putBytes(_input.bytes()); + var remaining = md.fullMessageLength[md.fullMessageLength.length - 1] + md.messageLengthSize; + var overflow = remaining & md.blockLength - 1; + finalBlock.putBytes(_padding.substr(0, md.blockLength - overflow)); + var next, carry; + var bits = md.fullMessageLength[0] * 8; + for (var i = 0; i < md.fullMessageLength.length - 1; ++i) { + next = md.fullMessageLength[i + 1] * 8; + carry = next / 4294967296 >>> 0; + bits += carry; + finalBlock.putInt32(bits >>> 0); + bits = next >>> 0; + } + finalBlock.putInt32(bits); + var s2 = { + h0: _state.h0, + h1: _state.h1, + h2: _state.h2, + h3: _state.h3, + h4: _state.h4 + }; + _update(s2, _w, finalBlock); + var rval = forge3.util.createBuffer(); + rval.putInt32(s2.h0); + rval.putInt32(s2.h1); + rval.putInt32(s2.h2); + rval.putInt32(s2.h3); + rval.putInt32(s2.h4); + return rval; + }; + return md; + }; + var _padding = null; + var _initialized = false; + function _init() { + _padding = String.fromCharCode(128); + _padding += forge3.util.fillString(String.fromCharCode(0), 64); + _initialized = true; + } + function _update(s, w, bytes) { + var t, a, b, c, d, e, f, i; + var len = bytes.length(); + while (len >= 64) { + a = s.h0; + b = s.h1; + c = s.h2; + d = s.h3; + e = s.h4; + for (i = 0; i < 16; ++i) { + t = bytes.getInt32(); + w[i] = t; + f = d ^ b & (c ^ d); + t = (a << 5 | a >>> 27) + f + e + 1518500249 + t; + e = d; + d = c; + c = (b << 30 | b >>> 2) >>> 0; + b = a; + a = t; + } + for (; i < 20; ++i) { + t = w[i - 3] ^ w[i - 8] ^ w[i - 14] ^ w[i - 16]; + t = t << 1 | t >>> 31; + w[i] = t; + f = d ^ b & (c ^ d); + t = (a << 5 | a >>> 27) + f + e + 1518500249 + t; + e = d; + d = c; + c = (b << 30 | b >>> 2) >>> 0; + b = a; + a = t; + } + for (; i < 32; ++i) { + t = w[i - 3] ^ w[i - 8] ^ w[i - 14] ^ w[i - 16]; + t = t << 1 | t >>> 31; + w[i] = t; + f = b ^ c ^ d; + t = (a << 5 | a >>> 27) + f + e + 1859775393 + t; + e = d; + d = c; + c = (b << 30 | b >>> 2) >>> 0; + b = a; + a = t; + } + for (; i < 40; ++i) { + t = w[i - 6] ^ w[i - 16] ^ w[i - 28] ^ w[i - 32]; + t = t << 2 | t >>> 30; + w[i] = t; + f = b ^ c ^ d; + t = (a << 5 | a >>> 27) + f + e + 1859775393 + t; + e = d; + d = c; + c = (b << 30 | b >>> 2) >>> 0; + b = a; + a = t; + } + for (; i < 60; ++i) { + t = w[i - 6] ^ w[i - 16] ^ w[i - 28] ^ w[i - 32]; + t = t << 2 | t >>> 30; + w[i] = t; + f = b & c | d & (b ^ c); + t = (a << 5 | a >>> 27) + f + e + 2400959708 + t; + e = d; + d = c; + c = (b << 30 | b >>> 2) >>> 0; + b = a; + a = t; + } + for (; i < 80; ++i) { + t = w[i - 6] ^ w[i - 16] ^ w[i - 28] ^ w[i - 32]; + t = t << 2 | t >>> 30; + w[i] = t; + f = b ^ c ^ d; + t = (a << 5 | a >>> 27) + f + e + 3395469782 + t; + e = d; + d = c; + c = (b << 30 | b >>> 2) >>> 0; + b = a; + a = t; + } + s.h0 = s.h0 + a | 0; + s.h1 = s.h1 + b | 0; + s.h2 = s.h2 + c | 0; + s.h3 = s.h3 + d | 0; + s.h4 = s.h4 + e | 0; + len -= 64; + } + } + } +}); + +// node_modules/node-forge/lib/pkcs1.js +var require_pkcs1 = __commonJS({ + "node_modules/node-forge/lib/pkcs1.js"(exports2, module2) { + var forge3 = require_forge(); + require_util(); + require_random(); + require_sha1(); + var pkcs1 = module2.exports = forge3.pkcs1 = forge3.pkcs1 || {}; + pkcs1.encode_rsa_oaep = function(key, message2, options) { + var label; + var seed; + var md; + var mgf1Md; + if (typeof options === "string") { + label = options; + seed = arguments[3] || void 0; + md = arguments[4] || void 0; + } else if (options) { + label = options.label || void 0; + seed = options.seed || void 0; + md = options.md || void 0; + if (options.mgf1 && options.mgf1.md) { + mgf1Md = options.mgf1.md; + } + } + if (!md) { + md = forge3.md.sha1.create(); + } else { + md.start(); + } + if (!mgf1Md) { + mgf1Md = md; + } + var keyLength = Math.ceil(key.n.bitLength() / 8); + var maxLength = keyLength - 2 * md.digestLength - 2; + if (message2.length > maxLength) { + var error = new Error("RSAES-OAEP input message length is too long."); + error.length = message2.length; + error.maxLength = maxLength; + throw error; + } + if (!label) { + label = ""; + } + md.update(label, "raw"); + var lHash = md.digest(); + var PS = ""; + var PS_length = maxLength - message2.length; + for (var i = 0; i < PS_length; i++) { + PS += "\0"; + } + var DB = lHash.getBytes() + PS + "" + message2; + if (!seed) { + seed = forge3.random.getBytes(md.digestLength); + } else if (seed.length !== md.digestLength) { + var error = new Error("Invalid RSAES-OAEP seed. The seed length must match the digest length."); + error.seedLength = seed.length; + error.digestLength = md.digestLength; + throw error; + } + var dbMask = rsa_mgf1(seed, keyLength - md.digestLength - 1, mgf1Md); + var maskedDB = forge3.util.xorBytes(DB, dbMask, DB.length); + var seedMask = rsa_mgf1(maskedDB, md.digestLength, mgf1Md); + var maskedSeed = forge3.util.xorBytes(seed, seedMask, seed.length); + return "\0" + maskedSeed + maskedDB; + }; + pkcs1.decode_rsa_oaep = function(key, em, options) { + var label; + var md; + var mgf1Md; + if (typeof options === "string") { + label = options; + md = arguments[3] || void 0; + } else if (options) { + label = options.label || void 0; + md = options.md || void 0; + if (options.mgf1 && options.mgf1.md) { + mgf1Md = options.mgf1.md; + } + } + var keyLength = Math.ceil(key.n.bitLength() / 8); + if (em.length !== keyLength) { + var error = new Error("RSAES-OAEP encoded message length is invalid."); + error.length = em.length; + error.expectedLength = keyLength; + throw error; + } + if (md === void 0) { + md = forge3.md.sha1.create(); + } else { + md.start(); + } + if (!mgf1Md) { + mgf1Md = md; + } + if (keyLength < 2 * md.digestLength + 2) { + throw new Error("RSAES-OAEP key is too short for the hash function."); + } + if (!label) { + label = ""; + } + md.update(label, "raw"); + var lHash = md.digest().getBytes(); + var y = em.charAt(0); + var maskedSeed = em.substring(1, md.digestLength + 1); + var maskedDB = em.substring(1 + md.digestLength); + var seedMask = rsa_mgf1(maskedDB, md.digestLength, mgf1Md); + var seed = forge3.util.xorBytes(maskedSeed, seedMask, maskedSeed.length); + var dbMask = rsa_mgf1(seed, keyLength - md.digestLength - 1, mgf1Md); + var db = forge3.util.xorBytes(maskedDB, dbMask, maskedDB.length); + var lHashPrime = db.substring(0, md.digestLength); + var error = y !== "\0"; + for (var i = 0; i < md.digestLength; ++i) { + error |= lHash.charAt(i) !== lHashPrime.charAt(i); + } + var in_ps = 1; + var index = md.digestLength; + for (var j = md.digestLength; j < db.length; j++) { + var code = db.charCodeAt(j); + var is_0 = code & 1 ^ 1; + var error_mask = in_ps ? 65534 : 0; + error |= code & error_mask; + in_ps = in_ps & is_0; + index += in_ps; + } + if (error || db.charCodeAt(index) !== 1) { + throw new Error("Invalid RSAES-OAEP padding."); + } + return db.substring(index + 1); + }; + function rsa_mgf1(seed, maskLength, hash) { + if (!hash) { + hash = forge3.md.sha1.create(); + } + var t = ""; + var count = Math.ceil(maskLength / hash.digestLength); + for (var i = 0; i < count; ++i) { + var c = String.fromCharCode(i >> 24 & 255, i >> 16 & 255, i >> 8 & 255, i & 255); + hash.start(); + hash.update(seed + c); + t += hash.digest().getBytes(); + } + return t.substring(0, maskLength); + } + } +}); + +// node_modules/node-forge/lib/prime.js +var require_prime = __commonJS({ + "node_modules/node-forge/lib/prime.js"(exports2, module2) { + var forge3 = require_forge(); + require_util(); + require_jsbn(); + require_random(); + (function() { + if (forge3.prime) { + module2.exports = forge3.prime; + return; + } + var prime = module2.exports = forge3.prime = forge3.prime || {}; + var BigInteger = forge3.jsbn.BigInteger; + var GCD_30_DELTA = [6, 4, 2, 4, 2, 4, 6, 2]; + var THIRTY = new BigInteger(null); + THIRTY.fromInt(30); + var op_or = function(x, y) { + return x | y; + }; + prime.generateProbablePrime = function(bits, options, callback) { + if (typeof options === "function") { + callback = options; + options = {}; + } + options = options || {}; + var algorithm = options.algorithm || "PRIMEINC"; + if (typeof algorithm === "string") { + algorithm = { name: algorithm }; + } + algorithm.options = algorithm.options || {}; + var prng = options.prng || forge3.random; + var rng = { + nextBytes: function(x) { + var b = prng.getBytesSync(x.length); + for (var i = 0; i < x.length; ++i) { + x[i] = b.charCodeAt(i); + } + } + }; + if (algorithm.name === "PRIMEINC") { + return primeincFindPrime(bits, rng, algorithm.options, callback); + } + throw new Error("Invalid prime generation algorithm: " + algorithm.name); + }; + function primeincFindPrime(bits, rng, options, callback) { + if ("workers" in options) { + return primeincFindPrimeWithWorkers(bits, rng, options, callback); + } + return primeincFindPrimeWithoutWorkers(bits, rng, options, callback); + } + function primeincFindPrimeWithoutWorkers(bits, rng, options, callback) { + var num = generateRandom(bits, rng); + var deltaIdx = 0; + var mrTests = getMillerRabinTests(num.bitLength()); + if ("millerRabinTests" in options) { + mrTests = options.millerRabinTests; + } + var maxBlockTime = 10; + if ("maxBlockTime" in options) { + maxBlockTime = options.maxBlockTime; + } + _primeinc(num, bits, rng, deltaIdx, mrTests, maxBlockTime, callback); + } + function _primeinc(num, bits, rng, deltaIdx, mrTests, maxBlockTime, callback) { + var start = +new Date(); + do { + if (num.bitLength() > bits) { + num = generateRandom(bits, rng); + } + if (num.isProbablePrime(mrTests)) { + return callback(null, num); + } + num.dAddOffset(GCD_30_DELTA[deltaIdx++ % 8], 0); + } while (maxBlockTime < 0 || +new Date() - start < maxBlockTime); + forge3.util.setImmediate(function() { + _primeinc(num, bits, rng, deltaIdx, mrTests, maxBlockTime, callback); + }); + } + function primeincFindPrimeWithWorkers(bits, rng, options, callback) { + if (typeof Worker === "undefined") { + return primeincFindPrimeWithoutWorkers(bits, rng, options, callback); + } + var num = generateRandom(bits, rng); + var numWorkers = options.workers; + var workLoad = options.workLoad || 100; + var range = workLoad * 30 / 8; + var workerScript = options.workerScript || "forge/prime.worker.js"; + if (numWorkers === -1) { + return forge3.util.estimateCores(function(err, cores) { + if (err) { + cores = 2; + } + numWorkers = cores - 1; + generate(); + }); + } + generate(); + function generate() { + numWorkers = Math.max(1, numWorkers); + var workers = []; + for (var i = 0; i < numWorkers; ++i) { + workers[i] = new Worker(workerScript); + } + var running = numWorkers; + for (var i = 0; i < numWorkers; ++i) { + workers[i].addEventListener("message", workerMessage); + } + var found = false; + function workerMessage(e) { + if (found) { + return; + } + --running; + var data = e.data; + if (data.found) { + for (var i2 = 0; i2 < workers.length; ++i2) { + workers[i2].terminate(); + } + found = true; + return callback(null, new BigInteger(data.prime, 16)); + } + if (num.bitLength() > bits) { + num = generateRandom(bits, rng); + } + var hex = num.toString(16); + e.target.postMessage({ + hex, + workLoad + }); + num.dAddOffset(range, 0); + } + } + } + function generateRandom(bits, rng) { + var num = new BigInteger(bits, rng); + var bits1 = bits - 1; + if (!num.testBit(bits1)) { + num.bitwiseTo(BigInteger.ONE.shiftLeft(bits1), op_or, num); + } + num.dAddOffset(31 - num.mod(THIRTY).byteValue(), 0); + return num; + } + function getMillerRabinTests(bits) { + if (bits <= 100) + return 27; + if (bits <= 150) + return 18; + if (bits <= 200) + return 15; + if (bits <= 250) + return 12; + if (bits <= 300) + return 9; + if (bits <= 350) + return 8; + if (bits <= 400) + return 7; + if (bits <= 500) + return 6; + if (bits <= 600) + return 5; + if (bits <= 800) + return 4; + if (bits <= 1250) + return 3; + return 2; + } + })(); + } +}); + +// node_modules/node-forge/lib/rsa.js +var require_rsa = __commonJS({ + "node_modules/node-forge/lib/rsa.js"(exports2, module2) { + var forge3 = require_forge(); + require_asn1(); + require_jsbn(); + require_oids(); + require_pkcs1(); + require_prime(); + require_random(); + require_util(); + if (typeof BigInteger === "undefined") { + BigInteger = forge3.jsbn.BigInteger; + } + var BigInteger; + var _crypto = forge3.util.isNodejs ? require("crypto") : null; + var asn1 = forge3.asn1; + var util = forge3.util; + forge3.pki = forge3.pki || {}; + module2.exports = forge3.pki.rsa = forge3.rsa = forge3.rsa || {}; + var pki2 = forge3.pki; + var GCD_30_DELTA = [6, 4, 2, 4, 2, 4, 6, 2]; + var privateKeyValidator = { + name: "PrivateKeyInfo", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "PrivateKeyInfo.version", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.INTEGER, + constructed: false, + capture: "privateKeyVersion" + }, { + name: "PrivateKeyInfo.privateKeyAlgorithm", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "AlgorithmIdentifier.algorithm", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OID, + constructed: false, + capture: "privateKeyOid" + }] + }, { + name: "PrivateKeyInfo", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OCTETSTRING, + constructed: false, + capture: "privateKey" + }] + }; + var rsaPrivateKeyValidator = { + name: "RSAPrivateKey", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "RSAPrivateKey.version", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.INTEGER, + constructed: false, + capture: "privateKeyVersion" + }, { + name: "RSAPrivateKey.modulus", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.INTEGER, + constructed: false, + capture: "privateKeyModulus" + }, { + name: "RSAPrivateKey.publicExponent", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.INTEGER, + constructed: false, + capture: "privateKeyPublicExponent" + }, { + name: "RSAPrivateKey.privateExponent", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.INTEGER, + constructed: false, + capture: "privateKeyPrivateExponent" + }, { + name: "RSAPrivateKey.prime1", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.INTEGER, + constructed: false, + capture: "privateKeyPrime1" + }, { + name: "RSAPrivateKey.prime2", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.INTEGER, + constructed: false, + capture: "privateKeyPrime2" + }, { + name: "RSAPrivateKey.exponent1", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.INTEGER, + constructed: false, + capture: "privateKeyExponent1" + }, { + name: "RSAPrivateKey.exponent2", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.INTEGER, + constructed: false, + capture: "privateKeyExponent2" + }, { + name: "RSAPrivateKey.coefficient", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.INTEGER, + constructed: false, + capture: "privateKeyCoefficient" + }] + }; + var rsaPublicKeyValidator = { + name: "RSAPublicKey", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "RSAPublicKey.modulus", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.INTEGER, + constructed: false, + capture: "publicKeyModulus" + }, { + name: "RSAPublicKey.exponent", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.INTEGER, + constructed: false, + capture: "publicKeyExponent" + }] + }; + var publicKeyValidator = forge3.pki.rsa.publicKeyValidator = { + name: "SubjectPublicKeyInfo", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + captureAsn1: "subjectPublicKeyInfo", + value: [{ + name: "SubjectPublicKeyInfo.AlgorithmIdentifier", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "AlgorithmIdentifier.algorithm", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OID, + constructed: false, + capture: "publicKeyOid" + }] + }, { + name: "SubjectPublicKeyInfo.subjectPublicKey", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.BITSTRING, + constructed: false, + value: [{ + name: "SubjectPublicKeyInfo.subjectPublicKey.RSAPublicKey", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + optional: true, + captureAsn1: "rsaPublicKey" + }] + }] + }; + var digestInfoValidator = { + name: "DigestInfo", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "DigestInfo.DigestAlgorithm", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "DigestInfo.DigestAlgorithm.algorithmIdentifier", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OID, + constructed: false, + capture: "algorithmIdentifier" + }, { + name: "DigestInfo.DigestAlgorithm.parameters", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.NULL, + capture: "parameters", + optional: true, + constructed: false + }] + }, { + name: "DigestInfo.digest", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OCTETSTRING, + constructed: false, + capture: "digest" + }] + }; + var emsaPkcs1v15encode = function(md) { + var oid; + if (md.algorithm in pki2.oids) { + oid = pki2.oids[md.algorithm]; + } else { + var error = new Error("Unknown message digest algorithm."); + error.algorithm = md.algorithm; + throw error; + } + var oidBytes = asn1.oidToDer(oid).getBytes(); + var digestInfo = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []); + var digestAlgorithm = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []); + digestAlgorithm.value.push(asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, oidBytes)); + digestAlgorithm.value.push(asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, "")); + var digest = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, md.digest().getBytes()); + digestInfo.value.push(digestAlgorithm); + digestInfo.value.push(digest); + return asn1.toDer(digestInfo).getBytes(); + }; + var _modPow = function(x, key, pub) { + if (pub) { + return x.modPow(key.e, key.n); + } + if (!key.p || !key.q) { + return x.modPow(key.d, key.n); + } + if (!key.dP) { + key.dP = key.d.mod(key.p.subtract(BigInteger.ONE)); + } + if (!key.dQ) { + key.dQ = key.d.mod(key.q.subtract(BigInteger.ONE)); + } + if (!key.qInv) { + key.qInv = key.q.modInverse(key.p); + } + var r; + do { + r = new BigInteger(forge3.util.bytesToHex(forge3.random.getBytes(key.n.bitLength() / 8)), 16); + } while (r.compareTo(key.n) >= 0 || !r.gcd(key.n).equals(BigInteger.ONE)); + x = x.multiply(r.modPow(key.e, key.n)).mod(key.n); + var xp = x.mod(key.p).modPow(key.dP, key.p); + var xq = x.mod(key.q).modPow(key.dQ, key.q); + while (xp.compareTo(xq) < 0) { + xp = xp.add(key.p); + } + var y = xp.subtract(xq).multiply(key.qInv).mod(key.p).multiply(key.q).add(xq); + y = y.multiply(r.modInverse(key.n)).mod(key.n); + return y; + }; + pki2.rsa.encrypt = function(m, key, bt) { + var pub = bt; + var eb; + var k = Math.ceil(key.n.bitLength() / 8); + if (bt !== false && bt !== true) { + pub = bt === 2; + eb = _encodePkcs1_v1_5(m, key, bt); + } else { + eb = forge3.util.createBuffer(); + eb.putBytes(m); + } + var x = new BigInteger(eb.toHex(), 16); + var y = _modPow(x, key, pub); + var yhex = y.toString(16); + var ed = forge3.util.createBuffer(); + var zeros = k - Math.ceil(yhex.length / 2); + while (zeros > 0) { + ed.putByte(0); + --zeros; + } + ed.putBytes(forge3.util.hexToBytes(yhex)); + return ed.getBytes(); + }; + pki2.rsa.decrypt = function(ed, key, pub, ml) { + var k = Math.ceil(key.n.bitLength() / 8); + if (ed.length !== k) { + var error = new Error("Encrypted message length is invalid."); + error.length = ed.length; + error.expected = k; + throw error; + } + var y = new BigInteger(forge3.util.createBuffer(ed).toHex(), 16); + if (y.compareTo(key.n) >= 0) { + throw new Error("Encrypted message is invalid."); + } + var x = _modPow(y, key, pub); + var xhex = x.toString(16); + var eb = forge3.util.createBuffer(); + var zeros = k - Math.ceil(xhex.length / 2); + while (zeros > 0) { + eb.putByte(0); + --zeros; + } + eb.putBytes(forge3.util.hexToBytes(xhex)); + if (ml !== false) { + return _decodePkcs1_v1_5(eb.getBytes(), key, pub); + } + return eb.getBytes(); + }; + pki2.rsa.createKeyPairGenerationState = function(bits, e, options) { + if (typeof bits === "string") { + bits = parseInt(bits, 10); + } + bits = bits || 2048; + options = options || {}; + var prng = options.prng || forge3.random; + var rng = { + nextBytes: function(x) { + var b = prng.getBytesSync(x.length); + for (var i = 0; i < x.length; ++i) { + x[i] = b.charCodeAt(i); + } + } + }; + var algorithm = options.algorithm || "PRIMEINC"; + var rval; + if (algorithm === "PRIMEINC") { + rval = { + algorithm, + state: 0, + bits, + rng, + eInt: e || 65537, + e: new BigInteger(null), + p: null, + q: null, + qBits: bits >> 1, + pBits: bits - (bits >> 1), + pqState: 0, + num: null, + keys: null + }; + rval.e.fromInt(rval.eInt); + } else { + throw new Error("Invalid key generation algorithm: " + algorithm); + } + return rval; + }; + pki2.rsa.stepKeyPairGenerationState = function(state, n) { + if (!("algorithm" in state)) { + state.algorithm = "PRIMEINC"; + } + var THIRTY = new BigInteger(null); + THIRTY.fromInt(30); + var deltaIdx = 0; + var op_or = function(x, y) { + return x | y; + }; + var t1 = +new Date(); + var t2; + var total = 0; + while (state.keys === null && (n <= 0 || total < n)) { + if (state.state === 0) { + var bits = state.p === null ? state.pBits : state.qBits; + var bits1 = bits - 1; + if (state.pqState === 0) { + state.num = new BigInteger(bits, state.rng); + if (!state.num.testBit(bits1)) { + state.num.bitwiseTo(BigInteger.ONE.shiftLeft(bits1), op_or, state.num); + } + state.num.dAddOffset(31 - state.num.mod(THIRTY).byteValue(), 0); + deltaIdx = 0; + ++state.pqState; + } else if (state.pqState === 1) { + if (state.num.bitLength() > bits) { + state.pqState = 0; + } else if (state.num.isProbablePrime(_getMillerRabinTests(state.num.bitLength()))) { + ++state.pqState; + } else { + state.num.dAddOffset(GCD_30_DELTA[deltaIdx++ % 8], 0); + } + } else if (state.pqState === 2) { + state.pqState = state.num.subtract(BigInteger.ONE).gcd(state.e).compareTo(BigInteger.ONE) === 0 ? 3 : 0; + } else if (state.pqState === 3) { + state.pqState = 0; + if (state.p === null) { + state.p = state.num; + } else { + state.q = state.num; + } + if (state.p !== null && state.q !== null) { + ++state.state; + } + state.num = null; + } + } else if (state.state === 1) { + if (state.p.compareTo(state.q) < 0) { + state.num = state.p; + state.p = state.q; + state.q = state.num; + } + ++state.state; + } else if (state.state === 2) { + state.p1 = state.p.subtract(BigInteger.ONE); + state.q1 = state.q.subtract(BigInteger.ONE); + state.phi = state.p1.multiply(state.q1); + ++state.state; + } else if (state.state === 3) { + if (state.phi.gcd(state.e).compareTo(BigInteger.ONE) === 0) { + ++state.state; + } else { + state.p = null; + state.q = null; + state.state = 0; + } + } else if (state.state === 4) { + state.n = state.p.multiply(state.q); + if (state.n.bitLength() === state.bits) { + ++state.state; + } else { + state.q = null; + state.state = 0; + } + } else if (state.state === 5) { + var d = state.e.modInverse(state.phi); + state.keys = { + privateKey: pki2.rsa.setPrivateKey(state.n, state.e, d, state.p, state.q, d.mod(state.p1), d.mod(state.q1), state.q.modInverse(state.p)), + publicKey: pki2.rsa.setPublicKey(state.n, state.e) + }; + } + t2 = +new Date(); + total += t2 - t1; + t1 = t2; + } + return state.keys !== null; + }; + pki2.rsa.generateKeyPair = function(bits, e, options, callback) { + if (arguments.length === 1) { + if (typeof bits === "object") { + options = bits; + bits = void 0; + } else if (typeof bits === "function") { + callback = bits; + bits = void 0; + } + } else if (arguments.length === 2) { + if (typeof bits === "number") { + if (typeof e === "function") { + callback = e; + e = void 0; + } else if (typeof e !== "number") { + options = e; + e = void 0; + } + } else { + options = bits; + callback = e; + bits = void 0; + e = void 0; + } + } else if (arguments.length === 3) { + if (typeof e === "number") { + if (typeof options === "function") { + callback = options; + options = void 0; + } + } else { + callback = options; + options = e; + e = void 0; + } + } + options = options || {}; + if (bits === void 0) { + bits = options.bits || 2048; + } + if (e === void 0) { + e = options.e || 65537; + } + if (!forge3.options.usePureJavaScript && !options.prng && bits >= 256 && bits <= 16384 && (e === 65537 || e === 3)) { + if (callback) { + if (_detectNodeCrypto("generateKeyPair")) { + return _crypto.generateKeyPair("rsa", { + modulusLength: bits, + publicExponent: e, + publicKeyEncoding: { + type: "spki", + format: "pem" + }, + privateKeyEncoding: { + type: "pkcs8", + format: "pem" + } + }, function(err, pub, priv) { + if (err) { + return callback(err); + } + callback(null, { + privateKey: pki2.privateKeyFromPem(priv), + publicKey: pki2.publicKeyFromPem(pub) + }); + }); + } + if (_detectSubtleCrypto("generateKey") && _detectSubtleCrypto("exportKey")) { + return util.globalScope.crypto.subtle.generateKey({ + name: "RSASSA-PKCS1-v1_5", + modulusLength: bits, + publicExponent: _intToUint8Array(e), + hash: { name: "SHA-256" } + }, true, ["sign", "verify"]).then(function(pair) { + return util.globalScope.crypto.subtle.exportKey("pkcs8", pair.privateKey); + }).then(void 0, function(err) { + callback(err); + }).then(function(pkcs8) { + if (pkcs8) { + var privateKey = pki2.privateKeyFromAsn1(asn1.fromDer(forge3.util.createBuffer(pkcs8))); + callback(null, { + privateKey, + publicKey: pki2.setRsaPublicKey(privateKey.n, privateKey.e) + }); + } + }); + } + if (_detectSubtleMsCrypto("generateKey") && _detectSubtleMsCrypto("exportKey")) { + var genOp = util.globalScope.msCrypto.subtle.generateKey({ + name: "RSASSA-PKCS1-v1_5", + modulusLength: bits, + publicExponent: _intToUint8Array(e), + hash: { name: "SHA-256" } + }, true, ["sign", "verify"]); + genOp.oncomplete = function(e2) { + var pair = e2.target.result; + var exportOp = util.globalScope.msCrypto.subtle.exportKey("pkcs8", pair.privateKey); + exportOp.oncomplete = function(e3) { + var pkcs8 = e3.target.result; + var privateKey = pki2.privateKeyFromAsn1(asn1.fromDer(forge3.util.createBuffer(pkcs8))); + callback(null, { + privateKey, + publicKey: pki2.setRsaPublicKey(privateKey.n, privateKey.e) + }); + }; + exportOp.onerror = function(err) { + callback(err); + }; + }; + genOp.onerror = function(err) { + callback(err); + }; + return; + } + } else { + if (_detectNodeCrypto("generateKeyPairSync")) { + var keypair = _crypto.generateKeyPairSync("rsa", { + modulusLength: bits, + publicExponent: e, + publicKeyEncoding: { + type: "spki", + format: "pem" + }, + privateKeyEncoding: { + type: "pkcs8", + format: "pem" + } + }); + return { + privateKey: pki2.privateKeyFromPem(keypair.privateKey), + publicKey: pki2.publicKeyFromPem(keypair.publicKey) + }; + } + } + } + var state = pki2.rsa.createKeyPairGenerationState(bits, e, options); + if (!callback) { + pki2.rsa.stepKeyPairGenerationState(state, 0); + return state.keys; + } + _generateKeyPair(state, options, callback); + }; + pki2.setRsaPublicKey = pki2.rsa.setPublicKey = function(n, e) { + var key = { + n, + e + }; + key.encrypt = function(data, scheme, schemeOptions) { + if (typeof scheme === "string") { + scheme = scheme.toUpperCase(); + } else if (scheme === void 0) { + scheme = "RSAES-PKCS1-V1_5"; + } + if (scheme === "RSAES-PKCS1-V1_5") { + scheme = { + encode: function(m, key2, pub) { + return _encodePkcs1_v1_5(m, key2, 2).getBytes(); + } + }; + } else if (scheme === "RSA-OAEP" || scheme === "RSAES-OAEP") { + scheme = { + encode: function(m, key2) { + return forge3.pkcs1.encode_rsa_oaep(key2, m, schemeOptions); + } + }; + } else if (["RAW", "NONE", "NULL", null].indexOf(scheme) !== -1) { + scheme = { encode: function(e3) { + return e3; + } }; + } else if (typeof scheme === "string") { + throw new Error('Unsupported encryption scheme: "' + scheme + '".'); + } + var e2 = scheme.encode(data, key, true); + return pki2.rsa.encrypt(e2, key, true); + }; + key.verify = function(digest, signature, scheme, options) { + if (typeof scheme === "string") { + scheme = scheme.toUpperCase(); + } else if (scheme === void 0) { + scheme = "RSASSA-PKCS1-V1_5"; + } + if (options === void 0) { + options = { + _parseAllDigestBytes: true + }; + } + if (!("_parseAllDigestBytes" in options)) { + options._parseAllDigestBytes = true; + } + if (scheme === "RSASSA-PKCS1-V1_5") { + scheme = { + verify: function(digest2, d2) { + d2 = _decodePkcs1_v1_5(d2, key, true); + var obj = asn1.fromDer(d2, { + parseAllBytes: options._parseAllDigestBytes + }); + var capture = {}; + var errors = []; + if (!asn1.validate(obj, digestInfoValidator, capture, errors)) { + var error = new Error("ASN.1 object does not contain a valid RSASSA-PKCS1-v1_5 DigestInfo value."); + error.errors = errors; + throw error; + } + var oid = asn1.derToOid(capture.algorithmIdentifier); + if (!(oid === forge3.oids.md2 || oid === forge3.oids.md5 || oid === forge3.oids.sha1 || oid === forge3.oids.sha224 || oid === forge3.oids.sha256 || oid === forge3.oids.sha384 || oid === forge3.oids.sha512 || oid === forge3.oids["sha512-224"] || oid === forge3.oids["sha512-256"])) { + var error = new Error("Unknown RSASSA-PKCS1-v1_5 DigestAlgorithm identifier."); + error.oid = oid; + throw error; + } + if (oid === forge3.oids.md2 || oid === forge3.oids.md5) { + if (!("parameters" in capture)) { + throw new Error("ASN.1 object does not contain a valid RSASSA-PKCS1-v1_5 DigestInfo value. Missing algorithm identifer NULL parameters."); + } + } + return digest2 === capture.digest; + } + }; + } else if (scheme === "NONE" || scheme === "NULL" || scheme === null) { + scheme = { + verify: function(digest2, d2) { + d2 = _decodePkcs1_v1_5(d2, key, true); + return digest2 === d2; + } + }; + } + var d = pki2.rsa.decrypt(signature, key, true, false); + return scheme.verify(digest, d, key.n.bitLength()); + }; + return key; + }; + pki2.setRsaPrivateKey = pki2.rsa.setPrivateKey = function(n, e, d, p, q, dP, dQ, qInv) { + var key = { + n, + e, + d, + p, + q, + dP, + dQ, + qInv + }; + key.decrypt = function(data, scheme, schemeOptions) { + if (typeof scheme === "string") { + scheme = scheme.toUpperCase(); + } else if (scheme === void 0) { + scheme = "RSAES-PKCS1-V1_5"; + } + var d2 = pki2.rsa.decrypt(data, key, false, false); + if (scheme === "RSAES-PKCS1-V1_5") { + scheme = { decode: _decodePkcs1_v1_5 }; + } else if (scheme === "RSA-OAEP" || scheme === "RSAES-OAEP") { + scheme = { + decode: function(d3, key2) { + return forge3.pkcs1.decode_rsa_oaep(key2, d3, schemeOptions); + } + }; + } else if (["RAW", "NONE", "NULL", null].indexOf(scheme) !== -1) { + scheme = { decode: function(d3) { + return d3; + } }; + } else { + throw new Error('Unsupported encryption scheme: "' + scheme + '".'); + } + return scheme.decode(d2, key, false); + }; + key.sign = function(md, scheme) { + var bt = false; + if (typeof scheme === "string") { + scheme = scheme.toUpperCase(); + } + if (scheme === void 0 || scheme === "RSASSA-PKCS1-V1_5") { + scheme = { encode: emsaPkcs1v15encode }; + bt = 1; + } else if (scheme === "NONE" || scheme === "NULL" || scheme === null) { + scheme = { encode: function() { + return md; + } }; + bt = 1; + } + var d2 = scheme.encode(md, key.n.bitLength()); + return pki2.rsa.encrypt(d2, key, bt); + }; + return key; + }; + pki2.wrapRsaPrivateKey = function(rsaKey) { + return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, asn1.integerToDer(0).getBytes()), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(pki2.oids.rsaEncryption).getBytes()), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, "") + ]), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, asn1.toDer(rsaKey).getBytes()) + ]); + }; + pki2.privateKeyFromAsn1 = function(obj) { + var capture = {}; + var errors = []; + if (asn1.validate(obj, privateKeyValidator, capture, errors)) { + obj = asn1.fromDer(forge3.util.createBuffer(capture.privateKey)); + } + capture = {}; + errors = []; + if (!asn1.validate(obj, rsaPrivateKeyValidator, capture, errors)) { + var error = new Error("Cannot read private key. ASN.1 object does not contain an RSAPrivateKey."); + error.errors = errors; + throw error; + } + var n, e, d, p, q, dP, dQ, qInv; + n = forge3.util.createBuffer(capture.privateKeyModulus).toHex(); + e = forge3.util.createBuffer(capture.privateKeyPublicExponent).toHex(); + d = forge3.util.createBuffer(capture.privateKeyPrivateExponent).toHex(); + p = forge3.util.createBuffer(capture.privateKeyPrime1).toHex(); + q = forge3.util.createBuffer(capture.privateKeyPrime2).toHex(); + dP = forge3.util.createBuffer(capture.privateKeyExponent1).toHex(); + dQ = forge3.util.createBuffer(capture.privateKeyExponent2).toHex(); + qInv = forge3.util.createBuffer(capture.privateKeyCoefficient).toHex(); + return pki2.setRsaPrivateKey(new BigInteger(n, 16), new BigInteger(e, 16), new BigInteger(d, 16), new BigInteger(p, 16), new BigInteger(q, 16), new BigInteger(dP, 16), new BigInteger(dQ, 16), new BigInteger(qInv, 16)); + }; + pki2.privateKeyToAsn1 = pki2.privateKeyToRSAPrivateKey = function(key) { + return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, asn1.integerToDer(0).getBytes()), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, _bnToBytes(key.n)), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, _bnToBytes(key.e)), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, _bnToBytes(key.d)), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, _bnToBytes(key.p)), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, _bnToBytes(key.q)), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, _bnToBytes(key.dP)), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, _bnToBytes(key.dQ)), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, _bnToBytes(key.qInv)) + ]); + }; + pki2.publicKeyFromAsn1 = function(obj) { + var capture = {}; + var errors = []; + if (asn1.validate(obj, publicKeyValidator, capture, errors)) { + var oid = asn1.derToOid(capture.publicKeyOid); + if (oid !== pki2.oids.rsaEncryption) { + var error = new Error("Cannot read public key. Unknown OID."); + error.oid = oid; + throw error; + } + obj = capture.rsaPublicKey; + } + errors = []; + if (!asn1.validate(obj, rsaPublicKeyValidator, capture, errors)) { + var error = new Error("Cannot read public key. ASN.1 object does not contain an RSAPublicKey."); + error.errors = errors; + throw error; + } + var n = forge3.util.createBuffer(capture.publicKeyModulus).toHex(); + var e = forge3.util.createBuffer(capture.publicKeyExponent).toHex(); + return pki2.setRsaPublicKey(new BigInteger(n, 16), new BigInteger(e, 16)); + }; + pki2.publicKeyToAsn1 = pki2.publicKeyToSubjectPublicKeyInfo = function(key) { + return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(pki2.oids.rsaEncryption).getBytes()), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, "") + ]), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false, [ + pki2.publicKeyToRSAPublicKey(key) + ]) + ]); + }; + pki2.publicKeyToRSAPublicKey = function(key) { + return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, _bnToBytes(key.n)), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, _bnToBytes(key.e)) + ]); + }; + function _encodePkcs1_v1_5(m, key, bt) { + var eb = forge3.util.createBuffer(); + var k = Math.ceil(key.n.bitLength() / 8); + if (m.length > k - 11) { + var error = new Error("Message is too long for PKCS#1 v1.5 padding."); + error.length = m.length; + error.max = k - 11; + throw error; + } + eb.putByte(0); + eb.putByte(bt); + var padNum = k - 3 - m.length; + var padByte; + if (bt === 0 || bt === 1) { + padByte = bt === 0 ? 0 : 255; + for (var i = 0; i < padNum; ++i) { + eb.putByte(padByte); + } + } else { + while (padNum > 0) { + var numZeros = 0; + var padBytes = forge3.random.getBytes(padNum); + for (var i = 0; i < padNum; ++i) { + padByte = padBytes.charCodeAt(i); + if (padByte === 0) { + ++numZeros; + } else { + eb.putByte(padByte); + } + } + padNum = numZeros; + } + } + eb.putByte(0); + eb.putBytes(m); + return eb; + } + function _decodePkcs1_v1_5(em, key, pub, ml) { + var k = Math.ceil(key.n.bitLength() / 8); + var eb = forge3.util.createBuffer(em); + var first = eb.getByte(); + var bt = eb.getByte(); + if (first !== 0 || pub && bt !== 0 && bt !== 1 || !pub && bt != 2 || pub && bt === 0 && typeof ml === "undefined") { + throw new Error("Encryption block is invalid."); + } + var padNum = 0; + if (bt === 0) { + padNum = k - 3 - ml; + for (var i = 0; i < padNum; ++i) { + if (eb.getByte() !== 0) { + throw new Error("Encryption block is invalid."); + } + } + } else if (bt === 1) { + padNum = 0; + while (eb.length() > 1) { + if (eb.getByte() !== 255) { + --eb.read; + break; + } + ++padNum; + } + } else if (bt === 2) { + padNum = 0; + while (eb.length() > 1) { + if (eb.getByte() === 0) { + --eb.read; + break; + } + ++padNum; + } + } + var zero = eb.getByte(); + if (zero !== 0 || padNum !== k - 3 - eb.length()) { + throw new Error("Encryption block is invalid."); + } + return eb.getBytes(); + } + function _generateKeyPair(state, options, callback) { + if (typeof options === "function") { + callback = options; + options = {}; + } + options = options || {}; + var opts = { + algorithm: { + name: options.algorithm || "PRIMEINC", + options: { + workers: options.workers || 2, + workLoad: options.workLoad || 100, + workerScript: options.workerScript + } + } + }; + if ("prng" in options) { + opts.prng = options.prng; + } + generate(); + function generate() { + getPrime(state.pBits, function(err, num) { + if (err) { + return callback(err); + } + state.p = num; + if (state.q !== null) { + return finish(err, state.q); + } + getPrime(state.qBits, finish); + }); + } + function getPrime(bits, callback2) { + forge3.prime.generateProbablePrime(bits, opts, callback2); + } + function finish(err, num) { + if (err) { + return callback(err); + } + state.q = num; + if (state.p.compareTo(state.q) < 0) { + var tmp = state.p; + state.p = state.q; + state.q = tmp; + } + if (state.p.subtract(BigInteger.ONE).gcd(state.e).compareTo(BigInteger.ONE) !== 0) { + state.p = null; + generate(); + return; + } + if (state.q.subtract(BigInteger.ONE).gcd(state.e).compareTo(BigInteger.ONE) !== 0) { + state.q = null; + getPrime(state.qBits, finish); + return; + } + state.p1 = state.p.subtract(BigInteger.ONE); + state.q1 = state.q.subtract(BigInteger.ONE); + state.phi = state.p1.multiply(state.q1); + if (state.phi.gcd(state.e).compareTo(BigInteger.ONE) !== 0) { + state.p = state.q = null; + generate(); + return; + } + state.n = state.p.multiply(state.q); + if (state.n.bitLength() !== state.bits) { + state.q = null; + getPrime(state.qBits, finish); + return; + } + var d = state.e.modInverse(state.phi); + state.keys = { + privateKey: pki2.rsa.setPrivateKey(state.n, state.e, d, state.p, state.q, d.mod(state.p1), d.mod(state.q1), state.q.modInverse(state.p)), + publicKey: pki2.rsa.setPublicKey(state.n, state.e) + }; + callback(null, state.keys); + } + } + function _bnToBytes(b) { + var hex = b.toString(16); + if (hex[0] >= "8") { + hex = "00" + hex; + } + var bytes = forge3.util.hexToBytes(hex); + if (bytes.length > 1 && (bytes.charCodeAt(0) === 0 && (bytes.charCodeAt(1) & 128) === 0 || bytes.charCodeAt(0) === 255 && (bytes.charCodeAt(1) & 128) === 128)) { + return bytes.substr(1); + } + return bytes; + } + function _getMillerRabinTests(bits) { + if (bits <= 100) + return 27; + if (bits <= 150) + return 18; + if (bits <= 200) + return 15; + if (bits <= 250) + return 12; + if (bits <= 300) + return 9; + if (bits <= 350) + return 8; + if (bits <= 400) + return 7; + if (bits <= 500) + return 6; + if (bits <= 600) + return 5; + if (bits <= 800) + return 4; + if (bits <= 1250) + return 3; + return 2; + } + function _detectNodeCrypto(fn2) { + return forge3.util.isNodejs && typeof _crypto[fn2] === "function"; + } + function _detectSubtleCrypto(fn2) { + return typeof util.globalScope !== "undefined" && typeof util.globalScope.crypto === "object" && typeof util.globalScope.crypto.subtle === "object" && typeof util.globalScope.crypto.subtle[fn2] === "function"; + } + function _detectSubtleMsCrypto(fn2) { + return typeof util.globalScope !== "undefined" && typeof util.globalScope.msCrypto === "object" && typeof util.globalScope.msCrypto.subtle === "object" && typeof util.globalScope.msCrypto.subtle[fn2] === "function"; + } + function _intToUint8Array(x) { + var bytes = forge3.util.hexToBytes(x.toString(16)); + var buffer = new Uint8Array(bytes.length); + for (var i = 0; i < bytes.length; ++i) { + buffer[i] = bytes.charCodeAt(i); + } + return buffer; + } + } +}); + +// node_modules/node-forge/lib/pbe.js +var require_pbe = __commonJS({ + "node_modules/node-forge/lib/pbe.js"(exports2, module2) { + var forge3 = require_forge(); + require_aes(); + require_asn1(); + require_des(); + require_md(); + require_oids(); + require_pbkdf2(); + require_pem(); + require_random(); + require_rc2(); + require_rsa(); + require_util(); + if (typeof BigInteger === "undefined") { + BigInteger = forge3.jsbn.BigInteger; + } + var BigInteger; + var asn1 = forge3.asn1; + var pki2 = forge3.pki = forge3.pki || {}; + module2.exports = pki2.pbe = forge3.pbe = forge3.pbe || {}; + var oids = pki2.oids; + var encryptedPrivateKeyValidator = { + name: "EncryptedPrivateKeyInfo", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "EncryptedPrivateKeyInfo.encryptionAlgorithm", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "AlgorithmIdentifier.algorithm", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OID, + constructed: false, + capture: "encryptionOid" + }, { + name: "AlgorithmIdentifier.parameters", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + captureAsn1: "encryptionParams" + }] + }, { + name: "EncryptedPrivateKeyInfo.encryptedData", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OCTETSTRING, + constructed: false, + capture: "encryptedData" + }] + }; + var PBES2AlgorithmsValidator = { + name: "PBES2Algorithms", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "PBES2Algorithms.keyDerivationFunc", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "PBES2Algorithms.keyDerivationFunc.oid", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OID, + constructed: false, + capture: "kdfOid" + }, { + name: "PBES2Algorithms.params", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "PBES2Algorithms.params.salt", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OCTETSTRING, + constructed: false, + capture: "kdfSalt" + }, { + name: "PBES2Algorithms.params.iterationCount", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.INTEGER, + constructed: false, + capture: "kdfIterationCount" + }, { + name: "PBES2Algorithms.params.keyLength", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.INTEGER, + constructed: false, + optional: true, + capture: "keyLength" + }, { + name: "PBES2Algorithms.params.prf", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + optional: true, + value: [{ + name: "PBES2Algorithms.params.prf.algorithm", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OID, + constructed: false, + capture: "prfOid" + }] + }] + }] + }, { + name: "PBES2Algorithms.encryptionScheme", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "PBES2Algorithms.encryptionScheme.oid", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OID, + constructed: false, + capture: "encOid" + }, { + name: "PBES2Algorithms.encryptionScheme.iv", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OCTETSTRING, + constructed: false, + capture: "encIv" + }] + }] + }; + var pkcs12PbeParamsValidator = { + name: "pkcs-12PbeParams", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "pkcs-12PbeParams.salt", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OCTETSTRING, + constructed: false, + capture: "salt" + }, { + name: "pkcs-12PbeParams.iterations", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.INTEGER, + constructed: false, + capture: "iterations" + }] + }; + pki2.encryptPrivateKeyInfo = function(obj, password, options) { + options = options || {}; + options.saltSize = options.saltSize || 8; + options.count = options.count || 2048; + options.algorithm = options.algorithm || "aes128"; + options.prfAlgorithm = options.prfAlgorithm || "sha1"; + var salt = forge3.random.getBytesSync(options.saltSize); + var count = options.count; + var countBytes = asn1.integerToDer(count); + var dkLen; + var encryptionAlgorithm; + var encryptedData; + if (options.algorithm.indexOf("aes") === 0 || options.algorithm === "des") { + var ivLen, encOid, cipherFn; + switch (options.algorithm) { + case "aes128": + dkLen = 16; + ivLen = 16; + encOid = oids["aes128-CBC"]; + cipherFn = forge3.aes.createEncryptionCipher; + break; + case "aes192": + dkLen = 24; + ivLen = 16; + encOid = oids["aes192-CBC"]; + cipherFn = forge3.aes.createEncryptionCipher; + break; + case "aes256": + dkLen = 32; + ivLen = 16; + encOid = oids["aes256-CBC"]; + cipherFn = forge3.aes.createEncryptionCipher; + break; + case "des": + dkLen = 8; + ivLen = 8; + encOid = oids["desCBC"]; + cipherFn = forge3.des.createEncryptionCipher; + break; + default: + var error = new Error("Cannot encrypt private key. Unknown encryption algorithm."); + error.algorithm = options.algorithm; + throw error; + } + var prfAlgorithm = "hmacWith" + options.prfAlgorithm.toUpperCase(); + var md = prfAlgorithmToMessageDigest(prfAlgorithm); + var dk = forge3.pkcs5.pbkdf2(password, salt, count, dkLen, md); + var iv = forge3.random.getBytesSync(ivLen); + var cipher = cipherFn(dk); + cipher.start(iv); + cipher.update(asn1.toDer(obj)); + cipher.finish(); + encryptedData = cipher.output.getBytes(); + var params = createPbkdf2Params(salt, countBytes, dkLen, prfAlgorithm); + encryptionAlgorithm = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(oids["pkcs5PBES2"]).getBytes()), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(oids["pkcs5PBKDF2"]).getBytes()), + params + ]), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(encOid).getBytes()), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, iv) + ]) + ]) + ]); + } else if (options.algorithm === "3des") { + dkLen = 24; + var saltBytes = new forge3.util.ByteBuffer(salt); + var dk = pki2.pbe.generatePkcs12Key(password, saltBytes, 1, count, dkLen); + var iv = pki2.pbe.generatePkcs12Key(password, saltBytes, 2, count, dkLen); + var cipher = forge3.des.createEncryptionCipher(dk); + cipher.start(iv); + cipher.update(asn1.toDer(obj)); + cipher.finish(); + encryptedData = cipher.output.getBytes(); + encryptionAlgorithm = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(oids["pbeWithSHAAnd3-KeyTripleDES-CBC"]).getBytes()), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, salt), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, countBytes.getBytes()) + ]) + ]); + } else { + var error = new Error("Cannot encrypt private key. Unknown encryption algorithm."); + error.algorithm = options.algorithm; + throw error; + } + var rval = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + encryptionAlgorithm, + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, encryptedData) + ]); + return rval; + }; + pki2.decryptPrivateKeyInfo = function(obj, password) { + var rval = null; + var capture = {}; + var errors = []; + if (!asn1.validate(obj, encryptedPrivateKeyValidator, capture, errors)) { + var error = new Error("Cannot read encrypted private key. ASN.1 object is not a supported EncryptedPrivateKeyInfo."); + error.errors = errors; + throw error; + } + var oid = asn1.derToOid(capture.encryptionOid); + var cipher = pki2.pbe.getCipher(oid, capture.encryptionParams, password); + var encrypted = forge3.util.createBuffer(capture.encryptedData); + cipher.update(encrypted); + if (cipher.finish()) { + rval = asn1.fromDer(cipher.output); + } + return rval; + }; + pki2.encryptedPrivateKeyToPem = function(epki, maxline) { + var msg = { + type: "ENCRYPTED PRIVATE KEY", + body: asn1.toDer(epki).getBytes() + }; + return forge3.pem.encode(msg, { maxline }); + }; + pki2.encryptedPrivateKeyFromPem = function(pem) { + var msg = forge3.pem.decode(pem)[0]; + if (msg.type !== "ENCRYPTED PRIVATE KEY") { + var error = new Error('Could not convert encrypted private key from PEM; PEM header type is "ENCRYPTED PRIVATE KEY".'); + error.headerType = msg.type; + throw error; + } + if (msg.procType && msg.procType.type === "ENCRYPTED") { + throw new Error("Could not convert encrypted private key from PEM; PEM is encrypted."); + } + return asn1.fromDer(msg.body); + }; + pki2.encryptRsaPrivateKey = function(rsaKey, password, options) { + options = options || {}; + if (!options.legacy) { + var rval = pki2.wrapRsaPrivateKey(pki2.privateKeyToAsn1(rsaKey)); + rval = pki2.encryptPrivateKeyInfo(rval, password, options); + return pki2.encryptedPrivateKeyToPem(rval); + } + var algorithm; + var iv; + var dkLen; + var cipherFn; + switch (options.algorithm) { + case "aes128": + algorithm = "AES-128-CBC"; + dkLen = 16; + iv = forge3.random.getBytesSync(16); + cipherFn = forge3.aes.createEncryptionCipher; + break; + case "aes192": + algorithm = "AES-192-CBC"; + dkLen = 24; + iv = forge3.random.getBytesSync(16); + cipherFn = forge3.aes.createEncryptionCipher; + break; + case "aes256": + algorithm = "AES-256-CBC"; + dkLen = 32; + iv = forge3.random.getBytesSync(16); + cipherFn = forge3.aes.createEncryptionCipher; + break; + case "3des": + algorithm = "DES-EDE3-CBC"; + dkLen = 24; + iv = forge3.random.getBytesSync(8); + cipherFn = forge3.des.createEncryptionCipher; + break; + case "des": + algorithm = "DES-CBC"; + dkLen = 8; + iv = forge3.random.getBytesSync(8); + cipherFn = forge3.des.createEncryptionCipher; + break; + default: + var error = new Error('Could not encrypt RSA private key; unsupported encryption algorithm "' + options.algorithm + '".'); + error.algorithm = options.algorithm; + throw error; + } + var dk = forge3.pbe.opensslDeriveBytes(password, iv.substr(0, 8), dkLen); + var cipher = cipherFn(dk); + cipher.start(iv); + cipher.update(asn1.toDer(pki2.privateKeyToAsn1(rsaKey))); + cipher.finish(); + var msg = { + type: "RSA PRIVATE KEY", + procType: { + version: "4", + type: "ENCRYPTED" + }, + dekInfo: { + algorithm, + parameters: forge3.util.bytesToHex(iv).toUpperCase() + }, + body: cipher.output.getBytes() + }; + return forge3.pem.encode(msg); + }; + pki2.decryptRsaPrivateKey = function(pem, password) { + var rval = null; + var msg = forge3.pem.decode(pem)[0]; + if (msg.type !== "ENCRYPTED PRIVATE KEY" && msg.type !== "PRIVATE KEY" && msg.type !== "RSA PRIVATE KEY") { + var error = new Error('Could not convert private key from PEM; PEM header type is not "ENCRYPTED PRIVATE KEY", "PRIVATE KEY", or "RSA PRIVATE KEY".'); + error.headerType = error; + throw error; + } + if (msg.procType && msg.procType.type === "ENCRYPTED") { + var dkLen; + var cipherFn; + switch (msg.dekInfo.algorithm) { + case "DES-CBC": + dkLen = 8; + cipherFn = forge3.des.createDecryptionCipher; + break; + case "DES-EDE3-CBC": + dkLen = 24; + cipherFn = forge3.des.createDecryptionCipher; + break; + case "AES-128-CBC": + dkLen = 16; + cipherFn = forge3.aes.createDecryptionCipher; + break; + case "AES-192-CBC": + dkLen = 24; + cipherFn = forge3.aes.createDecryptionCipher; + break; + case "AES-256-CBC": + dkLen = 32; + cipherFn = forge3.aes.createDecryptionCipher; + break; + case "RC2-40-CBC": + dkLen = 5; + cipherFn = function(key) { + return forge3.rc2.createDecryptionCipher(key, 40); + }; + break; + case "RC2-64-CBC": + dkLen = 8; + cipherFn = function(key) { + return forge3.rc2.createDecryptionCipher(key, 64); + }; + break; + case "RC2-128-CBC": + dkLen = 16; + cipherFn = function(key) { + return forge3.rc2.createDecryptionCipher(key, 128); + }; + break; + default: + var error = new Error('Could not decrypt private key; unsupported encryption algorithm "' + msg.dekInfo.algorithm + '".'); + error.algorithm = msg.dekInfo.algorithm; + throw error; + } + var iv = forge3.util.hexToBytes(msg.dekInfo.parameters); + var dk = forge3.pbe.opensslDeriveBytes(password, iv.substr(0, 8), dkLen); + var cipher = cipherFn(dk); + cipher.start(iv); + cipher.update(forge3.util.createBuffer(msg.body)); + if (cipher.finish()) { + rval = cipher.output.getBytes(); + } else { + return rval; + } + } else { + rval = msg.body; + } + if (msg.type === "ENCRYPTED PRIVATE KEY") { + rval = pki2.decryptPrivateKeyInfo(asn1.fromDer(rval), password); + } else { + rval = asn1.fromDer(rval); + } + if (rval !== null) { + rval = pki2.privateKeyFromAsn1(rval); + } + return rval; + }; + pki2.pbe.generatePkcs12Key = function(password, salt, id, iter, n, md) { + var j, l; + if (typeof md === "undefined" || md === null) { + if (!("sha1" in forge3.md)) { + throw new Error('"sha1" hash algorithm unavailable.'); + } + md = forge3.md.sha1.create(); + } + var u = md.digestLength; + var v = md.blockLength; + var result = new forge3.util.ByteBuffer(); + var passBuf = new forge3.util.ByteBuffer(); + if (password !== null && password !== void 0) { + for (l = 0; l < password.length; l++) { + passBuf.putInt16(password.charCodeAt(l)); + } + passBuf.putInt16(0); + } + var p = passBuf.length(); + var s = salt.length(); + var D = new forge3.util.ByteBuffer(); + D.fillWithByte(id, v); + var Slen = v * Math.ceil(s / v); + var S = new forge3.util.ByteBuffer(); + for (l = 0; l < Slen; l++) { + S.putByte(salt.at(l % s)); + } + var Plen = v * Math.ceil(p / v); + var P = new forge3.util.ByteBuffer(); + for (l = 0; l < Plen; l++) { + P.putByte(passBuf.at(l % p)); + } + var I = S; + I.putBuffer(P); + var c = Math.ceil(n / u); + for (var i = 1; i <= c; i++) { + var buf = new forge3.util.ByteBuffer(); + buf.putBytes(D.bytes()); + buf.putBytes(I.bytes()); + for (var round = 0; round < iter; round++) { + md.start(); + md.update(buf.getBytes()); + buf = md.digest(); + } + var B = new forge3.util.ByteBuffer(); + for (l = 0; l < v; l++) { + B.putByte(buf.at(l % u)); + } + var k = Math.ceil(s / v) + Math.ceil(p / v); + var Inew = new forge3.util.ByteBuffer(); + for (j = 0; j < k; j++) { + var chunk = new forge3.util.ByteBuffer(I.getBytes(v)); + var x = 511; + for (l = B.length() - 1; l >= 0; l--) { + x = x >> 8; + x += B.at(l) + chunk.at(l); + chunk.setAt(l, x & 255); + } + Inew.putBuffer(chunk); + } + I = Inew; + result.putBuffer(buf); + } + result.truncate(result.length() - n); + return result; + }; + pki2.pbe.getCipher = function(oid, params, password) { + switch (oid) { + case pki2.oids["pkcs5PBES2"]: + return pki2.pbe.getCipherForPBES2(oid, params, password); + case pki2.oids["pbeWithSHAAnd3-KeyTripleDES-CBC"]: + case pki2.oids["pbewithSHAAnd40BitRC2-CBC"]: + return pki2.pbe.getCipherForPKCS12PBE(oid, params, password); + default: + var error = new Error("Cannot read encrypted PBE data block. Unsupported OID."); + error.oid = oid; + error.supportedOids = [ + "pkcs5PBES2", + "pbeWithSHAAnd3-KeyTripleDES-CBC", + "pbewithSHAAnd40BitRC2-CBC" + ]; + throw error; + } + }; + pki2.pbe.getCipherForPBES2 = function(oid, params, password) { + var capture = {}; + var errors = []; + if (!asn1.validate(params, PBES2AlgorithmsValidator, capture, errors)) { + var error = new Error("Cannot read password-based-encryption algorithm parameters. ASN.1 object is not a supported EncryptedPrivateKeyInfo."); + error.errors = errors; + throw error; + } + oid = asn1.derToOid(capture.kdfOid); + if (oid !== pki2.oids["pkcs5PBKDF2"]) { + var error = new Error("Cannot read encrypted private key. Unsupported key derivation function OID."); + error.oid = oid; + error.supportedOids = ["pkcs5PBKDF2"]; + throw error; + } + oid = asn1.derToOid(capture.encOid); + if (oid !== pki2.oids["aes128-CBC"] && oid !== pki2.oids["aes192-CBC"] && oid !== pki2.oids["aes256-CBC"] && oid !== pki2.oids["des-EDE3-CBC"] && oid !== pki2.oids["desCBC"]) { + var error = new Error("Cannot read encrypted private key. Unsupported encryption scheme OID."); + error.oid = oid; + error.supportedOids = [ + "aes128-CBC", + "aes192-CBC", + "aes256-CBC", + "des-EDE3-CBC", + "desCBC" + ]; + throw error; + } + var salt = capture.kdfSalt; + var count = forge3.util.createBuffer(capture.kdfIterationCount); + count = count.getInt(count.length() << 3); + var dkLen; + var cipherFn; + switch (pki2.oids[oid]) { + case "aes128-CBC": + dkLen = 16; + cipherFn = forge3.aes.createDecryptionCipher; + break; + case "aes192-CBC": + dkLen = 24; + cipherFn = forge3.aes.createDecryptionCipher; + break; + case "aes256-CBC": + dkLen = 32; + cipherFn = forge3.aes.createDecryptionCipher; + break; + case "des-EDE3-CBC": + dkLen = 24; + cipherFn = forge3.des.createDecryptionCipher; + break; + case "desCBC": + dkLen = 8; + cipherFn = forge3.des.createDecryptionCipher; + break; + } + var md = prfOidToMessageDigest(capture.prfOid); + var dk = forge3.pkcs5.pbkdf2(password, salt, count, dkLen, md); + var iv = capture.encIv; + var cipher = cipherFn(dk); + cipher.start(iv); + return cipher; + }; + pki2.pbe.getCipherForPKCS12PBE = function(oid, params, password) { + var capture = {}; + var errors = []; + if (!asn1.validate(params, pkcs12PbeParamsValidator, capture, errors)) { + var error = new Error("Cannot read password-based-encryption algorithm parameters. ASN.1 object is not a supported EncryptedPrivateKeyInfo."); + error.errors = errors; + throw error; + } + var salt = forge3.util.createBuffer(capture.salt); + var count = forge3.util.createBuffer(capture.iterations); + count = count.getInt(count.length() << 3); + var dkLen, dIvLen, cipherFn; + switch (oid) { + case pki2.oids["pbeWithSHAAnd3-KeyTripleDES-CBC"]: + dkLen = 24; + dIvLen = 8; + cipherFn = forge3.des.startDecrypting; + break; + case pki2.oids["pbewithSHAAnd40BitRC2-CBC"]: + dkLen = 5; + dIvLen = 8; + cipherFn = function(key2, iv2) { + var cipher = forge3.rc2.createDecryptionCipher(key2, 40); + cipher.start(iv2, null); + return cipher; + }; + break; + default: + var error = new Error("Cannot read PKCS #12 PBE data block. Unsupported OID."); + error.oid = oid; + throw error; + } + var md = prfOidToMessageDigest(capture.prfOid); + var key = pki2.pbe.generatePkcs12Key(password, salt, 1, count, dkLen, md); + md.start(); + var iv = pki2.pbe.generatePkcs12Key(password, salt, 2, count, dIvLen, md); + return cipherFn(key, iv); + }; + pki2.pbe.opensslDeriveBytes = function(password, salt, dkLen, md) { + if (typeof md === "undefined" || md === null) { + if (!("md5" in forge3.md)) { + throw new Error('"md5" hash algorithm unavailable.'); + } + md = forge3.md.md5.create(); + } + if (salt === null) { + salt = ""; + } + var digests = [hash(md, password + salt)]; + for (var length = 16, i = 1; length < dkLen; ++i, length += 16) { + digests.push(hash(md, digests[i - 1] + password + salt)); + } + return digests.join("").substr(0, dkLen); + }; + function hash(md, bytes) { + return md.start().update(bytes).digest().getBytes(); + } + function prfOidToMessageDigest(prfOid) { + var prfAlgorithm; + if (!prfOid) { + prfAlgorithm = "hmacWithSHA1"; + } else { + prfAlgorithm = pki2.oids[asn1.derToOid(prfOid)]; + if (!prfAlgorithm) { + var error = new Error("Unsupported PRF OID."); + error.oid = prfOid; + error.supported = [ + "hmacWithSHA1", + "hmacWithSHA224", + "hmacWithSHA256", + "hmacWithSHA384", + "hmacWithSHA512" + ]; + throw error; + } + } + return prfAlgorithmToMessageDigest(prfAlgorithm); + } + function prfAlgorithmToMessageDigest(prfAlgorithm) { + var factory = forge3.md; + switch (prfAlgorithm) { + case "hmacWithSHA224": + factory = forge3.md.sha512; + case "hmacWithSHA1": + case "hmacWithSHA256": + case "hmacWithSHA384": + case "hmacWithSHA512": + prfAlgorithm = prfAlgorithm.substr(8).toLowerCase(); + break; + default: + var error = new Error("Unsupported PRF algorithm."); + error.algorithm = prfAlgorithm; + error.supported = [ + "hmacWithSHA1", + "hmacWithSHA224", + "hmacWithSHA256", + "hmacWithSHA384", + "hmacWithSHA512" + ]; + throw error; + } + if (!factory || !(prfAlgorithm in factory)) { + throw new Error("Unknown hash algorithm: " + prfAlgorithm); + } + return factory[prfAlgorithm].create(); + } + function createPbkdf2Params(salt, countBytes, dkLen, prfAlgorithm) { + var params = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, salt), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, countBytes.getBytes()) + ]); + if (prfAlgorithm !== "hmacWithSHA1") { + params.value.push(asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, forge3.util.hexToBytes(dkLen.toString(16))), asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(pki2.oids[prfAlgorithm]).getBytes()), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, "") + ])); + } + return params; + } + } +}); + +// node_modules/node-forge/lib/pkcs7asn1.js +var require_pkcs7asn1 = __commonJS({ + "node_modules/node-forge/lib/pkcs7asn1.js"(exports2, module2) { + var forge3 = require_forge(); + require_asn1(); + require_util(); + var asn1 = forge3.asn1; + var p7v = module2.exports = forge3.pkcs7asn1 = forge3.pkcs7asn1 || {}; + forge3.pkcs7 = forge3.pkcs7 || {}; + forge3.pkcs7.asn1 = p7v; + var contentInfoValidator = { + name: "ContentInfo", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "ContentInfo.ContentType", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OID, + constructed: false, + capture: "contentType" + }, { + name: "ContentInfo.content", + tagClass: asn1.Class.CONTEXT_SPECIFIC, + type: 0, + constructed: true, + optional: true, + captureAsn1: "content" + }] + }; + p7v.contentInfoValidator = contentInfoValidator; + var encryptedContentInfoValidator = { + name: "EncryptedContentInfo", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "EncryptedContentInfo.contentType", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OID, + constructed: false, + capture: "contentType" + }, { + name: "EncryptedContentInfo.contentEncryptionAlgorithm", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "EncryptedContentInfo.contentEncryptionAlgorithm.algorithm", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OID, + constructed: false, + capture: "encAlgorithm" + }, { + name: "EncryptedContentInfo.contentEncryptionAlgorithm.parameter", + tagClass: asn1.Class.UNIVERSAL, + captureAsn1: "encParameter" + }] + }, { + name: "EncryptedContentInfo.encryptedContent", + tagClass: asn1.Class.CONTEXT_SPECIFIC, + type: 0, + capture: "encryptedContent", + captureAsn1: "encryptedContentAsn1" + }] + }; + p7v.envelopedDataValidator = { + name: "EnvelopedData", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "EnvelopedData.Version", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.INTEGER, + constructed: false, + capture: "version" + }, { + name: "EnvelopedData.RecipientInfos", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SET, + constructed: true, + captureAsn1: "recipientInfos" + }].concat(encryptedContentInfoValidator) + }; + p7v.encryptedDataValidator = { + name: "EncryptedData", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "EncryptedData.Version", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.INTEGER, + constructed: false, + capture: "version" + }].concat(encryptedContentInfoValidator) + }; + var signerValidator = { + name: "SignerInfo", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "SignerInfo.version", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.INTEGER, + constructed: false + }, { + name: "SignerInfo.issuerAndSerialNumber", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "SignerInfo.issuerAndSerialNumber.issuer", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + captureAsn1: "issuer" + }, { + name: "SignerInfo.issuerAndSerialNumber.serialNumber", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.INTEGER, + constructed: false, + capture: "serial" + }] + }, { + name: "SignerInfo.digestAlgorithm", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "SignerInfo.digestAlgorithm.algorithm", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OID, + constructed: false, + capture: "digestAlgorithm" + }, { + name: "SignerInfo.digestAlgorithm.parameter", + tagClass: asn1.Class.UNIVERSAL, + constructed: false, + captureAsn1: "digestParameter", + optional: true + }] + }, { + name: "SignerInfo.authenticatedAttributes", + tagClass: asn1.Class.CONTEXT_SPECIFIC, + type: 0, + constructed: true, + optional: true, + capture: "authenticatedAttributes" + }, { + name: "SignerInfo.digestEncryptionAlgorithm", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + capture: "signatureAlgorithm" + }, { + name: "SignerInfo.encryptedDigest", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OCTETSTRING, + constructed: false, + capture: "signature" + }, { + name: "SignerInfo.unauthenticatedAttributes", + tagClass: asn1.Class.CONTEXT_SPECIFIC, + type: 1, + constructed: true, + optional: true, + capture: "unauthenticatedAttributes" + }] + }; + p7v.signedDataValidator = { + name: "SignedData", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [ + { + name: "SignedData.Version", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.INTEGER, + constructed: false, + capture: "version" + }, + { + name: "SignedData.DigestAlgorithms", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SET, + constructed: true, + captureAsn1: "digestAlgorithms" + }, + contentInfoValidator, + { + name: "SignedData.Certificates", + tagClass: asn1.Class.CONTEXT_SPECIFIC, + type: 0, + optional: true, + captureAsn1: "certificates" + }, + { + name: "SignedData.CertificateRevocationLists", + tagClass: asn1.Class.CONTEXT_SPECIFIC, + type: 1, + optional: true, + captureAsn1: "crls" + }, + { + name: "SignedData.SignerInfos", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SET, + capture: "signerInfos", + optional: true, + value: [signerValidator] + } + ] + }; + p7v.recipientInfoValidator = { + name: "RecipientInfo", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "RecipientInfo.version", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.INTEGER, + constructed: false, + capture: "version" + }, { + name: "RecipientInfo.issuerAndSerial", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "RecipientInfo.issuerAndSerial.issuer", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + captureAsn1: "issuer" + }, { + name: "RecipientInfo.issuerAndSerial.serialNumber", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.INTEGER, + constructed: false, + capture: "serial" + }] + }, { + name: "RecipientInfo.keyEncryptionAlgorithm", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "RecipientInfo.keyEncryptionAlgorithm.algorithm", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OID, + constructed: false, + capture: "encAlgorithm" + }, { + name: "RecipientInfo.keyEncryptionAlgorithm.parameter", + tagClass: asn1.Class.UNIVERSAL, + constructed: false, + captureAsn1: "encParameter", + optional: true + }] + }, { + name: "RecipientInfo.encryptedKey", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OCTETSTRING, + constructed: false, + capture: "encKey" + }] + }; + } +}); + +// node_modules/node-forge/lib/mgf1.js +var require_mgf1 = __commonJS({ + "node_modules/node-forge/lib/mgf1.js"(exports2, module2) { + var forge3 = require_forge(); + require_util(); + forge3.mgf = forge3.mgf || {}; + var mgf1 = module2.exports = forge3.mgf.mgf1 = forge3.mgf1 = forge3.mgf1 || {}; + mgf1.create = function(md) { + var mgf = { + generate: function(seed, maskLen) { + var t = new forge3.util.ByteBuffer(); + var len = Math.ceil(maskLen / md.digestLength); + for (var i = 0; i < len; i++) { + var c = new forge3.util.ByteBuffer(); + c.putInt32(i); + md.start(); + md.update(seed + c.getBytes()); + t.putBuffer(md.digest()); + } + t.truncate(t.length() - maskLen); + return t.getBytes(); + } + }; + return mgf; + }; + } +}); + +// node_modules/node-forge/lib/mgf.js +var require_mgf = __commonJS({ + "node_modules/node-forge/lib/mgf.js"(exports2, module2) { + var forge3 = require_forge(); + require_mgf1(); + module2.exports = forge3.mgf = forge3.mgf || {}; + forge3.mgf.mgf1 = forge3.mgf1; + } +}); + +// node_modules/node-forge/lib/pss.js +var require_pss = __commonJS({ + "node_modules/node-forge/lib/pss.js"(exports2, module2) { + var forge3 = require_forge(); + require_random(); + require_util(); + var pss = module2.exports = forge3.pss = forge3.pss || {}; + pss.create = function(options) { + if (arguments.length === 3) { + options = { + md: arguments[0], + mgf: arguments[1], + saltLength: arguments[2] + }; + } + var hash = options.md; + var mgf = options.mgf; + var hLen = hash.digestLength; + var salt_ = options.salt || null; + if (typeof salt_ === "string") { + salt_ = forge3.util.createBuffer(salt_); + } + var sLen; + if ("saltLength" in options) { + sLen = options.saltLength; + } else if (salt_ !== null) { + sLen = salt_.length(); + } else { + throw new Error("Salt length not specified or specific salt not given."); + } + if (salt_ !== null && salt_.length() !== sLen) { + throw new Error("Given salt length does not match length of given salt."); + } + var prng = options.prng || forge3.random; + var pssobj = {}; + pssobj.encode = function(md, modBits) { + var i; + var emBits = modBits - 1; + var emLen = Math.ceil(emBits / 8); + var mHash = md.digest().getBytes(); + if (emLen < hLen + sLen + 2) { + throw new Error("Message is too long to encrypt."); + } + var salt; + if (salt_ === null) { + salt = prng.getBytesSync(sLen); + } else { + salt = salt_.bytes(); + } + var m_ = new forge3.util.ByteBuffer(); + m_.fillWithByte(0, 8); + m_.putBytes(mHash); + m_.putBytes(salt); + hash.start(); + hash.update(m_.getBytes()); + var h = hash.digest().getBytes(); + var ps = new forge3.util.ByteBuffer(); + ps.fillWithByte(0, emLen - sLen - hLen - 2); + ps.putByte(1); + ps.putBytes(salt); + var db = ps.getBytes(); + var maskLen = emLen - hLen - 1; + var dbMask = mgf.generate(h, maskLen); + var maskedDB = ""; + for (i = 0; i < maskLen; i++) { + maskedDB += String.fromCharCode(db.charCodeAt(i) ^ dbMask.charCodeAt(i)); + } + var mask = 65280 >> 8 * emLen - emBits & 255; + maskedDB = String.fromCharCode(maskedDB.charCodeAt(0) & ~mask) + maskedDB.substr(1); + return maskedDB + h + String.fromCharCode(188); + }; + pssobj.verify = function(mHash, em, modBits) { + var i; + var emBits = modBits - 1; + var emLen = Math.ceil(emBits / 8); + em = em.substr(-emLen); + if (emLen < hLen + sLen + 2) { + throw new Error("Inconsistent parameters to PSS signature verification."); + } + if (em.charCodeAt(emLen - 1) !== 188) { + throw new Error("Encoded message does not end in 0xBC."); + } + var maskLen = emLen - hLen - 1; + var maskedDB = em.substr(0, maskLen); + var h = em.substr(maskLen, hLen); + var mask = 65280 >> 8 * emLen - emBits & 255; + if ((maskedDB.charCodeAt(0) & mask) !== 0) { + throw new Error("Bits beyond keysize not zero as expected."); + } + var dbMask = mgf.generate(h, maskLen); + var db = ""; + for (i = 0; i < maskLen; i++) { + db += String.fromCharCode(maskedDB.charCodeAt(i) ^ dbMask.charCodeAt(i)); + } + db = String.fromCharCode(db.charCodeAt(0) & ~mask) + db.substr(1); + var checkLen = emLen - hLen - sLen - 2; + for (i = 0; i < checkLen; i++) { + if (db.charCodeAt(i) !== 0) { + throw new Error("Leftmost octets not zero as expected"); + } + } + if (db.charCodeAt(checkLen) !== 1) { + throw new Error("Inconsistent PSS signature, 0x01 marker not found"); + } + var salt = db.substr(-sLen); + var m_ = new forge3.util.ByteBuffer(); + m_.fillWithByte(0, 8); + m_.putBytes(mHash); + m_.putBytes(salt); + hash.start(); + hash.update(m_.getBytes()); + var h_ = hash.digest().getBytes(); + return h === h_; + }; + return pssobj; + }; + } +}); + +// node_modules/node-forge/lib/x509.js +var require_x509 = __commonJS({ + "node_modules/node-forge/lib/x509.js"(exports2, module2) { + var forge3 = require_forge(); + require_aes(); + require_asn1(); + require_des(); + require_md(); + require_mgf(); + require_oids(); + require_pem(); + require_pss(); + require_rsa(); + require_util(); + var asn1 = forge3.asn1; + var pki2 = module2.exports = forge3.pki = forge3.pki || {}; + var oids = pki2.oids; + var _shortNames = {}; + _shortNames["CN"] = oids["commonName"]; + _shortNames["commonName"] = "CN"; + _shortNames["C"] = oids["countryName"]; + _shortNames["countryName"] = "C"; + _shortNames["L"] = oids["localityName"]; + _shortNames["localityName"] = "L"; + _shortNames["ST"] = oids["stateOrProvinceName"]; + _shortNames["stateOrProvinceName"] = "ST"; + _shortNames["O"] = oids["organizationName"]; + _shortNames["organizationName"] = "O"; + _shortNames["OU"] = oids["organizationalUnitName"]; + _shortNames["organizationalUnitName"] = "OU"; + _shortNames["E"] = oids["emailAddress"]; + _shortNames["emailAddress"] = "E"; + var publicKeyValidator = forge3.pki.rsa.publicKeyValidator; + var x509CertificateValidator = { + name: "Certificate", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "Certificate.TBSCertificate", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + captureAsn1: "tbsCertificate", + value: [ + { + name: "Certificate.TBSCertificate.version", + tagClass: asn1.Class.CONTEXT_SPECIFIC, + type: 0, + constructed: true, + optional: true, + value: [{ + name: "Certificate.TBSCertificate.version.integer", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.INTEGER, + constructed: false, + capture: "certVersion" + }] + }, + { + name: "Certificate.TBSCertificate.serialNumber", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.INTEGER, + constructed: false, + capture: "certSerialNumber" + }, + { + name: "Certificate.TBSCertificate.signature", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "Certificate.TBSCertificate.signature.algorithm", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OID, + constructed: false, + capture: "certinfoSignatureOid" + }, { + name: "Certificate.TBSCertificate.signature.parameters", + tagClass: asn1.Class.UNIVERSAL, + optional: true, + captureAsn1: "certinfoSignatureParams" + }] + }, + { + name: "Certificate.TBSCertificate.issuer", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + captureAsn1: "certIssuer" + }, + { + name: "Certificate.TBSCertificate.validity", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "Certificate.TBSCertificate.validity.notBefore (utc)", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.UTCTIME, + constructed: false, + optional: true, + capture: "certValidity1UTCTime" + }, { + name: "Certificate.TBSCertificate.validity.notBefore (generalized)", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.GENERALIZEDTIME, + constructed: false, + optional: true, + capture: "certValidity2GeneralizedTime" + }, { + name: "Certificate.TBSCertificate.validity.notAfter (utc)", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.UTCTIME, + constructed: false, + optional: true, + capture: "certValidity3UTCTime" + }, { + name: "Certificate.TBSCertificate.validity.notAfter (generalized)", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.GENERALIZEDTIME, + constructed: false, + optional: true, + capture: "certValidity4GeneralizedTime" + }] + }, + { + name: "Certificate.TBSCertificate.subject", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + captureAsn1: "certSubject" + }, + publicKeyValidator, + { + name: "Certificate.TBSCertificate.issuerUniqueID", + tagClass: asn1.Class.CONTEXT_SPECIFIC, + type: 1, + constructed: true, + optional: true, + value: [{ + name: "Certificate.TBSCertificate.issuerUniqueID.id", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.BITSTRING, + constructed: false, + captureBitStringValue: "certIssuerUniqueId" + }] + }, + { + name: "Certificate.TBSCertificate.subjectUniqueID", + tagClass: asn1.Class.CONTEXT_SPECIFIC, + type: 2, + constructed: true, + optional: true, + value: [{ + name: "Certificate.TBSCertificate.subjectUniqueID.id", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.BITSTRING, + constructed: false, + captureBitStringValue: "certSubjectUniqueId" + }] + }, + { + name: "Certificate.TBSCertificate.extensions", + tagClass: asn1.Class.CONTEXT_SPECIFIC, + type: 3, + constructed: true, + captureAsn1: "certExtensions", + optional: true + } + ] + }, { + name: "Certificate.signatureAlgorithm", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "Certificate.signatureAlgorithm.algorithm", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OID, + constructed: false, + capture: "certSignatureOid" + }, { + name: "Certificate.TBSCertificate.signature.parameters", + tagClass: asn1.Class.UNIVERSAL, + optional: true, + captureAsn1: "certSignatureParams" + }] + }, { + name: "Certificate.signatureValue", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.BITSTRING, + constructed: false, + captureBitStringValue: "certSignature" + }] + }; + var rsassaPssParameterValidator = { + name: "rsapss", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "rsapss.hashAlgorithm", + tagClass: asn1.Class.CONTEXT_SPECIFIC, + type: 0, + constructed: true, + value: [{ + name: "rsapss.hashAlgorithm.AlgorithmIdentifier", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Class.SEQUENCE, + constructed: true, + optional: true, + value: [{ + name: "rsapss.hashAlgorithm.AlgorithmIdentifier.algorithm", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OID, + constructed: false, + capture: "hashOid" + }] + }] + }, { + name: "rsapss.maskGenAlgorithm", + tagClass: asn1.Class.CONTEXT_SPECIFIC, + type: 1, + constructed: true, + value: [{ + name: "rsapss.maskGenAlgorithm.AlgorithmIdentifier", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Class.SEQUENCE, + constructed: true, + optional: true, + value: [{ + name: "rsapss.maskGenAlgorithm.AlgorithmIdentifier.algorithm", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OID, + constructed: false, + capture: "maskGenOid" + }, { + name: "rsapss.maskGenAlgorithm.AlgorithmIdentifier.params", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "rsapss.maskGenAlgorithm.AlgorithmIdentifier.params.algorithm", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OID, + constructed: false, + capture: "maskGenHashOid" + }] + }] + }] + }, { + name: "rsapss.saltLength", + tagClass: asn1.Class.CONTEXT_SPECIFIC, + type: 2, + optional: true, + value: [{ + name: "rsapss.saltLength.saltLength", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Class.INTEGER, + constructed: false, + capture: "saltLength" + }] + }, { + name: "rsapss.trailerField", + tagClass: asn1.Class.CONTEXT_SPECIFIC, + type: 3, + optional: true, + value: [{ + name: "rsapss.trailer.trailer", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Class.INTEGER, + constructed: false, + capture: "trailer" + }] + }] + }; + var certificationRequestInfoValidator = { + name: "CertificationRequestInfo", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + captureAsn1: "certificationRequestInfo", + value: [ + { + name: "CertificationRequestInfo.integer", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.INTEGER, + constructed: false, + capture: "certificationRequestInfoVersion" + }, + { + name: "CertificationRequestInfo.subject", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + captureAsn1: "certificationRequestInfoSubject" + }, + publicKeyValidator, + { + name: "CertificationRequestInfo.attributes", + tagClass: asn1.Class.CONTEXT_SPECIFIC, + type: 0, + constructed: true, + optional: true, + capture: "certificationRequestInfoAttributes", + value: [{ + name: "CertificationRequestInfo.attributes", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "CertificationRequestInfo.attributes.type", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OID, + constructed: false + }, { + name: "CertificationRequestInfo.attributes.value", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SET, + constructed: true + }] + }] + } + ] + }; + var certificationRequestValidator = { + name: "CertificationRequest", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + captureAsn1: "csr", + value: [ + certificationRequestInfoValidator, + { + name: "CertificationRequest.signatureAlgorithm", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "CertificationRequest.signatureAlgorithm.algorithm", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OID, + constructed: false, + capture: "csrSignatureOid" + }, { + name: "CertificationRequest.signatureAlgorithm.parameters", + tagClass: asn1.Class.UNIVERSAL, + optional: true, + captureAsn1: "csrSignatureParams" + }] + }, + { + name: "CertificationRequest.signature", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.BITSTRING, + constructed: false, + captureBitStringValue: "csrSignature" + } + ] + }; + pki2.RDNAttributesAsArray = function(rdn, md) { + var rval = []; + var set, attr, obj; + for (var si = 0; si < rdn.value.length; ++si) { + set = rdn.value[si]; + for (var i = 0; i < set.value.length; ++i) { + obj = {}; + attr = set.value[i]; + obj.type = asn1.derToOid(attr.value[0].value); + obj.value = attr.value[1].value; + obj.valueTagClass = attr.value[1].type; + if (obj.type in oids) { + obj.name = oids[obj.type]; + if (obj.name in _shortNames) { + obj.shortName = _shortNames[obj.name]; + } + } + if (md) { + md.update(obj.type); + md.update(obj.value); + } + rval.push(obj); + } + } + return rval; + }; + pki2.CRIAttributesAsArray = function(attributes) { + var rval = []; + for (var si = 0; si < attributes.length; ++si) { + var seq = attributes[si]; + var type = asn1.derToOid(seq.value[0].value); + var values = seq.value[1].value; + for (var vi = 0; vi < values.length; ++vi) { + var obj = {}; + obj.type = type; + obj.value = values[vi].value; + obj.valueTagClass = values[vi].type; + if (obj.type in oids) { + obj.name = oids[obj.type]; + if (obj.name in _shortNames) { + obj.shortName = _shortNames[obj.name]; + } + } + if (obj.type === oids.extensionRequest) { + obj.extensions = []; + for (var ei = 0; ei < obj.value.length; ++ei) { + obj.extensions.push(pki2.certificateExtensionFromAsn1(obj.value[ei])); + } + } + rval.push(obj); + } + } + return rval; + }; + function _getAttribute(obj, options) { + if (typeof options === "string") { + options = { shortName: options }; + } + var rval = null; + var attr; + for (var i = 0; rval === null && i < obj.attributes.length; ++i) { + attr = obj.attributes[i]; + if (options.type && options.type === attr.type) { + rval = attr; + } else if (options.name && options.name === attr.name) { + rval = attr; + } else if (options.shortName && options.shortName === attr.shortName) { + rval = attr; + } + } + return rval; + } + var _readSignatureParameters = function(oid, obj, fillDefaults) { + var params = {}; + if (oid !== oids["RSASSA-PSS"]) { + return params; + } + if (fillDefaults) { + params = { + hash: { + algorithmOid: oids["sha1"] + }, + mgf: { + algorithmOid: oids["mgf1"], + hash: { + algorithmOid: oids["sha1"] + } + }, + saltLength: 20 + }; + } + var capture = {}; + var errors = []; + if (!asn1.validate(obj, rsassaPssParameterValidator, capture, errors)) { + var error = new Error("Cannot read RSASSA-PSS parameter block."); + error.errors = errors; + throw error; + } + if (capture.hashOid !== void 0) { + params.hash = params.hash || {}; + params.hash.algorithmOid = asn1.derToOid(capture.hashOid); + } + if (capture.maskGenOid !== void 0) { + params.mgf = params.mgf || {}; + params.mgf.algorithmOid = asn1.derToOid(capture.maskGenOid); + params.mgf.hash = params.mgf.hash || {}; + params.mgf.hash.algorithmOid = asn1.derToOid(capture.maskGenHashOid); + } + if (capture.saltLength !== void 0) { + params.saltLength = capture.saltLength.charCodeAt(0); + } + return params; + }; + var _createSignatureDigest = function(options) { + switch (oids[options.signatureOid]) { + case "sha1WithRSAEncryption": + case "sha1WithRSASignature": + return forge3.md.sha1.create(); + case "md5WithRSAEncryption": + return forge3.md.md5.create(); + case "sha256WithRSAEncryption": + return forge3.md.sha256.create(); + case "sha384WithRSAEncryption": + return forge3.md.sha384.create(); + case "sha512WithRSAEncryption": + return forge3.md.sha512.create(); + case "RSASSA-PSS": + return forge3.md.sha256.create(); + default: + var error = new Error("Could not compute " + options.type + " digest. Unknown signature OID."); + error.signatureOid = options.signatureOid; + throw error; + } + }; + var _verifySignature = function(options) { + var cert = options.certificate; + var scheme; + switch (cert.signatureOid) { + case oids.sha1WithRSAEncryption: + case oids.sha1WithRSASignature: + break; + case oids["RSASSA-PSS"]: + var hash, mgf; + hash = oids[cert.signatureParameters.mgf.hash.algorithmOid]; + if (hash === void 0 || forge3.md[hash] === void 0) { + var error = new Error("Unsupported MGF hash function."); + error.oid = cert.signatureParameters.mgf.hash.algorithmOid; + error.name = hash; + throw error; + } + mgf = oids[cert.signatureParameters.mgf.algorithmOid]; + if (mgf === void 0 || forge3.mgf[mgf] === void 0) { + var error = new Error("Unsupported MGF function."); + error.oid = cert.signatureParameters.mgf.algorithmOid; + error.name = mgf; + throw error; + } + mgf = forge3.mgf[mgf].create(forge3.md[hash].create()); + hash = oids[cert.signatureParameters.hash.algorithmOid]; + if (hash === void 0 || forge3.md[hash] === void 0) { + var error = new Error("Unsupported RSASSA-PSS hash function."); + error.oid = cert.signatureParameters.hash.algorithmOid; + error.name = hash; + throw error; + } + scheme = forge3.pss.create(forge3.md[hash].create(), mgf, cert.signatureParameters.saltLength); + break; + } + return cert.publicKey.verify(options.md.digest().getBytes(), options.signature, scheme); + }; + pki2.certificateFromPem = function(pem, computeHash, strict) { + var msg = forge3.pem.decode(pem)[0]; + if (msg.type !== "CERTIFICATE" && msg.type !== "X509 CERTIFICATE" && msg.type !== "TRUSTED CERTIFICATE") { + var error = new Error('Could not convert certificate from PEM; PEM header type is not "CERTIFICATE", "X509 CERTIFICATE", or "TRUSTED CERTIFICATE".'); + error.headerType = msg.type; + throw error; + } + if (msg.procType && msg.procType.type === "ENCRYPTED") { + throw new Error("Could not convert certificate from PEM; PEM is encrypted."); + } + var obj = asn1.fromDer(msg.body, strict); + return pki2.certificateFromAsn1(obj, computeHash); + }; + pki2.certificateToPem = function(cert, maxline) { + var msg = { + type: "CERTIFICATE", + body: asn1.toDer(pki2.certificateToAsn1(cert)).getBytes() + }; + return forge3.pem.encode(msg, { maxline }); + }; + pki2.publicKeyFromPem = function(pem) { + var msg = forge3.pem.decode(pem)[0]; + if (msg.type !== "PUBLIC KEY" && msg.type !== "RSA PUBLIC KEY") { + var error = new Error('Could not convert public key from PEM; PEM header type is not "PUBLIC KEY" or "RSA PUBLIC KEY".'); + error.headerType = msg.type; + throw error; + } + if (msg.procType && msg.procType.type === "ENCRYPTED") { + throw new Error("Could not convert public key from PEM; PEM is encrypted."); + } + var obj = asn1.fromDer(msg.body); + return pki2.publicKeyFromAsn1(obj); + }; + pki2.publicKeyToPem = function(key, maxline) { + var msg = { + type: "PUBLIC KEY", + body: asn1.toDer(pki2.publicKeyToAsn1(key)).getBytes() + }; + return forge3.pem.encode(msg, { maxline }); + }; + pki2.publicKeyToRSAPublicKeyPem = function(key, maxline) { + var msg = { + type: "RSA PUBLIC KEY", + body: asn1.toDer(pki2.publicKeyToRSAPublicKey(key)).getBytes() + }; + return forge3.pem.encode(msg, { maxline }); + }; + pki2.getPublicKeyFingerprint = function(key, options) { + options = options || {}; + var md = options.md || forge3.md.sha1.create(); + var type = options.type || "RSAPublicKey"; + var bytes; + switch (type) { + case "RSAPublicKey": + bytes = asn1.toDer(pki2.publicKeyToRSAPublicKey(key)).getBytes(); + break; + case "SubjectPublicKeyInfo": + bytes = asn1.toDer(pki2.publicKeyToAsn1(key)).getBytes(); + break; + default: + throw new Error('Unknown fingerprint type "' + options.type + '".'); + } + md.start(); + md.update(bytes); + var digest = md.digest(); + if (options.encoding === "hex") { + var hex = digest.toHex(); + if (options.delimiter) { + return hex.match(/.{2}/g).join(options.delimiter); + } + return hex; + } else if (options.encoding === "binary") { + return digest.getBytes(); + } else if (options.encoding) { + throw new Error('Unknown encoding "' + options.encoding + '".'); + } + return digest; + }; + pki2.certificationRequestFromPem = function(pem, computeHash, strict) { + var msg = forge3.pem.decode(pem)[0]; + if (msg.type !== "CERTIFICATE REQUEST") { + var error = new Error('Could not convert certification request from PEM; PEM header type is not "CERTIFICATE REQUEST".'); + error.headerType = msg.type; + throw error; + } + if (msg.procType && msg.procType.type === "ENCRYPTED") { + throw new Error("Could not convert certification request from PEM; PEM is encrypted."); + } + var obj = asn1.fromDer(msg.body, strict); + return pki2.certificationRequestFromAsn1(obj, computeHash); + }; + pki2.certificationRequestToPem = function(csr, maxline) { + var msg = { + type: "CERTIFICATE REQUEST", + body: asn1.toDer(pki2.certificationRequestToAsn1(csr)).getBytes() + }; + return forge3.pem.encode(msg, { maxline }); + }; + pki2.createCertificate = function() { + var cert = {}; + cert.version = 2; + cert.serialNumber = "00"; + cert.signatureOid = null; + cert.signature = null; + cert.siginfo = {}; + cert.siginfo.algorithmOid = null; + cert.validity = {}; + cert.validity.notBefore = new Date(); + cert.validity.notAfter = new Date(); + cert.issuer = {}; + cert.issuer.getField = function(sn) { + return _getAttribute(cert.issuer, sn); + }; + cert.issuer.addField = function(attr) { + _fillMissingFields([attr]); + cert.issuer.attributes.push(attr); + }; + cert.issuer.attributes = []; + cert.issuer.hash = null; + cert.subject = {}; + cert.subject.getField = function(sn) { + return _getAttribute(cert.subject, sn); + }; + cert.subject.addField = function(attr) { + _fillMissingFields([attr]); + cert.subject.attributes.push(attr); + }; + cert.subject.attributes = []; + cert.subject.hash = null; + cert.extensions = []; + cert.publicKey = null; + cert.md = null; + cert.setSubject = function(attrs, uniqueId) { + _fillMissingFields(attrs); + cert.subject.attributes = attrs; + delete cert.subject.uniqueId; + if (uniqueId) { + cert.subject.uniqueId = uniqueId; + } + cert.subject.hash = null; + }; + cert.setIssuer = function(attrs, uniqueId) { + _fillMissingFields(attrs); + cert.issuer.attributes = attrs; + delete cert.issuer.uniqueId; + if (uniqueId) { + cert.issuer.uniqueId = uniqueId; + } + cert.issuer.hash = null; + }; + cert.setExtensions = function(exts) { + for (var i = 0; i < exts.length; ++i) { + _fillMissingExtensionFields(exts[i], { cert }); + } + cert.extensions = exts; + }; + cert.getExtension = function(options) { + if (typeof options === "string") { + options = { name: options }; + } + var rval = null; + var ext; + for (var i = 0; rval === null && i < cert.extensions.length; ++i) { + ext = cert.extensions[i]; + if (options.id && ext.id === options.id) { + rval = ext; + } else if (options.name && ext.name === options.name) { + rval = ext; + } + } + return rval; + }; + cert.sign = function(key, md) { + cert.md = md || forge3.md.sha1.create(); + var algorithmOid = oids[cert.md.algorithm + "WithRSAEncryption"]; + if (!algorithmOid) { + var error = new Error("Could not compute certificate digest. Unknown message digest algorithm OID."); + error.algorithm = cert.md.algorithm; + throw error; + } + cert.signatureOid = cert.siginfo.algorithmOid = algorithmOid; + cert.tbsCertificate = pki2.getTBSCertificate(cert); + var bytes = asn1.toDer(cert.tbsCertificate); + cert.md.update(bytes.getBytes()); + cert.signature = key.sign(cert.md); + }; + cert.verify = function(child) { + var rval = false; + if (!cert.issued(child)) { + var issuer = child.issuer; + var subject = cert.subject; + var error = new Error("The parent certificate did not issue the given child certificate; the child certificate's issuer does not match the parent's subject."); + error.expectedIssuer = subject.attributes; + error.actualIssuer = issuer.attributes; + throw error; + } + var md = child.md; + if (md === null) { + md = _createSignatureDigest({ + signatureOid: child.signatureOid, + type: "certificate" + }); + var tbsCertificate = child.tbsCertificate || pki2.getTBSCertificate(child); + var bytes = asn1.toDer(tbsCertificate); + md.update(bytes.getBytes()); + } + if (md !== null) { + rval = _verifySignature({ + certificate: cert, + md, + signature: child.signature + }); + } + return rval; + }; + cert.isIssuer = function(parent) { + var rval = false; + var i = cert.issuer; + var s = parent.subject; + if (i.hash && s.hash) { + rval = i.hash === s.hash; + } else if (i.attributes.length === s.attributes.length) { + rval = true; + var iattr, sattr; + for (var n = 0; rval && n < i.attributes.length; ++n) { + iattr = i.attributes[n]; + sattr = s.attributes[n]; + if (iattr.type !== sattr.type || iattr.value !== sattr.value) { + rval = false; + } + } + } + return rval; + }; + cert.issued = function(child) { + return child.isIssuer(cert); + }; + cert.generateSubjectKeyIdentifier = function() { + return pki2.getPublicKeyFingerprint(cert.publicKey, { type: "RSAPublicKey" }); + }; + cert.verifySubjectKeyIdentifier = function() { + var oid = oids["subjectKeyIdentifier"]; + for (var i = 0; i < cert.extensions.length; ++i) { + var ext = cert.extensions[i]; + if (ext.id === oid) { + var ski = cert.generateSubjectKeyIdentifier().getBytes(); + return forge3.util.hexToBytes(ext.subjectKeyIdentifier) === ski; + } + } + return false; + }; + return cert; + }; + pki2.certificateFromAsn1 = function(obj, computeHash) { + var capture = {}; + var errors = []; + if (!asn1.validate(obj, x509CertificateValidator, capture, errors)) { + var error = new Error("Cannot read X.509 certificate. ASN.1 object is not an X509v3 Certificate."); + error.errors = errors; + throw error; + } + var oid = asn1.derToOid(capture.publicKeyOid); + if (oid !== pki2.oids.rsaEncryption) { + throw new Error("Cannot read public key. OID is not RSA."); + } + var cert = pki2.createCertificate(); + cert.version = capture.certVersion ? capture.certVersion.charCodeAt(0) : 0; + var serial = forge3.util.createBuffer(capture.certSerialNumber); + cert.serialNumber = serial.toHex(); + cert.signatureOid = forge3.asn1.derToOid(capture.certSignatureOid); + cert.signatureParameters = _readSignatureParameters(cert.signatureOid, capture.certSignatureParams, true); + cert.siginfo.algorithmOid = forge3.asn1.derToOid(capture.certinfoSignatureOid); + cert.siginfo.parameters = _readSignatureParameters(cert.siginfo.algorithmOid, capture.certinfoSignatureParams, false); + cert.signature = capture.certSignature; + var validity = []; + if (capture.certValidity1UTCTime !== void 0) { + validity.push(asn1.utcTimeToDate(capture.certValidity1UTCTime)); + } + if (capture.certValidity2GeneralizedTime !== void 0) { + validity.push(asn1.generalizedTimeToDate(capture.certValidity2GeneralizedTime)); + } + if (capture.certValidity3UTCTime !== void 0) { + validity.push(asn1.utcTimeToDate(capture.certValidity3UTCTime)); + } + if (capture.certValidity4GeneralizedTime !== void 0) { + validity.push(asn1.generalizedTimeToDate(capture.certValidity4GeneralizedTime)); + } + if (validity.length > 2) { + throw new Error("Cannot read notBefore/notAfter validity times; more than two times were provided in the certificate."); + } + if (validity.length < 2) { + throw new Error("Cannot read notBefore/notAfter validity times; they were not provided as either UTCTime or GeneralizedTime."); + } + cert.validity.notBefore = validity[0]; + cert.validity.notAfter = validity[1]; + cert.tbsCertificate = capture.tbsCertificate; + if (computeHash) { + cert.md = _createSignatureDigest({ + signatureOid: cert.signatureOid, + type: "certificate" + }); + var bytes = asn1.toDer(cert.tbsCertificate); + cert.md.update(bytes.getBytes()); + } + var imd = forge3.md.sha1.create(); + var ibytes = asn1.toDer(capture.certIssuer); + imd.update(ibytes.getBytes()); + cert.issuer.getField = function(sn) { + return _getAttribute(cert.issuer, sn); + }; + cert.issuer.addField = function(attr) { + _fillMissingFields([attr]); + cert.issuer.attributes.push(attr); + }; + cert.issuer.attributes = pki2.RDNAttributesAsArray(capture.certIssuer); + if (capture.certIssuerUniqueId) { + cert.issuer.uniqueId = capture.certIssuerUniqueId; + } + cert.issuer.hash = imd.digest().toHex(); + var smd = forge3.md.sha1.create(); + var sbytes = asn1.toDer(capture.certSubject); + smd.update(sbytes.getBytes()); + cert.subject.getField = function(sn) { + return _getAttribute(cert.subject, sn); + }; + cert.subject.addField = function(attr) { + _fillMissingFields([attr]); + cert.subject.attributes.push(attr); + }; + cert.subject.attributes = pki2.RDNAttributesAsArray(capture.certSubject); + if (capture.certSubjectUniqueId) { + cert.subject.uniqueId = capture.certSubjectUniqueId; + } + cert.subject.hash = smd.digest().toHex(); + if (capture.certExtensions) { + cert.extensions = pki2.certificateExtensionsFromAsn1(capture.certExtensions); + } else { + cert.extensions = []; + } + cert.publicKey = pki2.publicKeyFromAsn1(capture.subjectPublicKeyInfo); + return cert; + }; + pki2.certificateExtensionsFromAsn1 = function(exts) { + var rval = []; + for (var i = 0; i < exts.value.length; ++i) { + var extseq = exts.value[i]; + for (var ei = 0; ei < extseq.value.length; ++ei) { + rval.push(pki2.certificateExtensionFromAsn1(extseq.value[ei])); + } + } + return rval; + }; + pki2.certificateExtensionFromAsn1 = function(ext) { + var e = {}; + e.id = asn1.derToOid(ext.value[0].value); + e.critical = false; + if (ext.value[1].type === asn1.Type.BOOLEAN) { + e.critical = ext.value[1].value.charCodeAt(0) !== 0; + e.value = ext.value[2].value; + } else { + e.value = ext.value[1].value; + } + if (e.id in oids) { + e.name = oids[e.id]; + if (e.name === "keyUsage") { + var ev = asn1.fromDer(e.value); + var b2 = 0; + var b3 = 0; + if (ev.value.length > 1) { + b2 = ev.value.charCodeAt(1); + b3 = ev.value.length > 2 ? ev.value.charCodeAt(2) : 0; + } + e.digitalSignature = (b2 & 128) === 128; + e.nonRepudiation = (b2 & 64) === 64; + e.keyEncipherment = (b2 & 32) === 32; + e.dataEncipherment = (b2 & 16) === 16; + e.keyAgreement = (b2 & 8) === 8; + e.keyCertSign = (b2 & 4) === 4; + e.cRLSign = (b2 & 2) === 2; + e.encipherOnly = (b2 & 1) === 1; + e.decipherOnly = (b3 & 128) === 128; + } else if (e.name === "basicConstraints") { + var ev = asn1.fromDer(e.value); + if (ev.value.length > 0 && ev.value[0].type === asn1.Type.BOOLEAN) { + e.cA = ev.value[0].value.charCodeAt(0) !== 0; + } else { + e.cA = false; + } + var value = null; + if (ev.value.length > 0 && ev.value[0].type === asn1.Type.INTEGER) { + value = ev.value[0].value; + } else if (ev.value.length > 1) { + value = ev.value[1].value; + } + if (value !== null) { + e.pathLenConstraint = asn1.derToInteger(value); + } + } else if (e.name === "extKeyUsage") { + var ev = asn1.fromDer(e.value); + for (var vi = 0; vi < ev.value.length; ++vi) { + var oid = asn1.derToOid(ev.value[vi].value); + if (oid in oids) { + e[oids[oid]] = true; + } else { + e[oid] = true; + } + } + } else if (e.name === "nsCertType") { + var ev = asn1.fromDer(e.value); + var b2 = 0; + if (ev.value.length > 1) { + b2 = ev.value.charCodeAt(1); + } + e.client = (b2 & 128) === 128; + e.server = (b2 & 64) === 64; + e.email = (b2 & 32) === 32; + e.objsign = (b2 & 16) === 16; + e.reserved = (b2 & 8) === 8; + e.sslCA = (b2 & 4) === 4; + e.emailCA = (b2 & 2) === 2; + e.objCA = (b2 & 1) === 1; + } else if (e.name === "subjectAltName" || e.name === "issuerAltName") { + e.altNames = []; + var gn; + var ev = asn1.fromDer(e.value); + for (var n = 0; n < ev.value.length; ++n) { + gn = ev.value[n]; + var altName = { + type: gn.type, + value: gn.value + }; + e.altNames.push(altName); + switch (gn.type) { + case 1: + case 2: + case 6: + break; + case 7: + altName.ip = forge3.util.bytesToIP(gn.value); + break; + case 8: + altName.oid = asn1.derToOid(gn.value); + break; + default: + } + } + } else if (e.name === "subjectKeyIdentifier") { + var ev = asn1.fromDer(e.value); + e.subjectKeyIdentifier = forge3.util.bytesToHex(ev.value); + } + } + return e; + }; + pki2.certificationRequestFromAsn1 = function(obj, computeHash) { + var capture = {}; + var errors = []; + if (!asn1.validate(obj, certificationRequestValidator, capture, errors)) { + var error = new Error("Cannot read PKCS#10 certificate request. ASN.1 object is not a PKCS#10 CertificationRequest."); + error.errors = errors; + throw error; + } + var oid = asn1.derToOid(capture.publicKeyOid); + if (oid !== pki2.oids.rsaEncryption) { + throw new Error("Cannot read public key. OID is not RSA."); + } + var csr = pki2.createCertificationRequest(); + csr.version = capture.csrVersion ? capture.csrVersion.charCodeAt(0) : 0; + csr.signatureOid = forge3.asn1.derToOid(capture.csrSignatureOid); + csr.signatureParameters = _readSignatureParameters(csr.signatureOid, capture.csrSignatureParams, true); + csr.siginfo.algorithmOid = forge3.asn1.derToOid(capture.csrSignatureOid); + csr.siginfo.parameters = _readSignatureParameters(csr.siginfo.algorithmOid, capture.csrSignatureParams, false); + csr.signature = capture.csrSignature; + csr.certificationRequestInfo = capture.certificationRequestInfo; + if (computeHash) { + csr.md = _createSignatureDigest({ + signatureOid: csr.signatureOid, + type: "certification request" + }); + var bytes = asn1.toDer(csr.certificationRequestInfo); + csr.md.update(bytes.getBytes()); + } + var smd = forge3.md.sha1.create(); + csr.subject.getField = function(sn) { + return _getAttribute(csr.subject, sn); + }; + csr.subject.addField = function(attr) { + _fillMissingFields([attr]); + csr.subject.attributes.push(attr); + }; + csr.subject.attributes = pki2.RDNAttributesAsArray(capture.certificationRequestInfoSubject, smd); + csr.subject.hash = smd.digest().toHex(); + csr.publicKey = pki2.publicKeyFromAsn1(capture.subjectPublicKeyInfo); + csr.getAttribute = function(sn) { + return _getAttribute(csr, sn); + }; + csr.addAttribute = function(attr) { + _fillMissingFields([attr]); + csr.attributes.push(attr); + }; + csr.attributes = pki2.CRIAttributesAsArray(capture.certificationRequestInfoAttributes || []); + return csr; + }; + pki2.createCertificationRequest = function() { + var csr = {}; + csr.version = 0; + csr.signatureOid = null; + csr.signature = null; + csr.siginfo = {}; + csr.siginfo.algorithmOid = null; + csr.subject = {}; + csr.subject.getField = function(sn) { + return _getAttribute(csr.subject, sn); + }; + csr.subject.addField = function(attr) { + _fillMissingFields([attr]); + csr.subject.attributes.push(attr); + }; + csr.subject.attributes = []; + csr.subject.hash = null; + csr.publicKey = null; + csr.attributes = []; + csr.getAttribute = function(sn) { + return _getAttribute(csr, sn); + }; + csr.addAttribute = function(attr) { + _fillMissingFields([attr]); + csr.attributes.push(attr); + }; + csr.md = null; + csr.setSubject = function(attrs) { + _fillMissingFields(attrs); + csr.subject.attributes = attrs; + csr.subject.hash = null; + }; + csr.setAttributes = function(attrs) { + _fillMissingFields(attrs); + csr.attributes = attrs; + }; + csr.sign = function(key, md) { + csr.md = md || forge3.md.sha1.create(); + var algorithmOid = oids[csr.md.algorithm + "WithRSAEncryption"]; + if (!algorithmOid) { + var error = new Error("Could not compute certification request digest. Unknown message digest algorithm OID."); + error.algorithm = csr.md.algorithm; + throw error; + } + csr.signatureOid = csr.siginfo.algorithmOid = algorithmOid; + csr.certificationRequestInfo = pki2.getCertificationRequestInfo(csr); + var bytes = asn1.toDer(csr.certificationRequestInfo); + csr.md.update(bytes.getBytes()); + csr.signature = key.sign(csr.md); + }; + csr.verify = function() { + var rval = false; + var md = csr.md; + if (md === null) { + md = _createSignatureDigest({ + signatureOid: csr.signatureOid, + type: "certification request" + }); + var cri = csr.certificationRequestInfo || pki2.getCertificationRequestInfo(csr); + var bytes = asn1.toDer(cri); + md.update(bytes.getBytes()); + } + if (md !== null) { + rval = _verifySignature({ + certificate: csr, + md, + signature: csr.signature + }); + } + return rval; + }; + return csr; + }; + function _dnToAsn1(obj) { + var rval = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []); + var attr, set; + var attrs = obj.attributes; + for (var i = 0; i < attrs.length; ++i) { + attr = attrs[i]; + var value = attr.value; + var valueTagClass = asn1.Type.PRINTABLESTRING; + if ("valueTagClass" in attr) { + valueTagClass = attr.valueTagClass; + if (valueTagClass === asn1.Type.UTF8) { + value = forge3.util.encodeUtf8(value); + } + } + set = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(attr.type).getBytes()), + asn1.create(asn1.Class.UNIVERSAL, valueTagClass, false, value) + ]) + ]); + rval.value.push(set); + } + return rval; + } + function _fillMissingFields(attrs) { + var attr; + for (var i = 0; i < attrs.length; ++i) { + attr = attrs[i]; + if (typeof attr.name === "undefined") { + if (attr.type && attr.type in pki2.oids) { + attr.name = pki2.oids[attr.type]; + } else if (attr.shortName && attr.shortName in _shortNames) { + attr.name = pki2.oids[_shortNames[attr.shortName]]; + } + } + if (typeof attr.type === "undefined") { + if (attr.name && attr.name in pki2.oids) { + attr.type = pki2.oids[attr.name]; + } else { + var error = new Error("Attribute type not specified."); + error.attribute = attr; + throw error; + } + } + if (typeof attr.shortName === "undefined") { + if (attr.name && attr.name in _shortNames) { + attr.shortName = _shortNames[attr.name]; + } + } + if (attr.type === oids.extensionRequest) { + attr.valueConstructed = true; + attr.valueTagClass = asn1.Type.SEQUENCE; + if (!attr.value && attr.extensions) { + attr.value = []; + for (var ei = 0; ei < attr.extensions.length; ++ei) { + attr.value.push(pki2.certificateExtensionToAsn1(_fillMissingExtensionFields(attr.extensions[ei]))); + } + } + } + if (typeof attr.value === "undefined") { + var error = new Error("Attribute value not specified."); + error.attribute = attr; + throw error; + } + } + } + function _fillMissingExtensionFields(e, options) { + options = options || {}; + if (typeof e.name === "undefined") { + if (e.id && e.id in pki2.oids) { + e.name = pki2.oids[e.id]; + } + } + if (typeof e.id === "undefined") { + if (e.name && e.name in pki2.oids) { + e.id = pki2.oids[e.name]; + } else { + var error = new Error("Extension ID not specified."); + error.extension = e; + throw error; + } + } + if (typeof e.value !== "undefined") { + return e; + } + if (e.name === "keyUsage") { + var unused = 0; + var b2 = 0; + var b3 = 0; + if (e.digitalSignature) { + b2 |= 128; + unused = 7; + } + if (e.nonRepudiation) { + b2 |= 64; + unused = 6; + } + if (e.keyEncipherment) { + b2 |= 32; + unused = 5; + } + if (e.dataEncipherment) { + b2 |= 16; + unused = 4; + } + if (e.keyAgreement) { + b2 |= 8; + unused = 3; + } + if (e.keyCertSign) { + b2 |= 4; + unused = 2; + } + if (e.cRLSign) { + b2 |= 2; + unused = 1; + } + if (e.encipherOnly) { + b2 |= 1; + unused = 0; + } + if (e.decipherOnly) { + b3 |= 128; + unused = 7; + } + var value = String.fromCharCode(unused); + if (b3 !== 0) { + value += String.fromCharCode(b2) + String.fromCharCode(b3); + } else if (b2 !== 0) { + value += String.fromCharCode(b2); + } + e.value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false, value); + } else if (e.name === "basicConstraints") { + e.value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []); + if (e.cA) { + e.value.value.push(asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BOOLEAN, false, String.fromCharCode(255))); + } + if ("pathLenConstraint" in e) { + e.value.value.push(asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, asn1.integerToDer(e.pathLenConstraint).getBytes())); + } + } else if (e.name === "extKeyUsage") { + e.value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []); + var seq = e.value.value; + for (var key in e) { + if (e[key] !== true) { + continue; + } + if (key in oids) { + seq.push(asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(oids[key]).getBytes())); + } else if (key.indexOf(".") !== -1) { + seq.push(asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(key).getBytes())); + } + } + } else if (e.name === "nsCertType") { + var unused = 0; + var b2 = 0; + if (e.client) { + b2 |= 128; + unused = 7; + } + if (e.server) { + b2 |= 64; + unused = 6; + } + if (e.email) { + b2 |= 32; + unused = 5; + } + if (e.objsign) { + b2 |= 16; + unused = 4; + } + if (e.reserved) { + b2 |= 8; + unused = 3; + } + if (e.sslCA) { + b2 |= 4; + unused = 2; + } + if (e.emailCA) { + b2 |= 2; + unused = 1; + } + if (e.objCA) { + b2 |= 1; + unused = 0; + } + var value = String.fromCharCode(unused); + if (b2 !== 0) { + value += String.fromCharCode(b2); + } + e.value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false, value); + } else if (e.name === "subjectAltName" || e.name === "issuerAltName") { + e.value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []); + var altName; + for (var n = 0; n < e.altNames.length; ++n) { + altName = e.altNames[n]; + var value = altName.value; + if (altName.type === 7 && altName.ip) { + value = forge3.util.bytesFromIP(altName.ip); + if (value === null) { + var error = new Error('Extension "ip" value is not a valid IPv4 or IPv6 address.'); + error.extension = e; + throw error; + } + } else if (altName.type === 8) { + if (altName.oid) { + value = asn1.oidToDer(asn1.oidToDer(altName.oid)); + } else { + value = asn1.oidToDer(value); + } + } + e.value.value.push(asn1.create(asn1.Class.CONTEXT_SPECIFIC, altName.type, false, value)); + } + } else if (e.name === "nsComment" && options.cert) { + if (!/^[\x00-\x7F]*$/.test(e.comment) || e.comment.length < 1 || e.comment.length > 128) { + throw new Error('Invalid "nsComment" content.'); + } + e.value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.IA5STRING, false, e.comment); + } else if (e.name === "subjectKeyIdentifier" && options.cert) { + var ski = options.cert.generateSubjectKeyIdentifier(); + e.subjectKeyIdentifier = ski.toHex(); + e.value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, ski.getBytes()); + } else if (e.name === "authorityKeyIdentifier" && options.cert) { + e.value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []); + var seq = e.value.value; + if (e.keyIdentifier) { + var keyIdentifier = e.keyIdentifier === true ? options.cert.generateSubjectKeyIdentifier().getBytes() : e.keyIdentifier; + seq.push(asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, false, keyIdentifier)); + } + if (e.authorityCertIssuer) { + var authorityCertIssuer = [ + asn1.create(asn1.Class.CONTEXT_SPECIFIC, 4, true, [ + _dnToAsn1(e.authorityCertIssuer === true ? options.cert.issuer : e.authorityCertIssuer) + ]) + ]; + seq.push(asn1.create(asn1.Class.CONTEXT_SPECIFIC, 1, true, authorityCertIssuer)); + } + if (e.serialNumber) { + var serialNumber = forge3.util.hexToBytes(e.serialNumber === true ? options.cert.serialNumber : e.serialNumber); + seq.push(asn1.create(asn1.Class.CONTEXT_SPECIFIC, 2, false, serialNumber)); + } + } else if (e.name === "cRLDistributionPoints") { + e.value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []); + var seq = e.value.value; + var subSeq = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []); + var fullNameGeneralNames = asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, []); + var altName; + for (var n = 0; n < e.altNames.length; ++n) { + altName = e.altNames[n]; + var value = altName.value; + if (altName.type === 7 && altName.ip) { + value = forge3.util.bytesFromIP(altName.ip); + if (value === null) { + var error = new Error('Extension "ip" value is not a valid IPv4 or IPv6 address.'); + error.extension = e; + throw error; + } + } else if (altName.type === 8) { + if (altName.oid) { + value = asn1.oidToDer(asn1.oidToDer(altName.oid)); + } else { + value = asn1.oidToDer(value); + } + } + fullNameGeneralNames.value.push(asn1.create(asn1.Class.CONTEXT_SPECIFIC, altName.type, false, value)); + } + subSeq.value.push(asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [fullNameGeneralNames])); + seq.push(subSeq); + } + if (typeof e.value === "undefined") { + var error = new Error("Extension value not specified."); + error.extension = e; + throw error; + } + return e; + } + function _signatureParametersToAsn1(oid, params) { + switch (oid) { + case oids["RSASSA-PSS"]: + var parts = []; + if (params.hash.algorithmOid !== void 0) { + parts.push(asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(params.hash.algorithmOid).getBytes()), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, "") + ]) + ])); + } + if (params.mgf.algorithmOid !== void 0) { + parts.push(asn1.create(asn1.Class.CONTEXT_SPECIFIC, 1, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(params.mgf.algorithmOid).getBytes()), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(params.mgf.hash.algorithmOid).getBytes()), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, "") + ]) + ]) + ])); + } + if (params.saltLength !== void 0) { + parts.push(asn1.create(asn1.Class.CONTEXT_SPECIFIC, 2, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, asn1.integerToDer(params.saltLength).getBytes()) + ])); + } + return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, parts); + default: + return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, ""); + } + } + function _CRIAttributesToAsn1(csr) { + var rval = asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, []); + if (csr.attributes.length === 0) { + return rval; + } + var attrs = csr.attributes; + for (var i = 0; i < attrs.length; ++i) { + var attr = attrs[i]; + var value = attr.value; + var valueTagClass = asn1.Type.UTF8; + if ("valueTagClass" in attr) { + valueTagClass = attr.valueTagClass; + } + if (valueTagClass === asn1.Type.UTF8) { + value = forge3.util.encodeUtf8(value); + } + var valueConstructed = false; + if ("valueConstructed" in attr) { + valueConstructed = attr.valueConstructed; + } + var seq = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(attr.type).getBytes()), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, [ + asn1.create(asn1.Class.UNIVERSAL, valueTagClass, valueConstructed, value) + ]) + ]); + rval.value.push(seq); + } + return rval; + } + var jan_1_1950 = new Date("1950-01-01T00:00:00Z"); + var jan_1_2050 = new Date("2050-01-01T00:00:00Z"); + function _dateToAsn1(date) { + if (date >= jan_1_1950 && date < jan_1_2050) { + return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.UTCTIME, false, asn1.dateToUtcTime(date)); + } else { + return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.GENERALIZEDTIME, false, asn1.dateToGeneralizedTime(date)); + } + } + pki2.getTBSCertificate = function(cert) { + var notBefore = _dateToAsn1(cert.validity.notBefore); + var notAfter = _dateToAsn1(cert.validity.notAfter); + var tbs = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, asn1.integerToDer(cert.version).getBytes()) + ]), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, forge3.util.hexToBytes(cert.serialNumber)), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(cert.siginfo.algorithmOid).getBytes()), + _signatureParametersToAsn1(cert.siginfo.algorithmOid, cert.siginfo.parameters) + ]), + _dnToAsn1(cert.issuer), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + notBefore, + notAfter + ]), + _dnToAsn1(cert.subject), + pki2.publicKeyToAsn1(cert.publicKey) + ]); + if (cert.issuer.uniqueId) { + tbs.value.push(asn1.create(asn1.Class.CONTEXT_SPECIFIC, 1, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false, String.fromCharCode(0) + cert.issuer.uniqueId) + ])); + } + if (cert.subject.uniqueId) { + tbs.value.push(asn1.create(asn1.Class.CONTEXT_SPECIFIC, 2, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false, String.fromCharCode(0) + cert.subject.uniqueId) + ])); + } + if (cert.extensions.length > 0) { + tbs.value.push(pki2.certificateExtensionsToAsn1(cert.extensions)); + } + return tbs; + }; + pki2.getCertificationRequestInfo = function(csr) { + var cri = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, asn1.integerToDer(csr.version).getBytes()), + _dnToAsn1(csr.subject), + pki2.publicKeyToAsn1(csr.publicKey), + _CRIAttributesToAsn1(csr) + ]); + return cri; + }; + pki2.distinguishedNameToAsn1 = function(dn) { + return _dnToAsn1(dn); + }; + pki2.certificateToAsn1 = function(cert) { + var tbsCertificate = cert.tbsCertificate || pki2.getTBSCertificate(cert); + return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + tbsCertificate, + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(cert.signatureOid).getBytes()), + _signatureParametersToAsn1(cert.signatureOid, cert.signatureParameters) + ]), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false, String.fromCharCode(0) + cert.signature) + ]); + }; + pki2.certificateExtensionsToAsn1 = function(exts) { + var rval = asn1.create(asn1.Class.CONTEXT_SPECIFIC, 3, true, []); + var seq = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []); + rval.value.push(seq); + for (var i = 0; i < exts.length; ++i) { + seq.value.push(pki2.certificateExtensionToAsn1(exts[i])); + } + return rval; + }; + pki2.certificateExtensionToAsn1 = function(ext) { + var extseq = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, []); + extseq.value.push(asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(ext.id).getBytes())); + if (ext.critical) { + extseq.value.push(asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BOOLEAN, false, String.fromCharCode(255))); + } + var value = ext.value; + if (typeof ext.value !== "string") { + value = asn1.toDer(value).getBytes(); + } + extseq.value.push(asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, value)); + return extseq; + }; + pki2.certificationRequestToAsn1 = function(csr) { + var cri = csr.certificationRequestInfo || pki2.getCertificationRequestInfo(csr); + return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + cri, + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(csr.signatureOid).getBytes()), + _signatureParametersToAsn1(csr.signatureOid, csr.signatureParameters) + ]), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BITSTRING, false, String.fromCharCode(0) + csr.signature) + ]); + }; + pki2.createCaStore = function(certs) { + var caStore = { + certs: {} + }; + caStore.getIssuer = function(cert2) { + var rval = getBySubject(cert2.issuer); + return rval; + }; + caStore.addCertificate = function(cert2) { + if (typeof cert2 === "string") { + cert2 = forge3.pki.certificateFromPem(cert2); + } + ensureSubjectHasHash(cert2.subject); + if (!caStore.hasCertificate(cert2)) { + if (cert2.subject.hash in caStore.certs) { + var tmp = caStore.certs[cert2.subject.hash]; + if (!forge3.util.isArray(tmp)) { + tmp = [tmp]; + } + tmp.push(cert2); + caStore.certs[cert2.subject.hash] = tmp; + } else { + caStore.certs[cert2.subject.hash] = cert2; + } + } + }; + caStore.hasCertificate = function(cert2) { + if (typeof cert2 === "string") { + cert2 = forge3.pki.certificateFromPem(cert2); + } + var match = getBySubject(cert2.subject); + if (!match) { + return false; + } + if (!forge3.util.isArray(match)) { + match = [match]; + } + var der1 = asn1.toDer(pki2.certificateToAsn1(cert2)).getBytes(); + for (var i2 = 0; i2 < match.length; ++i2) { + var der2 = asn1.toDer(pki2.certificateToAsn1(match[i2])).getBytes(); + if (der1 === der2) { + return true; + } + } + return false; + }; + caStore.listAllCertificates = function() { + var certList = []; + for (var hash in caStore.certs) { + if (caStore.certs.hasOwnProperty(hash)) { + var value = caStore.certs[hash]; + if (!forge3.util.isArray(value)) { + certList.push(value); + } else { + for (var i2 = 0; i2 < value.length; ++i2) { + certList.push(value[i2]); + } + } + } + } + return certList; + }; + caStore.removeCertificate = function(cert2) { + var result; + if (typeof cert2 === "string") { + cert2 = forge3.pki.certificateFromPem(cert2); + } + ensureSubjectHasHash(cert2.subject); + if (!caStore.hasCertificate(cert2)) { + return null; + } + var match = getBySubject(cert2.subject); + if (!forge3.util.isArray(match)) { + result = caStore.certs[cert2.subject.hash]; + delete caStore.certs[cert2.subject.hash]; + return result; + } + var der1 = asn1.toDer(pki2.certificateToAsn1(cert2)).getBytes(); + for (var i2 = 0; i2 < match.length; ++i2) { + var der2 = asn1.toDer(pki2.certificateToAsn1(match[i2])).getBytes(); + if (der1 === der2) { + result = match[i2]; + match.splice(i2, 1); + } + } + if (match.length === 0) { + delete caStore.certs[cert2.subject.hash]; + } + return result; + }; + function getBySubject(subject) { + ensureSubjectHasHash(subject); + return caStore.certs[subject.hash] || null; + } + function ensureSubjectHasHash(subject) { + if (!subject.hash) { + var md = forge3.md.sha1.create(); + subject.attributes = pki2.RDNAttributesAsArray(_dnToAsn1(subject), md); + subject.hash = md.digest().toHex(); + } + } + if (certs) { + for (var i = 0; i < certs.length; ++i) { + var cert = certs[i]; + caStore.addCertificate(cert); + } + } + return caStore; + }; + pki2.certificateError = { + bad_certificate: "forge.pki.BadCertificate", + unsupported_certificate: "forge.pki.UnsupportedCertificate", + certificate_revoked: "forge.pki.CertificateRevoked", + certificate_expired: "forge.pki.CertificateExpired", + certificate_unknown: "forge.pki.CertificateUnknown", + unknown_ca: "forge.pki.UnknownCertificateAuthority" + }; + pki2.verifyCertificateChain = function(caStore, chain, options) { + if (typeof options === "function") { + options = { verify: options }; + } + options = options || {}; + chain = chain.slice(0); + var certs = chain.slice(0); + var validityCheckDate = options.validityCheckDate; + if (typeof validityCheckDate === "undefined") { + validityCheckDate = new Date(); + } + var first = true; + var error = null; + var depth = 0; + do { + var cert = chain.shift(); + var parent = null; + var selfSigned = false; + if (validityCheckDate) { + if (validityCheckDate < cert.validity.notBefore || validityCheckDate > cert.validity.notAfter) { + error = { + message: "Certificate is not valid yet or has expired.", + error: pki2.certificateError.certificate_expired, + notBefore: cert.validity.notBefore, + notAfter: cert.validity.notAfter, + now: validityCheckDate + }; + } + } + if (error === null) { + parent = chain[0] || caStore.getIssuer(cert); + if (parent === null) { + if (cert.isIssuer(cert)) { + selfSigned = true; + parent = cert; + } + } + if (parent) { + var parents = parent; + if (!forge3.util.isArray(parents)) { + parents = [parents]; + } + var verified = false; + while (!verified && parents.length > 0) { + parent = parents.shift(); + try { + verified = parent.verify(cert); + } catch (ex) { + } + } + if (!verified) { + error = { + message: "Certificate signature is invalid.", + error: pki2.certificateError.bad_certificate + }; + } + } + if (error === null && (!parent || selfSigned) && !caStore.hasCertificate(cert)) { + error = { + message: "Certificate is not trusted.", + error: pki2.certificateError.unknown_ca + }; + } + } + if (error === null && parent && !cert.isIssuer(parent)) { + error = { + message: "Certificate issuer is invalid.", + error: pki2.certificateError.bad_certificate + }; + } + if (error === null) { + var se = { + keyUsage: true, + basicConstraints: true + }; + for (var i = 0; error === null && i < cert.extensions.length; ++i) { + var ext = cert.extensions[i]; + if (ext.critical && !(ext.name in se)) { + error = { + message: "Certificate has an unsupported critical extension.", + error: pki2.certificateError.unsupported_certificate + }; + } + } + } + if (error === null && (!first || chain.length === 0 && (!parent || selfSigned))) { + var bcExt = cert.getExtension("basicConstraints"); + var keyUsageExt = cert.getExtension("keyUsage"); + if (keyUsageExt !== null) { + if (!keyUsageExt.keyCertSign || bcExt === null) { + error = { + message: "Certificate keyUsage or basicConstraints conflict or indicate that the certificate is not a CA. If the certificate is the only one in the chain or isn't the first then the certificate must be a valid CA.", + error: pki2.certificateError.bad_certificate + }; + } + } + if (error === null && bcExt !== null && !bcExt.cA) { + error = { + message: "Certificate basicConstraints indicates the certificate is not a CA.", + error: pki2.certificateError.bad_certificate + }; + } + if (error === null && keyUsageExt !== null && "pathLenConstraint" in bcExt) { + var pathLen = depth - 1; + if (pathLen > bcExt.pathLenConstraint) { + error = { + message: "Certificate basicConstraints pathLenConstraint violated.", + error: pki2.certificateError.bad_certificate + }; + } + } + } + var vfd = error === null ? true : error.error; + var ret = options.verify ? options.verify(vfd, depth, certs) : vfd; + if (ret === true) { + error = null; + } else { + if (vfd === true) { + error = { + message: "The application rejected the certificate.", + error: pki2.certificateError.bad_certificate + }; + } + if (ret || ret === 0) { + if (typeof ret === "object" && !forge3.util.isArray(ret)) { + if (ret.message) { + error.message = ret.message; + } + if (ret.error) { + error.error = ret.error; + } + } else if (typeof ret === "string") { + error.error = ret; + } + } + throw error; + } + first = false; + ++depth; + } while (chain.length > 0); + return true; + }; + } +}); + +// node_modules/node-forge/lib/pkcs12.js +var require_pkcs12 = __commonJS({ + "node_modules/node-forge/lib/pkcs12.js"(exports2, module2) { + var forge3 = require_forge(); + require_asn1(); + require_hmac(); + require_oids(); + require_pkcs7asn1(); + require_pbe(); + require_random(); + require_rsa(); + require_sha1(); + require_util(); + require_x509(); + var asn1 = forge3.asn1; + var pki2 = forge3.pki; + var p12 = module2.exports = forge3.pkcs12 = forge3.pkcs12 || {}; + var contentInfoValidator = { + name: "ContentInfo", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "ContentInfo.contentType", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OID, + constructed: false, + capture: "contentType" + }, { + name: "ContentInfo.content", + tagClass: asn1.Class.CONTEXT_SPECIFIC, + constructed: true, + captureAsn1: "content" + }] + }; + var pfxValidator = { + name: "PFX", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [ + { + name: "PFX.version", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.INTEGER, + constructed: false, + capture: "version" + }, + contentInfoValidator, + { + name: "PFX.macData", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + optional: true, + captureAsn1: "mac", + value: [{ + name: "PFX.macData.mac", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "PFX.macData.mac.digestAlgorithm", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "PFX.macData.mac.digestAlgorithm.algorithm", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OID, + constructed: false, + capture: "macAlgorithm" + }, { + name: "PFX.macData.mac.digestAlgorithm.parameters", + tagClass: asn1.Class.UNIVERSAL, + captureAsn1: "macAlgorithmParameters" + }] + }, { + name: "PFX.macData.mac.digest", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OCTETSTRING, + constructed: false, + capture: "macDigest" + }] + }, { + name: "PFX.macData.macSalt", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OCTETSTRING, + constructed: false, + capture: "macSalt" + }, { + name: "PFX.macData.iterations", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.INTEGER, + constructed: false, + optional: true, + capture: "macIterations" + }] + } + ] + }; + var safeBagValidator = { + name: "SafeBag", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "SafeBag.bagId", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OID, + constructed: false, + capture: "bagId" + }, { + name: "SafeBag.bagValue", + tagClass: asn1.Class.CONTEXT_SPECIFIC, + constructed: true, + captureAsn1: "bagValue" + }, { + name: "SafeBag.bagAttributes", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SET, + constructed: true, + optional: true, + capture: "bagAttributes" + }] + }; + var attributeValidator = { + name: "Attribute", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "Attribute.attrId", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OID, + constructed: false, + capture: "oid" + }, { + name: "Attribute.attrValues", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SET, + constructed: true, + capture: "values" + }] + }; + var certBagValidator = { + name: "CertBag", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "CertBag.certId", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OID, + constructed: false, + capture: "certId" + }, { + name: "CertBag.certValue", + tagClass: asn1.Class.CONTEXT_SPECIFIC, + constructed: true, + value: [{ + name: "CertBag.certValue[0]", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Class.OCTETSTRING, + constructed: false, + capture: "cert" + }] + }] + }; + function _getBagsByAttribute(safeContents, attrName, attrValue, bagType) { + var result = []; + for (var i = 0; i < safeContents.length; i++) { + for (var j = 0; j < safeContents[i].safeBags.length; j++) { + var bag = safeContents[i].safeBags[j]; + if (bagType !== void 0 && bag.type !== bagType) { + continue; + } + if (attrName === null) { + result.push(bag); + continue; + } + if (bag.attributes[attrName] !== void 0 && bag.attributes[attrName].indexOf(attrValue) >= 0) { + result.push(bag); + } + } + } + return result; + } + p12.pkcs12FromAsn1 = function(obj, strict, password) { + if (typeof strict === "string") { + password = strict; + strict = true; + } else if (strict === void 0) { + strict = true; + } + var capture = {}; + var errors = []; + if (!asn1.validate(obj, pfxValidator, capture, errors)) { + var error = new Error("Cannot read PKCS#12 PFX. ASN.1 object is not an PKCS#12 PFX."); + error.errors = error; + throw error; + } + var pfx = { + version: capture.version.charCodeAt(0), + safeContents: [], + getBags: function(filter) { + var rval = {}; + var localKeyId; + if ("localKeyId" in filter) { + localKeyId = filter.localKeyId; + } else if ("localKeyIdHex" in filter) { + localKeyId = forge3.util.hexToBytes(filter.localKeyIdHex); + } + if (localKeyId === void 0 && !("friendlyName" in filter) && "bagType" in filter) { + rval[filter.bagType] = _getBagsByAttribute(pfx.safeContents, null, null, filter.bagType); + } + if (localKeyId !== void 0) { + rval.localKeyId = _getBagsByAttribute(pfx.safeContents, "localKeyId", localKeyId, filter.bagType); + } + if ("friendlyName" in filter) { + rval.friendlyName = _getBagsByAttribute(pfx.safeContents, "friendlyName", filter.friendlyName, filter.bagType); + } + return rval; + }, + getBagsByFriendlyName: function(friendlyName, bagType) { + return _getBagsByAttribute(pfx.safeContents, "friendlyName", friendlyName, bagType); + }, + getBagsByLocalKeyId: function(localKeyId, bagType) { + return _getBagsByAttribute(pfx.safeContents, "localKeyId", localKeyId, bagType); + } + }; + if (capture.version.charCodeAt(0) !== 3) { + var error = new Error("PKCS#12 PFX of version other than 3 not supported."); + error.version = capture.version.charCodeAt(0); + throw error; + } + if (asn1.derToOid(capture.contentType) !== pki2.oids.data) { + var error = new Error("Only PKCS#12 PFX in password integrity mode supported."); + error.oid = asn1.derToOid(capture.contentType); + throw error; + } + var data = capture.content.value[0]; + if (data.tagClass !== asn1.Class.UNIVERSAL || data.type !== asn1.Type.OCTETSTRING) { + throw new Error("PKCS#12 authSafe content data is not an OCTET STRING."); + } + data = _decodePkcs7Data(data); + if (capture.mac) { + var md = null; + var macKeyBytes = 0; + var macAlgorithm = asn1.derToOid(capture.macAlgorithm); + switch (macAlgorithm) { + case pki2.oids.sha1: + md = forge3.md.sha1.create(); + macKeyBytes = 20; + break; + case pki2.oids.sha256: + md = forge3.md.sha256.create(); + macKeyBytes = 32; + break; + case pki2.oids.sha384: + md = forge3.md.sha384.create(); + macKeyBytes = 48; + break; + case pki2.oids.sha512: + md = forge3.md.sha512.create(); + macKeyBytes = 64; + break; + case pki2.oids.md5: + md = forge3.md.md5.create(); + macKeyBytes = 16; + break; + } + if (md === null) { + throw new Error("PKCS#12 uses unsupported MAC algorithm: " + macAlgorithm); + } + var macSalt = new forge3.util.ByteBuffer(capture.macSalt); + var macIterations = "macIterations" in capture ? parseInt(forge3.util.bytesToHex(capture.macIterations), 16) : 1; + var macKey = p12.generateKey(password, macSalt, 3, macIterations, macKeyBytes, md); + var mac = forge3.hmac.create(); + mac.start(md, macKey); + mac.update(data.value); + var macValue = mac.getMac(); + if (macValue.getBytes() !== capture.macDigest) { + throw new Error("PKCS#12 MAC could not be verified. Invalid password?"); + } + } + _decodeAuthenticatedSafe(pfx, data.value, strict, password); + return pfx; + }; + function _decodePkcs7Data(data) { + if (data.composed || data.constructed) { + var value = forge3.util.createBuffer(); + for (var i = 0; i < data.value.length; ++i) { + value.putBytes(data.value[i].value); + } + data.composed = data.constructed = false; + data.value = value.getBytes(); + } + return data; + } + function _decodeAuthenticatedSafe(pfx, authSafe, strict, password) { + authSafe = asn1.fromDer(authSafe, strict); + if (authSafe.tagClass !== asn1.Class.UNIVERSAL || authSafe.type !== asn1.Type.SEQUENCE || authSafe.constructed !== true) { + throw new Error("PKCS#12 AuthenticatedSafe expected to be a SEQUENCE OF ContentInfo"); + } + for (var i = 0; i < authSafe.value.length; i++) { + var contentInfo = authSafe.value[i]; + var capture = {}; + var errors = []; + if (!asn1.validate(contentInfo, contentInfoValidator, capture, errors)) { + var error = new Error("Cannot read ContentInfo."); + error.errors = errors; + throw error; + } + var obj = { + encrypted: false + }; + var safeContents = null; + var data = capture.content.value[0]; + switch (asn1.derToOid(capture.contentType)) { + case pki2.oids.data: + if (data.tagClass !== asn1.Class.UNIVERSAL || data.type !== asn1.Type.OCTETSTRING) { + throw new Error("PKCS#12 SafeContents Data is not an OCTET STRING."); + } + safeContents = _decodePkcs7Data(data).value; + break; + case pki2.oids.encryptedData: + safeContents = _decryptSafeContents(data, password); + obj.encrypted = true; + break; + default: + var error = new Error("Unsupported PKCS#12 contentType."); + error.contentType = asn1.derToOid(capture.contentType); + throw error; + } + obj.safeBags = _decodeSafeContents(safeContents, strict, password); + pfx.safeContents.push(obj); + } + } + function _decryptSafeContents(data, password) { + var capture = {}; + var errors = []; + if (!asn1.validate(data, forge3.pkcs7.asn1.encryptedDataValidator, capture, errors)) { + var error = new Error("Cannot read EncryptedContentInfo."); + error.errors = errors; + throw error; + } + var oid = asn1.derToOid(capture.contentType); + if (oid !== pki2.oids.data) { + var error = new Error("PKCS#12 EncryptedContentInfo ContentType is not Data."); + error.oid = oid; + throw error; + } + oid = asn1.derToOid(capture.encAlgorithm); + var cipher = pki2.pbe.getCipher(oid, capture.encParameter, password); + var encryptedContentAsn1 = _decodePkcs7Data(capture.encryptedContentAsn1); + var encrypted = forge3.util.createBuffer(encryptedContentAsn1.value); + cipher.update(encrypted); + if (!cipher.finish()) { + throw new Error("Failed to decrypt PKCS#12 SafeContents."); + } + return cipher.output.getBytes(); + } + function _decodeSafeContents(safeContents, strict, password) { + if (!strict && safeContents.length === 0) { + return []; + } + safeContents = asn1.fromDer(safeContents, strict); + if (safeContents.tagClass !== asn1.Class.UNIVERSAL || safeContents.type !== asn1.Type.SEQUENCE || safeContents.constructed !== true) { + throw new Error("PKCS#12 SafeContents expected to be a SEQUENCE OF SafeBag."); + } + var res = []; + for (var i = 0; i < safeContents.value.length; i++) { + var safeBag = safeContents.value[i]; + var capture = {}; + var errors = []; + if (!asn1.validate(safeBag, safeBagValidator, capture, errors)) { + var error = new Error("Cannot read SafeBag."); + error.errors = errors; + throw error; + } + var bag = { + type: asn1.derToOid(capture.bagId), + attributes: _decodeBagAttributes(capture.bagAttributes) + }; + res.push(bag); + var validator, decoder; + var bagAsn1 = capture.bagValue.value[0]; + switch (bag.type) { + case pki2.oids.pkcs8ShroudedKeyBag: + bagAsn1 = pki2.decryptPrivateKeyInfo(bagAsn1, password); + if (bagAsn1 === null) { + throw new Error("Unable to decrypt PKCS#8 ShroudedKeyBag, wrong password?"); + } + case pki2.oids.keyBag: + try { + bag.key = pki2.privateKeyFromAsn1(bagAsn1); + } catch (e) { + bag.key = null; + bag.asn1 = bagAsn1; + } + continue; + case pki2.oids.certBag: + validator = certBagValidator; + decoder = function() { + if (asn1.derToOid(capture.certId) !== pki2.oids.x509Certificate) { + var error2 = new Error("Unsupported certificate type, only X.509 supported."); + error2.oid = asn1.derToOid(capture.certId); + throw error2; + } + var certAsn1 = asn1.fromDer(capture.cert, strict); + try { + bag.cert = pki2.certificateFromAsn1(certAsn1, true); + } catch (e) { + bag.cert = null; + bag.asn1 = certAsn1; + } + }; + break; + default: + var error = new Error("Unsupported PKCS#12 SafeBag type."); + error.oid = bag.type; + throw error; + } + if (validator !== void 0 && !asn1.validate(bagAsn1, validator, capture, errors)) { + var error = new Error("Cannot read PKCS#12 " + validator.name); + error.errors = errors; + throw error; + } + decoder(); + } + return res; + } + function _decodeBagAttributes(attributes) { + var decodedAttrs = {}; + if (attributes !== void 0) { + for (var i = 0; i < attributes.length; ++i) { + var capture = {}; + var errors = []; + if (!asn1.validate(attributes[i], attributeValidator, capture, errors)) { + var error = new Error("Cannot read PKCS#12 BagAttribute."); + error.errors = errors; + throw error; + } + var oid = asn1.derToOid(capture.oid); + if (pki2.oids[oid] === void 0) { + continue; + } + decodedAttrs[pki2.oids[oid]] = []; + for (var j = 0; j < capture.values.length; ++j) { + decodedAttrs[pki2.oids[oid]].push(capture.values[j].value); + } + } + } + return decodedAttrs; + } + p12.toPkcs12Asn1 = function(key, cert, password, options) { + options = options || {}; + options.saltSize = options.saltSize || 8; + options.count = options.count || 2048; + options.algorithm = options.algorithm || options.encAlgorithm || "aes128"; + if (!("useMac" in options)) { + options.useMac = true; + } + if (!("localKeyId" in options)) { + options.localKeyId = null; + } + if (!("generateLocalKeyId" in options)) { + options.generateLocalKeyId = true; + } + var localKeyId = options.localKeyId; + var bagAttrs; + if (localKeyId !== null) { + localKeyId = forge3.util.hexToBytes(localKeyId); + } else if (options.generateLocalKeyId) { + if (cert) { + var pairedCert = forge3.util.isArray(cert) ? cert[0] : cert; + if (typeof pairedCert === "string") { + pairedCert = pki2.certificateFromPem(pairedCert); + } + var sha1 = forge3.md.sha1.create(); + sha1.update(asn1.toDer(pki2.certificateToAsn1(pairedCert)).getBytes()); + localKeyId = sha1.digest().getBytes(); + } else { + localKeyId = forge3.random.getBytes(20); + } + } + var attrs = []; + if (localKeyId !== null) { + attrs.push(asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(pki2.oids.localKeyId).getBytes()), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, localKeyId) + ]) + ])); + } + if ("friendlyName" in options) { + attrs.push(asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(pki2.oids.friendlyName).getBytes()), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.BMPSTRING, false, options.friendlyName) + ]) + ])); + } + if (attrs.length > 0) { + bagAttrs = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, attrs); + } + var contents = []; + var chain = []; + if (cert !== null) { + if (forge3.util.isArray(cert)) { + chain = cert; + } else { + chain = [cert]; + } + } + var certSafeBags = []; + for (var i = 0; i < chain.length; ++i) { + cert = chain[i]; + if (typeof cert === "string") { + cert = pki2.certificateFromPem(cert); + } + var certBagAttrs = i === 0 ? bagAttrs : void 0; + var certAsn1 = pki2.certificateToAsn1(cert); + var certSafeBag = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(pki2.oids.certBag).getBytes()), + asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(pki2.oids.x509Certificate).getBytes()), + asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, asn1.toDer(certAsn1).getBytes()) + ]) + ]) + ]), + certBagAttrs + ]); + certSafeBags.push(certSafeBag); + } + if (certSafeBags.length > 0) { + var certSafeContents = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, certSafeBags); + var certCI = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(pki2.oids.data).getBytes()), + asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, asn1.toDer(certSafeContents).getBytes()) + ]) + ]); + contents.push(certCI); + } + var keyBag = null; + if (key !== null) { + var pkAsn1 = pki2.wrapRsaPrivateKey(pki2.privateKeyToAsn1(key)); + if (password === null) { + keyBag = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(pki2.oids.keyBag).getBytes()), + asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [ + pkAsn1 + ]), + bagAttrs + ]); + } else { + keyBag = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(pki2.oids.pkcs8ShroudedKeyBag).getBytes()), + asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [ + pki2.encryptPrivateKeyInfo(pkAsn1, password, options) + ]), + bagAttrs + ]); + } + var keySafeContents = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [keyBag]); + var keyCI = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(pki2.oids.data).getBytes()), + asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, asn1.toDer(keySafeContents).getBytes()) + ]) + ]); + contents.push(keyCI); + } + var safe = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, contents); + var macData; + if (options.useMac) { + var sha1 = forge3.md.sha1.create(); + var macSalt = new forge3.util.ByteBuffer(forge3.random.getBytes(options.saltSize)); + var count = options.count; + var key = p12.generateKey(password, macSalt, 3, count, 20); + var mac = forge3.hmac.create(); + mac.start(sha1, key); + mac.update(asn1.toDer(safe).getBytes()); + var macValue = mac.getMac(); + macData = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(pki2.oids.sha1).getBytes()), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, "") + ]), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, macValue.getBytes()) + ]), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, macSalt.getBytes()), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, asn1.integerToDer(count).getBytes()) + ]); + } + return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, asn1.integerToDer(3).getBytes()), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(pki2.oids.data).getBytes()), + asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, asn1.toDer(safe).getBytes()) + ]) + ]), + macData + ]); + }; + p12.generateKey = forge3.pbe.generatePkcs12Key; + } +}); + +// node_modules/node-forge/lib/pki.js +var require_pki = __commonJS({ + "node_modules/node-forge/lib/pki.js"(exports2, module2) { + var forge3 = require_forge(); + require_asn1(); + require_oids(); + require_pbe(); + require_pem(); + require_pbkdf2(); + require_pkcs12(); + require_pss(); + require_rsa(); + require_util(); + require_x509(); + var asn1 = forge3.asn1; + var pki2 = module2.exports = forge3.pki = forge3.pki || {}; + pki2.pemToDer = function(pem) { + var msg = forge3.pem.decode(pem)[0]; + if (msg.procType && msg.procType.type === "ENCRYPTED") { + throw new Error("Could not convert PEM to DER; PEM is encrypted."); + } + return forge3.util.createBuffer(msg.body); + }; + pki2.privateKeyFromPem = function(pem) { + var msg = forge3.pem.decode(pem)[0]; + if (msg.type !== "PRIVATE KEY" && msg.type !== "RSA PRIVATE KEY") { + var error = new Error('Could not convert private key from PEM; PEM header type is not "PRIVATE KEY" or "RSA PRIVATE KEY".'); + error.headerType = msg.type; + throw error; + } + if (msg.procType && msg.procType.type === "ENCRYPTED") { + throw new Error("Could not convert private key from PEM; PEM is encrypted."); + } + var obj = asn1.fromDer(msg.body); + return pki2.privateKeyFromAsn1(obj); + }; + pki2.privateKeyToPem = function(key, maxline) { + var msg = { + type: "RSA PRIVATE KEY", + body: asn1.toDer(pki2.privateKeyToAsn1(key)).getBytes() + }; + return forge3.pem.encode(msg, { maxline }); + }; + pki2.privateKeyInfoToPem = function(pki3, maxline) { + var msg = { + type: "PRIVATE KEY", + body: asn1.toDer(pki3).getBytes() + }; + return forge3.pem.encode(msg, { maxline }); + }; + } +}); + +// node_modules/node-forge/lib/tls.js +var require_tls = __commonJS({ + "node_modules/node-forge/lib/tls.js"(exports2, module2) { + var forge3 = require_forge(); + require_asn1(); + require_hmac(); + require_md5(); + require_pem(); + require_pki(); + require_random(); + require_sha1(); + require_util(); + var prf_TLS1 = function(secret, label, seed, length) { + var rval = forge3.util.createBuffer(); + var idx = secret.length >> 1; + var slen = idx + (secret.length & 1); + var s1 = secret.substr(0, slen); + var s2 = secret.substr(idx, slen); + var ai = forge3.util.createBuffer(); + var hmac = forge3.hmac.create(); + seed = label + seed; + var md5itr = Math.ceil(length / 16); + var sha1itr = Math.ceil(length / 20); + hmac.start("MD5", s1); + var md5bytes = forge3.util.createBuffer(); + ai.putBytes(seed); + for (var i = 0; i < md5itr; ++i) { + hmac.start(null, null); + hmac.update(ai.getBytes()); + ai.putBuffer(hmac.digest()); + hmac.start(null, null); + hmac.update(ai.bytes() + seed); + md5bytes.putBuffer(hmac.digest()); + } + hmac.start("SHA1", s2); + var sha1bytes = forge3.util.createBuffer(); + ai.clear(); + ai.putBytes(seed); + for (var i = 0; i < sha1itr; ++i) { + hmac.start(null, null); + hmac.update(ai.getBytes()); + ai.putBuffer(hmac.digest()); + hmac.start(null, null); + hmac.update(ai.bytes() + seed); + sha1bytes.putBuffer(hmac.digest()); + } + rval.putBytes(forge3.util.xorBytes(md5bytes.getBytes(), sha1bytes.getBytes(), length)); + return rval; + }; + var hmac_sha1 = function(key2, seqNum, record) { + var hmac = forge3.hmac.create(); + hmac.start("SHA1", key2); + var b = forge3.util.createBuffer(); + b.putInt32(seqNum[0]); + b.putInt32(seqNum[1]); + b.putByte(record.type); + b.putByte(record.version.major); + b.putByte(record.version.minor); + b.putInt16(record.length); + b.putBytes(record.fragment.bytes()); + hmac.update(b.getBytes()); + return hmac.digest().getBytes(); + }; + var deflate = function(c, record, s) { + var rval = false; + try { + var bytes = c.deflate(record.fragment.getBytes()); + record.fragment = forge3.util.createBuffer(bytes); + record.length = bytes.length; + rval = true; + } catch (ex) { + } + return rval; + }; + var inflate = function(c, record, s) { + var rval = false; + try { + var bytes = c.inflate(record.fragment.getBytes()); + record.fragment = forge3.util.createBuffer(bytes); + record.length = bytes.length; + rval = true; + } catch (ex) { + } + return rval; + }; + var readVector = function(b, lenBytes) { + var len = 0; + switch (lenBytes) { + case 1: + len = b.getByte(); + break; + case 2: + len = b.getInt16(); + break; + case 3: + len = b.getInt24(); + break; + case 4: + len = b.getInt32(); + break; + } + return forge3.util.createBuffer(b.getBytes(len)); + }; + var writeVector = function(b, lenBytes, v) { + b.putInt(v.length(), lenBytes << 3); + b.putBuffer(v); + }; + var tls = {}; + tls.Versions = { + TLS_1_0: { major: 3, minor: 1 }, + TLS_1_1: { major: 3, minor: 2 }, + TLS_1_2: { major: 3, minor: 3 } + }; + tls.SupportedVersions = [ + tls.Versions.TLS_1_1, + tls.Versions.TLS_1_0 + ]; + tls.Version = tls.SupportedVersions[0]; + tls.MaxFragment = 16384 - 1024; + tls.ConnectionEnd = { + server: 0, + client: 1 + }; + tls.PRFAlgorithm = { + tls_prf_sha256: 0 + }; + tls.BulkCipherAlgorithm = { + none: null, + rc4: 0, + des3: 1, + aes: 2 + }; + tls.CipherType = { + stream: 0, + block: 1, + aead: 2 + }; + tls.MACAlgorithm = { + none: null, + hmac_md5: 0, + hmac_sha1: 1, + hmac_sha256: 2, + hmac_sha384: 3, + hmac_sha512: 4 + }; + tls.CompressionMethod = { + none: 0, + deflate: 1 + }; + tls.ContentType = { + change_cipher_spec: 20, + alert: 21, + handshake: 22, + application_data: 23, + heartbeat: 24 + }; + tls.HandshakeType = { + hello_request: 0, + client_hello: 1, + server_hello: 2, + certificate: 11, + server_key_exchange: 12, + certificate_request: 13, + server_hello_done: 14, + certificate_verify: 15, + client_key_exchange: 16, + finished: 20 + }; + tls.Alert = {}; + tls.Alert.Level = { + warning: 1, + fatal: 2 + }; + tls.Alert.Description = { + close_notify: 0, + unexpected_message: 10, + bad_record_mac: 20, + decryption_failed: 21, + record_overflow: 22, + decompression_failure: 30, + handshake_failure: 40, + bad_certificate: 42, + unsupported_certificate: 43, + certificate_revoked: 44, + certificate_expired: 45, + certificate_unknown: 46, + illegal_parameter: 47, + unknown_ca: 48, + access_denied: 49, + decode_error: 50, + decrypt_error: 51, + export_restriction: 60, + protocol_version: 70, + insufficient_security: 71, + internal_error: 80, + user_canceled: 90, + no_renegotiation: 100 + }; + tls.HeartbeatMessageType = { + heartbeat_request: 1, + heartbeat_response: 2 + }; + tls.CipherSuites = {}; + tls.getCipherSuite = function(twoBytes) { + var rval = null; + for (var key2 in tls.CipherSuites) { + var cs = tls.CipherSuites[key2]; + if (cs.id[0] === twoBytes.charCodeAt(0) && cs.id[1] === twoBytes.charCodeAt(1)) { + rval = cs; + break; + } + } + return rval; + }; + tls.handleUnexpected = function(c, record) { + var ignore = !c.open && c.entity === tls.ConnectionEnd.client; + if (!ignore) { + c.error(c, { + message: "Unexpected message. Received TLS record out of order.", + send: true, + alert: { + level: tls.Alert.Level.fatal, + description: tls.Alert.Description.unexpected_message + } + }); + } + }; + tls.handleHelloRequest = function(c, record, length) { + if (!c.handshaking && c.handshakes > 0) { + tls.queue(c, tls.createAlert(c, { + level: tls.Alert.Level.warning, + description: tls.Alert.Description.no_renegotiation + })); + tls.flush(c); + } + c.process(); + }; + tls.parseHelloMessage = function(c, record, length) { + var msg = null; + var client = c.entity === tls.ConnectionEnd.client; + if (length < 38) { + c.error(c, { + message: client ? "Invalid ServerHello message. Message too short." : "Invalid ClientHello message. Message too short.", + send: true, + alert: { + level: tls.Alert.Level.fatal, + description: tls.Alert.Description.illegal_parameter + } + }); + } else { + var b = record.fragment; + var remaining = b.length(); + msg = { + version: { + major: b.getByte(), + minor: b.getByte() + }, + random: forge3.util.createBuffer(b.getBytes(32)), + session_id: readVector(b, 1), + extensions: [] + }; + if (client) { + msg.cipher_suite = b.getBytes(2); + msg.compression_method = b.getByte(); + } else { + msg.cipher_suites = readVector(b, 2); + msg.compression_methods = readVector(b, 1); + } + remaining = length - (remaining - b.length()); + if (remaining > 0) { + var exts = readVector(b, 2); + while (exts.length() > 0) { + msg.extensions.push({ + type: [exts.getByte(), exts.getByte()], + data: readVector(exts, 2) + }); + } + if (!client) { + for (var i = 0; i < msg.extensions.length; ++i) { + var ext = msg.extensions[i]; + if (ext.type[0] === 0 && ext.type[1] === 0) { + var snl = readVector(ext.data, 2); + while (snl.length() > 0) { + var snType = snl.getByte(); + if (snType !== 0) { + break; + } + c.session.extensions.server_name.serverNameList.push(readVector(snl, 2).getBytes()); + } + } + } + } + } + if (c.session.version) { + if (msg.version.major !== c.session.version.major || msg.version.minor !== c.session.version.minor) { + return c.error(c, { + message: "TLS version change is disallowed during renegotiation.", + send: true, + alert: { + level: tls.Alert.Level.fatal, + description: tls.Alert.Description.protocol_version + } + }); + } + } + if (client) { + c.session.cipherSuite = tls.getCipherSuite(msg.cipher_suite); + } else { + var tmp = forge3.util.createBuffer(msg.cipher_suites.bytes()); + while (tmp.length() > 0) { + c.session.cipherSuite = tls.getCipherSuite(tmp.getBytes(2)); + if (c.session.cipherSuite !== null) { + break; + } + } + } + if (c.session.cipherSuite === null) { + return c.error(c, { + message: "No cipher suites in common.", + send: true, + alert: { + level: tls.Alert.Level.fatal, + description: tls.Alert.Description.handshake_failure + }, + cipherSuite: forge3.util.bytesToHex(msg.cipher_suite) + }); + } + if (client) { + c.session.compressionMethod = msg.compression_method; + } else { + c.session.compressionMethod = tls.CompressionMethod.none; + } + } + return msg; + }; + tls.createSecurityParameters = function(c, msg) { + var client = c.entity === tls.ConnectionEnd.client; + var msgRandom = msg.random.bytes(); + var cRandom = client ? c.session.sp.client_random : msgRandom; + var sRandom = client ? msgRandom : tls.createRandom().getBytes(); + c.session.sp = { + entity: c.entity, + prf_algorithm: tls.PRFAlgorithm.tls_prf_sha256, + bulk_cipher_algorithm: null, + cipher_type: null, + enc_key_length: null, + block_length: null, + fixed_iv_length: null, + record_iv_length: null, + mac_algorithm: null, + mac_length: null, + mac_key_length: null, + compression_algorithm: c.session.compressionMethod, + pre_master_secret: null, + master_secret: null, + client_random: cRandom, + server_random: sRandom + }; + }; + tls.handleServerHello = function(c, record, length) { + var msg = tls.parseHelloMessage(c, record, length); + if (c.fail) { + return; + } + if (msg.version.minor <= c.version.minor) { + c.version.minor = msg.version.minor; + } else { + return c.error(c, { + message: "Incompatible TLS version.", + send: true, + alert: { + level: tls.Alert.Level.fatal, + description: tls.Alert.Description.protocol_version + } + }); + } + c.session.version = c.version; + var sessionId = msg.session_id.bytes(); + if (sessionId.length > 0 && sessionId === c.session.id) { + c.expect = SCC; + c.session.resuming = true; + c.session.sp.server_random = msg.random.bytes(); + } else { + c.expect = SCE; + c.session.resuming = false; + tls.createSecurityParameters(c, msg); + } + c.session.id = sessionId; + c.process(); + }; + tls.handleClientHello = function(c, record, length) { + var msg = tls.parseHelloMessage(c, record, length); + if (c.fail) { + return; + } + var sessionId = msg.session_id.bytes(); + var session = null; + if (c.sessionCache) { + session = c.sessionCache.getSession(sessionId); + if (session === null) { + sessionId = ""; + } else if (session.version.major !== msg.version.major || session.version.minor > msg.version.minor) { + session = null; + sessionId = ""; + } + } + if (sessionId.length === 0) { + sessionId = forge3.random.getBytes(32); + } + c.session.id = sessionId; + c.session.clientHelloVersion = msg.version; + c.session.sp = {}; + if (session) { + c.version = c.session.version = session.version; + c.session.sp = session.sp; + } else { + var version; + for (var i = 1; i < tls.SupportedVersions.length; ++i) { + version = tls.SupportedVersions[i]; + if (version.minor <= msg.version.minor) { + break; + } + } + c.version = { major: version.major, minor: version.minor }; + c.session.version = c.version; + } + if (session !== null) { + c.expect = CCC; + c.session.resuming = true; + c.session.sp.client_random = msg.random.bytes(); + } else { + c.expect = c.verifyClient !== false ? CCE : CKE; + c.session.resuming = false; + tls.createSecurityParameters(c, msg); + } + c.open = true; + tls.queue(c, tls.createRecord(c, { + type: tls.ContentType.handshake, + data: tls.createServerHello(c) + })); + if (c.session.resuming) { + tls.queue(c, tls.createRecord(c, { + type: tls.ContentType.change_cipher_spec, + data: tls.createChangeCipherSpec() + })); + c.state.pending = tls.createConnectionState(c); + c.state.current.write = c.state.pending.write; + tls.queue(c, tls.createRecord(c, { + type: tls.ContentType.handshake, + data: tls.createFinished(c) + })); + } else { + tls.queue(c, tls.createRecord(c, { + type: tls.ContentType.handshake, + data: tls.createCertificate(c) + })); + if (!c.fail) { + tls.queue(c, tls.createRecord(c, { + type: tls.ContentType.handshake, + data: tls.createServerKeyExchange(c) + })); + if (c.verifyClient !== false) { + tls.queue(c, tls.createRecord(c, { + type: tls.ContentType.handshake, + data: tls.createCertificateRequest(c) + })); + } + tls.queue(c, tls.createRecord(c, { + type: tls.ContentType.handshake, + data: tls.createServerHelloDone(c) + })); + } + } + tls.flush(c); + c.process(); + }; + tls.handleCertificate = function(c, record, length) { + if (length < 3) { + return c.error(c, { + message: "Invalid Certificate message. Message too short.", + send: true, + alert: { + level: tls.Alert.Level.fatal, + description: tls.Alert.Description.illegal_parameter + } + }); + } + var b = record.fragment; + var msg = { + certificate_list: readVector(b, 3) + }; + var cert, asn1; + var certs = []; + try { + while (msg.certificate_list.length() > 0) { + cert = readVector(msg.certificate_list, 3); + asn1 = forge3.asn1.fromDer(cert); + cert = forge3.pki.certificateFromAsn1(asn1, true); + certs.push(cert); + } + } catch (ex) { + return c.error(c, { + message: "Could not parse certificate list.", + cause: ex, + send: true, + alert: { + level: tls.Alert.Level.fatal, + description: tls.Alert.Description.bad_certificate + } + }); + } + var client = c.entity === tls.ConnectionEnd.client; + if ((client || c.verifyClient === true) && certs.length === 0) { + c.error(c, { + message: client ? "No server certificate provided." : "No client certificate provided.", + send: true, + alert: { + level: tls.Alert.Level.fatal, + description: tls.Alert.Description.illegal_parameter + } + }); + } else if (certs.length === 0) { + c.expect = client ? SKE : CKE; + } else { + if (client) { + c.session.serverCertificate = certs[0]; + } else { + c.session.clientCertificate = certs[0]; + } + if (tls.verifyCertificateChain(c, certs)) { + c.expect = client ? SKE : CKE; + } + } + c.process(); + }; + tls.handleServerKeyExchange = function(c, record, length) { + if (length > 0) { + return c.error(c, { + message: "Invalid key parameters. Only RSA is supported.", + send: true, + alert: { + level: tls.Alert.Level.fatal, + description: tls.Alert.Description.unsupported_certificate + } + }); + } + c.expect = SCR; + c.process(); + }; + tls.handleClientKeyExchange = function(c, record, length) { + if (length < 48) { + return c.error(c, { + message: "Invalid key parameters. Only RSA is supported.", + send: true, + alert: { + level: tls.Alert.Level.fatal, + description: tls.Alert.Description.unsupported_certificate + } + }); + } + var b = record.fragment; + var msg = { + enc_pre_master_secret: readVector(b, 2).getBytes() + }; + var privateKey = null; + if (c.getPrivateKey) { + try { + privateKey = c.getPrivateKey(c, c.session.serverCertificate); + privateKey = forge3.pki.privateKeyFromPem(privateKey); + } catch (ex) { + c.error(c, { + message: "Could not get private key.", + cause: ex, + send: true, + alert: { + level: tls.Alert.Level.fatal, + description: tls.Alert.Description.internal_error + } + }); + } + } + if (privateKey === null) { + return c.error(c, { + message: "No private key set.", + send: true, + alert: { + level: tls.Alert.Level.fatal, + description: tls.Alert.Description.internal_error + } + }); + } + try { + var sp = c.session.sp; + sp.pre_master_secret = privateKey.decrypt(msg.enc_pre_master_secret); + var version = c.session.clientHelloVersion; + if (version.major !== sp.pre_master_secret.charCodeAt(0) || version.minor !== sp.pre_master_secret.charCodeAt(1)) { + throw new Error("TLS version rollback attack detected."); + } + } catch (ex) { + sp.pre_master_secret = forge3.random.getBytes(48); + } + c.expect = CCC; + if (c.session.clientCertificate !== null) { + c.expect = CCV; + } + c.process(); + }; + tls.handleCertificateRequest = function(c, record, length) { + if (length < 3) { + return c.error(c, { + message: "Invalid CertificateRequest. Message too short.", + send: true, + alert: { + level: tls.Alert.Level.fatal, + description: tls.Alert.Description.illegal_parameter + } + }); + } + var b = record.fragment; + var msg = { + certificate_types: readVector(b, 1), + certificate_authorities: readVector(b, 2) + }; + c.session.certificateRequest = msg; + c.expect = SHD; + c.process(); + }; + tls.handleCertificateVerify = function(c, record, length) { + if (length < 2) { + return c.error(c, { + message: "Invalid CertificateVerify. Message too short.", + send: true, + alert: { + level: tls.Alert.Level.fatal, + description: tls.Alert.Description.illegal_parameter + } + }); + } + var b = record.fragment; + b.read -= 4; + var msgBytes = b.bytes(); + b.read += 4; + var msg = { + signature: readVector(b, 2).getBytes() + }; + var verify = forge3.util.createBuffer(); + verify.putBuffer(c.session.md5.digest()); + verify.putBuffer(c.session.sha1.digest()); + verify = verify.getBytes(); + try { + var cert = c.session.clientCertificate; + if (!cert.publicKey.verify(verify, msg.signature, "NONE")) { + throw new Error("CertificateVerify signature does not match."); + } + c.session.md5.update(msgBytes); + c.session.sha1.update(msgBytes); + } catch (ex) { + return c.error(c, { + message: "Bad signature in CertificateVerify.", + send: true, + alert: { + level: tls.Alert.Level.fatal, + description: tls.Alert.Description.handshake_failure + } + }); + } + c.expect = CCC; + c.process(); + }; + tls.handleServerHelloDone = function(c, record, length) { + if (length > 0) { + return c.error(c, { + message: "Invalid ServerHelloDone message. Invalid length.", + send: true, + alert: { + level: tls.Alert.Level.fatal, + description: tls.Alert.Description.record_overflow + } + }); + } + if (c.serverCertificate === null) { + var error = { + message: "No server certificate provided. Not enough security.", + send: true, + alert: { + level: tls.Alert.Level.fatal, + description: tls.Alert.Description.insufficient_security + } + }; + var depth = 0; + var ret = c.verify(c, error.alert.description, depth, []); + if (ret !== true) { + if (ret || ret === 0) { + if (typeof ret === "object" && !forge3.util.isArray(ret)) { + if (ret.message) { + error.message = ret.message; + } + if (ret.alert) { + error.alert.description = ret.alert; + } + } else if (typeof ret === "number") { + error.alert.description = ret; + } + } + return c.error(c, error); + } + } + if (c.session.certificateRequest !== null) { + record = tls.createRecord(c, { + type: tls.ContentType.handshake, + data: tls.createCertificate(c) + }); + tls.queue(c, record); + } + record = tls.createRecord(c, { + type: tls.ContentType.handshake, + data: tls.createClientKeyExchange(c) + }); + tls.queue(c, record); + c.expect = SER; + var callback = function(c2, signature) { + if (c2.session.certificateRequest !== null && c2.session.clientCertificate !== null) { + tls.queue(c2, tls.createRecord(c2, { + type: tls.ContentType.handshake, + data: tls.createCertificateVerify(c2, signature) + })); + } + tls.queue(c2, tls.createRecord(c2, { + type: tls.ContentType.change_cipher_spec, + data: tls.createChangeCipherSpec() + })); + c2.state.pending = tls.createConnectionState(c2); + c2.state.current.write = c2.state.pending.write; + tls.queue(c2, tls.createRecord(c2, { + type: tls.ContentType.handshake, + data: tls.createFinished(c2) + })); + c2.expect = SCC; + tls.flush(c2); + c2.process(); + }; + if (c.session.certificateRequest === null || c.session.clientCertificate === null) { + return callback(c, null); + } + tls.getClientSignature(c, callback); + }; + tls.handleChangeCipherSpec = function(c, record) { + if (record.fragment.getByte() !== 1) { + return c.error(c, { + message: "Invalid ChangeCipherSpec message received.", + send: true, + alert: { + level: tls.Alert.Level.fatal, + description: tls.Alert.Description.illegal_parameter + } + }); + } + var client = c.entity === tls.ConnectionEnd.client; + if (c.session.resuming && client || !c.session.resuming && !client) { + c.state.pending = tls.createConnectionState(c); + } + c.state.current.read = c.state.pending.read; + if (!c.session.resuming && client || c.session.resuming && !client) { + c.state.pending = null; + } + c.expect = client ? SFI : CFI; + c.process(); + }; + tls.handleFinished = function(c, record, length) { + var b = record.fragment; + b.read -= 4; + var msgBytes = b.bytes(); + b.read += 4; + var vd = record.fragment.getBytes(); + b = forge3.util.createBuffer(); + b.putBuffer(c.session.md5.digest()); + b.putBuffer(c.session.sha1.digest()); + var client = c.entity === tls.ConnectionEnd.client; + var label = client ? "server finished" : "client finished"; + var sp = c.session.sp; + var vdl = 12; + var prf = prf_TLS1; + b = prf(sp.master_secret, label, b.getBytes(), vdl); + if (b.getBytes() !== vd) { + return c.error(c, { + message: "Invalid verify_data in Finished message.", + send: true, + alert: { + level: tls.Alert.Level.fatal, + description: tls.Alert.Description.decrypt_error + } + }); + } + c.session.md5.update(msgBytes); + c.session.sha1.update(msgBytes); + if (c.session.resuming && client || !c.session.resuming && !client) { + tls.queue(c, tls.createRecord(c, { + type: tls.ContentType.change_cipher_spec, + data: tls.createChangeCipherSpec() + })); + c.state.current.write = c.state.pending.write; + c.state.pending = null; + tls.queue(c, tls.createRecord(c, { + type: tls.ContentType.handshake, + data: tls.createFinished(c) + })); + } + c.expect = client ? SAD : CAD; + c.handshaking = false; + ++c.handshakes; + c.peerCertificate = client ? c.session.serverCertificate : c.session.clientCertificate; + tls.flush(c); + c.isConnected = true; + c.connected(c); + c.process(); + }; + tls.handleAlert = function(c, record) { + var b = record.fragment; + var alert = { + level: b.getByte(), + description: b.getByte() + }; + var msg; + switch (alert.description) { + case tls.Alert.Description.close_notify: + msg = "Connection closed."; + break; + case tls.Alert.Description.unexpected_message: + msg = "Unexpected message."; + break; + case tls.Alert.Description.bad_record_mac: + msg = "Bad record MAC."; + break; + case tls.Alert.Description.decryption_failed: + msg = "Decryption failed."; + break; + case tls.Alert.Description.record_overflow: + msg = "Record overflow."; + break; + case tls.Alert.Description.decompression_failure: + msg = "Decompression failed."; + break; + case tls.Alert.Description.handshake_failure: + msg = "Handshake failure."; + break; + case tls.Alert.Description.bad_certificate: + msg = "Bad certificate."; + break; + case tls.Alert.Description.unsupported_certificate: + msg = "Unsupported certificate."; + break; + case tls.Alert.Description.certificate_revoked: + msg = "Certificate revoked."; + break; + case tls.Alert.Description.certificate_expired: + msg = "Certificate expired."; + break; + case tls.Alert.Description.certificate_unknown: + msg = "Certificate unknown."; + break; + case tls.Alert.Description.illegal_parameter: + msg = "Illegal parameter."; + break; + case tls.Alert.Description.unknown_ca: + msg = "Unknown certificate authority."; + break; + case tls.Alert.Description.access_denied: + msg = "Access denied."; + break; + case tls.Alert.Description.decode_error: + msg = "Decode error."; + break; + case tls.Alert.Description.decrypt_error: + msg = "Decrypt error."; + break; + case tls.Alert.Description.export_restriction: + msg = "Export restriction."; + break; + case tls.Alert.Description.protocol_version: + msg = "Unsupported protocol version."; + break; + case tls.Alert.Description.insufficient_security: + msg = "Insufficient security."; + break; + case tls.Alert.Description.internal_error: + msg = "Internal error."; + break; + case tls.Alert.Description.user_canceled: + msg = "User canceled."; + break; + case tls.Alert.Description.no_renegotiation: + msg = "Renegotiation not supported."; + break; + default: + msg = "Unknown error."; + break; + } + if (alert.description === tls.Alert.Description.close_notify) { + return c.close(); + } + c.error(c, { + message: msg, + send: false, + origin: c.entity === tls.ConnectionEnd.client ? "server" : "client", + alert + }); + c.process(); + }; + tls.handleHandshake = function(c, record) { + var b = record.fragment; + var type = b.getByte(); + var length = b.getInt24(); + if (length > b.length()) { + c.fragmented = record; + record.fragment = forge3.util.createBuffer(); + b.read -= 4; + return c.process(); + } + c.fragmented = null; + b.read -= 4; + var bytes = b.bytes(length + 4); + b.read += 4; + if (type in hsTable[c.entity][c.expect]) { + if (c.entity === tls.ConnectionEnd.server && !c.open && !c.fail) { + c.handshaking = true; + c.session = { + version: null, + extensions: { + server_name: { + serverNameList: [] + } + }, + cipherSuite: null, + compressionMethod: null, + serverCertificate: null, + clientCertificate: null, + md5: forge3.md.md5.create(), + sha1: forge3.md.sha1.create() + }; + } + if (type !== tls.HandshakeType.hello_request && type !== tls.HandshakeType.certificate_verify && type !== tls.HandshakeType.finished) { + c.session.md5.update(bytes); + c.session.sha1.update(bytes); + } + hsTable[c.entity][c.expect][type](c, record, length); + } else { + tls.handleUnexpected(c, record); + } + }; + tls.handleApplicationData = function(c, record) { + c.data.putBuffer(record.fragment); + c.dataReady(c); + c.process(); + }; + tls.handleHeartbeat = function(c, record) { + var b = record.fragment; + var type = b.getByte(); + var length = b.getInt16(); + var payload = b.getBytes(length); + if (type === tls.HeartbeatMessageType.heartbeat_request) { + if (c.handshaking || length > payload.length) { + return c.process(); + } + tls.queue(c, tls.createRecord(c, { + type: tls.ContentType.heartbeat, + data: tls.createHeartbeat(tls.HeartbeatMessageType.heartbeat_response, payload) + })); + tls.flush(c); + } else if (type === tls.HeartbeatMessageType.heartbeat_response) { + if (payload !== c.expectedHeartbeatPayload) { + return c.process(); + } + if (c.heartbeatReceived) { + c.heartbeatReceived(c, forge3.util.createBuffer(payload)); + } + } + c.process(); + }; + var SHE = 0; + var SCE = 1; + var SKE = 2; + var SCR = 3; + var SHD = 4; + var SCC = 5; + var SFI = 6; + var SAD = 7; + var SER = 8; + var CHE = 0; + var CCE = 1; + var CKE = 2; + var CCV = 3; + var CCC = 4; + var CFI = 5; + var CAD = 6; + var __ = tls.handleUnexpected; + var R0 = tls.handleChangeCipherSpec; + var R1 = tls.handleAlert; + var R2 = tls.handleHandshake; + var R3 = tls.handleApplicationData; + var R4 = tls.handleHeartbeat; + var ctTable = []; + ctTable[tls.ConnectionEnd.client] = [ + [__, R1, R2, __, R4], + [__, R1, R2, __, R4], + [__, R1, R2, __, R4], + [__, R1, R2, __, R4], + [__, R1, R2, __, R4], + [R0, R1, __, __, R4], + [__, R1, R2, __, R4], + [__, R1, R2, R3, R4], + [__, R1, R2, __, R4] + ]; + ctTable[tls.ConnectionEnd.server] = [ + [__, R1, R2, __, R4], + [__, R1, R2, __, R4], + [__, R1, R2, __, R4], + [__, R1, R2, __, R4], + [R0, R1, __, __, R4], + [__, R1, R2, __, R4], + [__, R1, R2, R3, R4], + [__, R1, R2, __, R4] + ]; + var H0 = tls.handleHelloRequest; + var H1 = tls.handleServerHello; + var H2 = tls.handleCertificate; + var H3 = tls.handleServerKeyExchange; + var H4 = tls.handleCertificateRequest; + var H5 = tls.handleServerHelloDone; + var H6 = tls.handleFinished; + var hsTable = []; + hsTable[tls.ConnectionEnd.client] = [ + [__, __, H1, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __], + [H0, __, __, __, __, __, __, __, __, __, __, H2, H3, H4, H5, __, __, __, __, __, __], + [H0, __, __, __, __, __, __, __, __, __, __, __, H3, H4, H5, __, __, __, __, __, __], + [H0, __, __, __, __, __, __, __, __, __, __, __, __, H4, H5, __, __, __, __, __, __], + [H0, __, __, __, __, __, __, __, __, __, __, __, __, __, H5, __, __, __, __, __, __], + [H0, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __], + [H0, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, H6], + [H0, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __], + [H0, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __] + ]; + var H7 = tls.handleClientHello; + var H8 = tls.handleClientKeyExchange; + var H9 = tls.handleCertificateVerify; + hsTable[tls.ConnectionEnd.server] = [ + [__, H7, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __], + [__, __, __, __, __, __, __, __, __, __, __, H2, __, __, __, __, __, __, __, __, __], + [__, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, H8, __, __, __, __], + [__, __, __, __, __, __, __, __, __, __, __, __, __, __, __, H9, __, __, __, __, __], + [__, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __], + [__, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, H6], + [__, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __], + [__, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __] + ]; + tls.generateKeys = function(c, sp) { + var prf = prf_TLS1; + var random = sp.client_random + sp.server_random; + if (!c.session.resuming) { + sp.master_secret = prf(sp.pre_master_secret, "master secret", random, 48).bytes(); + sp.pre_master_secret = null; + } + random = sp.server_random + sp.client_random; + var length = 2 * sp.mac_key_length + 2 * sp.enc_key_length; + var tls10 = c.version.major === tls.Versions.TLS_1_0.major && c.version.minor === tls.Versions.TLS_1_0.minor; + if (tls10) { + length += 2 * sp.fixed_iv_length; + } + var km = prf(sp.master_secret, "key expansion", random, length); + var rval = { + client_write_MAC_key: km.getBytes(sp.mac_key_length), + server_write_MAC_key: km.getBytes(sp.mac_key_length), + client_write_key: km.getBytes(sp.enc_key_length), + server_write_key: km.getBytes(sp.enc_key_length) + }; + if (tls10) { + rval.client_write_IV = km.getBytes(sp.fixed_iv_length); + rval.server_write_IV = km.getBytes(sp.fixed_iv_length); + } + return rval; + }; + tls.createConnectionState = function(c) { + var client = c.entity === tls.ConnectionEnd.client; + var createMode = function() { + var mode = { + sequenceNumber: [0, 0], + macKey: null, + macLength: 0, + macFunction: null, + cipherState: null, + cipherFunction: function(record) { + return true; + }, + compressionState: null, + compressFunction: function(record) { + return true; + }, + updateSequenceNumber: function() { + if (mode.sequenceNumber[1] === 4294967295) { + mode.sequenceNumber[1] = 0; + ++mode.sequenceNumber[0]; + } else { + ++mode.sequenceNumber[1]; + } + } + }; + return mode; + }; + var state = { + read: createMode(), + write: createMode() + }; + state.read.update = function(c2, record) { + if (!state.read.cipherFunction(record, state.read)) { + c2.error(c2, { + message: "Could not decrypt record or bad MAC.", + send: true, + alert: { + level: tls.Alert.Level.fatal, + description: tls.Alert.Description.bad_record_mac + } + }); + } else if (!state.read.compressFunction(c2, record, state.read)) { + c2.error(c2, { + message: "Could not decompress record.", + send: true, + alert: { + level: tls.Alert.Level.fatal, + description: tls.Alert.Description.decompression_failure + } + }); + } + return !c2.fail; + }; + state.write.update = function(c2, record) { + if (!state.write.compressFunction(c2, record, state.write)) { + c2.error(c2, { + message: "Could not compress record.", + send: false, + alert: { + level: tls.Alert.Level.fatal, + description: tls.Alert.Description.internal_error + } + }); + } else if (!state.write.cipherFunction(record, state.write)) { + c2.error(c2, { + message: "Could not encrypt record.", + send: false, + alert: { + level: tls.Alert.Level.fatal, + description: tls.Alert.Description.internal_error + } + }); + } + return !c2.fail; + }; + if (c.session) { + var sp = c.session.sp; + c.session.cipherSuite.initSecurityParameters(sp); + sp.keys = tls.generateKeys(c, sp); + state.read.macKey = client ? sp.keys.server_write_MAC_key : sp.keys.client_write_MAC_key; + state.write.macKey = client ? sp.keys.client_write_MAC_key : sp.keys.server_write_MAC_key; + c.session.cipherSuite.initConnectionState(state, c, sp); + switch (sp.compression_algorithm) { + case tls.CompressionMethod.none: + break; + case tls.CompressionMethod.deflate: + state.read.compressFunction = inflate; + state.write.compressFunction = deflate; + break; + default: + throw new Error("Unsupported compression algorithm."); + } + } + return state; + }; + tls.createRandom = function() { + var d = new Date(); + var utc = +d + d.getTimezoneOffset() * 6e4; + var rval = forge3.util.createBuffer(); + rval.putInt32(utc); + rval.putBytes(forge3.random.getBytes(28)); + return rval; + }; + tls.createRecord = function(c, options) { + if (!options.data) { + return null; + } + var record = { + type: options.type, + version: { + major: c.version.major, + minor: c.version.minor + }, + length: options.data.length(), + fragment: options.data + }; + return record; + }; + tls.createAlert = function(c, alert) { + var b = forge3.util.createBuffer(); + b.putByte(alert.level); + b.putByte(alert.description); + return tls.createRecord(c, { + type: tls.ContentType.alert, + data: b + }); + }; + tls.createClientHello = function(c) { + c.session.clientHelloVersion = { + major: c.version.major, + minor: c.version.minor + }; + var cipherSuites = forge3.util.createBuffer(); + for (var i = 0; i < c.cipherSuites.length; ++i) { + var cs = c.cipherSuites[i]; + cipherSuites.putByte(cs.id[0]); + cipherSuites.putByte(cs.id[1]); + } + var cSuites = cipherSuites.length(); + var compressionMethods = forge3.util.createBuffer(); + compressionMethods.putByte(tls.CompressionMethod.none); + var cMethods = compressionMethods.length(); + var extensions = forge3.util.createBuffer(); + if (c.virtualHost) { + var ext = forge3.util.createBuffer(); + ext.putByte(0); + ext.putByte(0); + var serverName = forge3.util.createBuffer(); + serverName.putByte(0); + writeVector(serverName, 2, forge3.util.createBuffer(c.virtualHost)); + var snList = forge3.util.createBuffer(); + writeVector(snList, 2, serverName); + writeVector(ext, 2, snList); + extensions.putBuffer(ext); + } + var extLength = extensions.length(); + if (extLength > 0) { + extLength += 2; + } + var sessionId = c.session.id; + var length = sessionId.length + 1 + 2 + 4 + 28 + 2 + cSuites + 1 + cMethods + extLength; + var rval = forge3.util.createBuffer(); + rval.putByte(tls.HandshakeType.client_hello); + rval.putInt24(length); + rval.putByte(c.version.major); + rval.putByte(c.version.minor); + rval.putBytes(c.session.sp.client_random); + writeVector(rval, 1, forge3.util.createBuffer(sessionId)); + writeVector(rval, 2, cipherSuites); + writeVector(rval, 1, compressionMethods); + if (extLength > 0) { + writeVector(rval, 2, extensions); + } + return rval; + }; + tls.createServerHello = function(c) { + var sessionId = c.session.id; + var length = sessionId.length + 1 + 2 + 4 + 28 + 2 + 1; + var rval = forge3.util.createBuffer(); + rval.putByte(tls.HandshakeType.server_hello); + rval.putInt24(length); + rval.putByte(c.version.major); + rval.putByte(c.version.minor); + rval.putBytes(c.session.sp.server_random); + writeVector(rval, 1, forge3.util.createBuffer(sessionId)); + rval.putByte(c.session.cipherSuite.id[0]); + rval.putByte(c.session.cipherSuite.id[1]); + rval.putByte(c.session.compressionMethod); + return rval; + }; + tls.createCertificate = function(c) { + var client = c.entity === tls.ConnectionEnd.client; + var cert = null; + if (c.getCertificate) { + var hint; + if (client) { + hint = c.session.certificateRequest; + } else { + hint = c.session.extensions.server_name.serverNameList; + } + cert = c.getCertificate(c, hint); + } + var certList = forge3.util.createBuffer(); + if (cert !== null) { + try { + if (!forge3.util.isArray(cert)) { + cert = [cert]; + } + var asn1 = null; + for (var i = 0; i < cert.length; ++i) { + var msg = forge3.pem.decode(cert[i])[0]; + if (msg.type !== "CERTIFICATE" && msg.type !== "X509 CERTIFICATE" && msg.type !== "TRUSTED CERTIFICATE") { + var error = new Error('Could not convert certificate from PEM; PEM header type is not "CERTIFICATE", "X509 CERTIFICATE", or "TRUSTED CERTIFICATE".'); + error.headerType = msg.type; + throw error; + } + if (msg.procType && msg.procType.type === "ENCRYPTED") { + throw new Error("Could not convert certificate from PEM; PEM is encrypted."); + } + var der = forge3.util.createBuffer(msg.body); + if (asn1 === null) { + asn1 = forge3.asn1.fromDer(der.bytes(), false); + } + var certBuffer = forge3.util.createBuffer(); + writeVector(certBuffer, 3, der); + certList.putBuffer(certBuffer); + } + cert = forge3.pki.certificateFromAsn1(asn1); + if (client) { + c.session.clientCertificate = cert; + } else { + c.session.serverCertificate = cert; + } + } catch (ex) { + return c.error(c, { + message: "Could not send certificate list.", + cause: ex, + send: true, + alert: { + level: tls.Alert.Level.fatal, + description: tls.Alert.Description.bad_certificate + } + }); + } + } + var length = 3 + certList.length(); + var rval = forge3.util.createBuffer(); + rval.putByte(tls.HandshakeType.certificate); + rval.putInt24(length); + writeVector(rval, 3, certList); + return rval; + }; + tls.createClientKeyExchange = function(c) { + var b = forge3.util.createBuffer(); + b.putByte(c.session.clientHelloVersion.major); + b.putByte(c.session.clientHelloVersion.minor); + b.putBytes(forge3.random.getBytes(46)); + var sp = c.session.sp; + sp.pre_master_secret = b.getBytes(); + var key2 = c.session.serverCertificate.publicKey; + b = key2.encrypt(sp.pre_master_secret); + var length = b.length + 2; + var rval = forge3.util.createBuffer(); + rval.putByte(tls.HandshakeType.client_key_exchange); + rval.putInt24(length); + rval.putInt16(b.length); + rval.putBytes(b); + return rval; + }; + tls.createServerKeyExchange = function(c) { + var length = 0; + var rval = forge3.util.createBuffer(); + if (length > 0) { + rval.putByte(tls.HandshakeType.server_key_exchange); + rval.putInt24(length); + } + return rval; + }; + tls.getClientSignature = function(c, callback) { + var b = forge3.util.createBuffer(); + b.putBuffer(c.session.md5.digest()); + b.putBuffer(c.session.sha1.digest()); + b = b.getBytes(); + c.getSignature = c.getSignature || function(c2, b2, callback2) { + var privateKey = null; + if (c2.getPrivateKey) { + try { + privateKey = c2.getPrivateKey(c2, c2.session.clientCertificate); + privateKey = forge3.pki.privateKeyFromPem(privateKey); + } catch (ex) { + c2.error(c2, { + message: "Could not get private key.", + cause: ex, + send: true, + alert: { + level: tls.Alert.Level.fatal, + description: tls.Alert.Description.internal_error + } + }); + } + } + if (privateKey === null) { + c2.error(c2, { + message: "No private key set.", + send: true, + alert: { + level: tls.Alert.Level.fatal, + description: tls.Alert.Description.internal_error + } + }); + } else { + b2 = privateKey.sign(b2, null); + } + callback2(c2, b2); + }; + c.getSignature(c, b, callback); + }; + tls.createCertificateVerify = function(c, signature) { + var length = signature.length + 2; + var rval = forge3.util.createBuffer(); + rval.putByte(tls.HandshakeType.certificate_verify); + rval.putInt24(length); + rval.putInt16(signature.length); + rval.putBytes(signature); + return rval; + }; + tls.createCertificateRequest = function(c) { + var certTypes = forge3.util.createBuffer(); + certTypes.putByte(1); + var cAs = forge3.util.createBuffer(); + for (var key2 in c.caStore.certs) { + var cert = c.caStore.certs[key2]; + var dn = forge3.pki.distinguishedNameToAsn1(cert.subject); + var byteBuffer = forge3.asn1.toDer(dn); + cAs.putInt16(byteBuffer.length()); + cAs.putBuffer(byteBuffer); + } + var length = 1 + certTypes.length() + 2 + cAs.length(); + var rval = forge3.util.createBuffer(); + rval.putByte(tls.HandshakeType.certificate_request); + rval.putInt24(length); + writeVector(rval, 1, certTypes); + writeVector(rval, 2, cAs); + return rval; + }; + tls.createServerHelloDone = function(c) { + var rval = forge3.util.createBuffer(); + rval.putByte(tls.HandshakeType.server_hello_done); + rval.putInt24(0); + return rval; + }; + tls.createChangeCipherSpec = function() { + var rval = forge3.util.createBuffer(); + rval.putByte(1); + return rval; + }; + tls.createFinished = function(c) { + var b = forge3.util.createBuffer(); + b.putBuffer(c.session.md5.digest()); + b.putBuffer(c.session.sha1.digest()); + var client = c.entity === tls.ConnectionEnd.client; + var sp = c.session.sp; + var vdl = 12; + var prf = prf_TLS1; + var label = client ? "client finished" : "server finished"; + b = prf(sp.master_secret, label, b.getBytes(), vdl); + var rval = forge3.util.createBuffer(); + rval.putByte(tls.HandshakeType.finished); + rval.putInt24(b.length()); + rval.putBuffer(b); + return rval; + }; + tls.createHeartbeat = function(type, payload, payloadLength) { + if (typeof payloadLength === "undefined") { + payloadLength = payload.length; + } + var rval = forge3.util.createBuffer(); + rval.putByte(type); + rval.putInt16(payloadLength); + rval.putBytes(payload); + var plaintextLength = rval.length(); + var paddingLength = Math.max(16, plaintextLength - payloadLength - 3); + rval.putBytes(forge3.random.getBytes(paddingLength)); + return rval; + }; + tls.queue = function(c, record) { + if (!record) { + return; + } + if (record.fragment.length() === 0) { + if (record.type === tls.ContentType.handshake || record.type === tls.ContentType.alert || record.type === tls.ContentType.change_cipher_spec) { + return; + } + } + if (record.type === tls.ContentType.handshake) { + var bytes = record.fragment.bytes(); + c.session.md5.update(bytes); + c.session.sha1.update(bytes); + bytes = null; + } + var records; + if (record.fragment.length() <= tls.MaxFragment) { + records = [record]; + } else { + records = []; + var data = record.fragment.bytes(); + while (data.length > tls.MaxFragment) { + records.push(tls.createRecord(c, { + type: record.type, + data: forge3.util.createBuffer(data.slice(0, tls.MaxFragment)) + })); + data = data.slice(tls.MaxFragment); + } + if (data.length > 0) { + records.push(tls.createRecord(c, { + type: record.type, + data: forge3.util.createBuffer(data) + })); + } + } + for (var i = 0; i < records.length && !c.fail; ++i) { + var rec = records[i]; + var s = c.state.current.write; + if (s.update(c, rec)) { + c.records.push(rec); + } + } + }; + tls.flush = function(c) { + for (var i = 0; i < c.records.length; ++i) { + var record = c.records[i]; + c.tlsData.putByte(record.type); + c.tlsData.putByte(record.version.major); + c.tlsData.putByte(record.version.minor); + c.tlsData.putInt16(record.fragment.length()); + c.tlsData.putBuffer(c.records[i].fragment); + } + c.records = []; + return c.tlsDataReady(c); + }; + var _certErrorToAlertDesc = function(error) { + switch (error) { + case true: + return true; + case forge3.pki.certificateError.bad_certificate: + return tls.Alert.Description.bad_certificate; + case forge3.pki.certificateError.unsupported_certificate: + return tls.Alert.Description.unsupported_certificate; + case forge3.pki.certificateError.certificate_revoked: + return tls.Alert.Description.certificate_revoked; + case forge3.pki.certificateError.certificate_expired: + return tls.Alert.Description.certificate_expired; + case forge3.pki.certificateError.certificate_unknown: + return tls.Alert.Description.certificate_unknown; + case forge3.pki.certificateError.unknown_ca: + return tls.Alert.Description.unknown_ca; + default: + return tls.Alert.Description.bad_certificate; + } + }; + var _alertDescToCertError = function(desc) { + switch (desc) { + case true: + return true; + case tls.Alert.Description.bad_certificate: + return forge3.pki.certificateError.bad_certificate; + case tls.Alert.Description.unsupported_certificate: + return forge3.pki.certificateError.unsupported_certificate; + case tls.Alert.Description.certificate_revoked: + return forge3.pki.certificateError.certificate_revoked; + case tls.Alert.Description.certificate_expired: + return forge3.pki.certificateError.certificate_expired; + case tls.Alert.Description.certificate_unknown: + return forge3.pki.certificateError.certificate_unknown; + case tls.Alert.Description.unknown_ca: + return forge3.pki.certificateError.unknown_ca; + default: + return forge3.pki.certificateError.bad_certificate; + } + }; + tls.verifyCertificateChain = function(c, chain) { + try { + var options = {}; + for (var key2 in c.verifyOptions) { + options[key2] = c.verifyOptions[key2]; + } + options.verify = function(vfd, depth, chain2) { + var desc = _certErrorToAlertDesc(vfd); + var ret = c.verify(c, vfd, depth, chain2); + if (ret !== true) { + if (typeof ret === "object" && !forge3.util.isArray(ret)) { + var error = new Error("The application rejected the certificate."); + error.send = true; + error.alert = { + level: tls.Alert.Level.fatal, + description: tls.Alert.Description.bad_certificate + }; + if (ret.message) { + error.message = ret.message; + } + if (ret.alert) { + error.alert.description = ret.alert; + } + throw error; + } + if (ret !== vfd) { + ret = _alertDescToCertError(ret); + } + } + return ret; + }; + forge3.pki.verifyCertificateChain(c.caStore, chain, options); + } catch (ex) { + var err = ex; + if (typeof err !== "object" || forge3.util.isArray(err)) { + err = { + send: true, + alert: { + level: tls.Alert.Level.fatal, + description: _certErrorToAlertDesc(ex) + } + }; + } + if (!("send" in err)) { + err.send = true; + } + if (!("alert" in err)) { + err.alert = { + level: tls.Alert.Level.fatal, + description: _certErrorToAlertDesc(err.error) + }; + } + c.error(c, err); + } + return !c.fail; + }; + tls.createSessionCache = function(cache, capacity) { + var rval = null; + if (cache && cache.getSession && cache.setSession && cache.order) { + rval = cache; + } else { + rval = {}; + rval.cache = cache || {}; + rval.capacity = Math.max(capacity || 100, 1); + rval.order = []; + for (var key2 in cache) { + if (rval.order.length <= capacity) { + rval.order.push(key2); + } else { + delete cache[key2]; + } + } + rval.getSession = function(sessionId) { + var session = null; + var key3 = null; + if (sessionId) { + key3 = forge3.util.bytesToHex(sessionId); + } else if (rval.order.length > 0) { + key3 = rval.order[0]; + } + if (key3 !== null && key3 in rval.cache) { + session = rval.cache[key3]; + delete rval.cache[key3]; + for (var i in rval.order) { + if (rval.order[i] === key3) { + rval.order.splice(i, 1); + break; + } + } + } + return session; + }; + rval.setSession = function(sessionId, session) { + if (rval.order.length === rval.capacity) { + var key3 = rval.order.shift(); + delete rval.cache[key3]; + } + var key3 = forge3.util.bytesToHex(sessionId); + rval.order.push(key3); + rval.cache[key3] = session; + }; + } + return rval; + }; + tls.createConnection = function(options) { + var caStore = null; + if (options.caStore) { + if (forge3.util.isArray(options.caStore)) { + caStore = forge3.pki.createCaStore(options.caStore); + } else { + caStore = options.caStore; + } + } else { + caStore = forge3.pki.createCaStore(); + } + var cipherSuites = options.cipherSuites || null; + if (cipherSuites === null) { + cipherSuites = []; + for (var key2 in tls.CipherSuites) { + cipherSuites.push(tls.CipherSuites[key2]); + } + } + var entity = options.server || false ? tls.ConnectionEnd.server : tls.ConnectionEnd.client; + var sessionCache = options.sessionCache ? tls.createSessionCache(options.sessionCache) : null; + var c = { + version: { major: tls.Version.major, minor: tls.Version.minor }, + entity, + sessionId: options.sessionId, + caStore, + sessionCache, + cipherSuites, + connected: options.connected, + virtualHost: options.virtualHost || null, + verifyClient: options.verifyClient || false, + verify: options.verify || function(cn, vfd, dpth, cts) { + return vfd; + }, + verifyOptions: options.verifyOptions || {}, + getCertificate: options.getCertificate || null, + getPrivateKey: options.getPrivateKey || null, + getSignature: options.getSignature || null, + input: forge3.util.createBuffer(), + tlsData: forge3.util.createBuffer(), + data: forge3.util.createBuffer(), + tlsDataReady: options.tlsDataReady, + dataReady: options.dataReady, + heartbeatReceived: options.heartbeatReceived, + closed: options.closed, + error: function(c2, ex) { + ex.origin = ex.origin || (c2.entity === tls.ConnectionEnd.client ? "client" : "server"); + if (ex.send) { + tls.queue(c2, tls.createAlert(c2, ex.alert)); + tls.flush(c2); + } + var fatal = ex.fatal !== false; + if (fatal) { + c2.fail = true; + } + options.error(c2, ex); + if (fatal) { + c2.close(false); + } + }, + deflate: options.deflate || null, + inflate: options.inflate || null + }; + c.reset = function(clearFail) { + c.version = { major: tls.Version.major, minor: tls.Version.minor }; + c.record = null; + c.session = null; + c.peerCertificate = null; + c.state = { + pending: null, + current: null + }; + c.expect = c.entity === tls.ConnectionEnd.client ? SHE : CHE; + c.fragmented = null; + c.records = []; + c.open = false; + c.handshakes = 0; + c.handshaking = false; + c.isConnected = false; + c.fail = !(clearFail || typeof clearFail === "undefined"); + c.input.clear(); + c.tlsData.clear(); + c.data.clear(); + c.state.current = tls.createConnectionState(c); + }; + c.reset(); + var _update = function(c2, record) { + var aligned = record.type - tls.ContentType.change_cipher_spec; + var handlers = ctTable[c2.entity][c2.expect]; + if (aligned in handlers) { + handlers[aligned](c2, record); + } else { + tls.handleUnexpected(c2, record); + } + }; + var _readRecordHeader = function(c2) { + var rval = 0; + var b = c2.input; + var len = b.length(); + if (len < 5) { + rval = 5 - len; + } else { + c2.record = { + type: b.getByte(), + version: { + major: b.getByte(), + minor: b.getByte() + }, + length: b.getInt16(), + fragment: forge3.util.createBuffer(), + ready: false + }; + var compatibleVersion = c2.record.version.major === c2.version.major; + if (compatibleVersion && c2.session && c2.session.version) { + compatibleVersion = c2.record.version.minor === c2.version.minor; + } + if (!compatibleVersion) { + c2.error(c2, { + message: "Incompatible TLS version.", + send: true, + alert: { + level: tls.Alert.Level.fatal, + description: tls.Alert.Description.protocol_version + } + }); + } + } + return rval; + }; + var _readRecord = function(c2) { + var rval = 0; + var b = c2.input; + var len = b.length(); + if (len < c2.record.length) { + rval = c2.record.length - len; + } else { + c2.record.fragment.putBytes(b.getBytes(c2.record.length)); + b.compact(); + var s = c2.state.current.read; + if (s.update(c2, c2.record)) { + if (c2.fragmented !== null) { + if (c2.fragmented.type === c2.record.type) { + c2.fragmented.fragment.putBuffer(c2.record.fragment); + c2.record = c2.fragmented; + } else { + c2.error(c2, { + message: "Invalid fragmented record.", + send: true, + alert: { + level: tls.Alert.Level.fatal, + description: tls.Alert.Description.unexpected_message + } + }); + } + } + c2.record.ready = true; + } + } + return rval; + }; + c.handshake = function(sessionId) { + if (c.entity !== tls.ConnectionEnd.client) { + c.error(c, { + message: "Cannot initiate handshake as a server.", + fatal: false + }); + } else if (c.handshaking) { + c.error(c, { + message: "Handshake already in progress.", + fatal: false + }); + } else { + if (c.fail && !c.open && c.handshakes === 0) { + c.fail = false; + } + c.handshaking = true; + sessionId = sessionId || ""; + var session = null; + if (sessionId.length > 0) { + if (c.sessionCache) { + session = c.sessionCache.getSession(sessionId); + } + if (session === null) { + sessionId = ""; + } + } + if (sessionId.length === 0 && c.sessionCache) { + session = c.sessionCache.getSession(); + if (session !== null) { + sessionId = session.id; + } + } + c.session = { + id: sessionId, + version: null, + cipherSuite: null, + compressionMethod: null, + serverCertificate: null, + certificateRequest: null, + clientCertificate: null, + sp: {}, + md5: forge3.md.md5.create(), + sha1: forge3.md.sha1.create() + }; + if (session) { + c.version = session.version; + c.session.sp = session.sp; + } + c.session.sp.client_random = tls.createRandom().getBytes(); + c.open = true; + tls.queue(c, tls.createRecord(c, { + type: tls.ContentType.handshake, + data: tls.createClientHello(c) + })); + tls.flush(c); + } + }; + c.process = function(data) { + var rval = 0; + if (data) { + c.input.putBytes(data); + } + if (!c.fail) { + if (c.record !== null && c.record.ready && c.record.fragment.isEmpty()) { + c.record = null; + } + if (c.record === null) { + rval = _readRecordHeader(c); + } + if (!c.fail && c.record !== null && !c.record.ready) { + rval = _readRecord(c); + } + if (!c.fail && c.record !== null && c.record.ready) { + _update(c, c.record); + } + } + return rval; + }; + c.prepare = function(data) { + tls.queue(c, tls.createRecord(c, { + type: tls.ContentType.application_data, + data: forge3.util.createBuffer(data) + })); + return tls.flush(c); + }; + c.prepareHeartbeatRequest = function(payload, payloadLength) { + if (payload instanceof forge3.util.ByteBuffer) { + payload = payload.bytes(); + } + if (typeof payloadLength === "undefined") { + payloadLength = payload.length; + } + c.expectedHeartbeatPayload = payload; + tls.queue(c, tls.createRecord(c, { + type: tls.ContentType.heartbeat, + data: tls.createHeartbeat(tls.HeartbeatMessageType.heartbeat_request, payload, payloadLength) + })); + return tls.flush(c); + }; + c.close = function(clearFail) { + if (!c.fail && c.sessionCache && c.session) { + var session = { + id: c.session.id, + version: c.session.version, + sp: c.session.sp + }; + session.sp.keys = null; + c.sessionCache.setSession(session.id, session); + } + if (c.open) { + c.open = false; + c.input.clear(); + if (c.isConnected || c.handshaking) { + c.isConnected = c.handshaking = false; + tls.queue(c, tls.createAlert(c, { + level: tls.Alert.Level.warning, + description: tls.Alert.Description.close_notify + })); + tls.flush(c); + } + c.closed(c); + } + c.reset(clearFail); + }; + return c; + }; + module2.exports = forge3.tls = forge3.tls || {}; + for (key in tls) { + if (typeof tls[key] !== "function") { + forge3.tls[key] = tls[key]; + } + } + var key; + forge3.tls.prf_tls1 = prf_TLS1; + forge3.tls.hmac_sha1 = hmac_sha1; + forge3.tls.createSessionCache = tls.createSessionCache; + forge3.tls.createConnection = tls.createConnection; + } +}); + +// node_modules/node-forge/lib/aesCipherSuites.js +var require_aesCipherSuites = __commonJS({ + "node_modules/node-forge/lib/aesCipherSuites.js"(exports2, module2) { + var forge3 = require_forge(); + require_aes(); + require_tls(); + var tls = module2.exports = forge3.tls; + tls.CipherSuites["TLS_RSA_WITH_AES_128_CBC_SHA"] = { + id: [0, 47], + name: "TLS_RSA_WITH_AES_128_CBC_SHA", + initSecurityParameters: function(sp) { + sp.bulk_cipher_algorithm = tls.BulkCipherAlgorithm.aes; + sp.cipher_type = tls.CipherType.block; + sp.enc_key_length = 16; + sp.block_length = 16; + sp.fixed_iv_length = 16; + sp.record_iv_length = 16; + sp.mac_algorithm = tls.MACAlgorithm.hmac_sha1; + sp.mac_length = 20; + sp.mac_key_length = 20; + }, + initConnectionState + }; + tls.CipherSuites["TLS_RSA_WITH_AES_256_CBC_SHA"] = { + id: [0, 53], + name: "TLS_RSA_WITH_AES_256_CBC_SHA", + initSecurityParameters: function(sp) { + sp.bulk_cipher_algorithm = tls.BulkCipherAlgorithm.aes; + sp.cipher_type = tls.CipherType.block; + sp.enc_key_length = 32; + sp.block_length = 16; + sp.fixed_iv_length = 16; + sp.record_iv_length = 16; + sp.mac_algorithm = tls.MACAlgorithm.hmac_sha1; + sp.mac_length = 20; + sp.mac_key_length = 20; + }, + initConnectionState + }; + function initConnectionState(state, c, sp) { + var client = c.entity === forge3.tls.ConnectionEnd.client; + state.read.cipherState = { + init: false, + cipher: forge3.cipher.createDecipher("AES-CBC", client ? sp.keys.server_write_key : sp.keys.client_write_key), + iv: client ? sp.keys.server_write_IV : sp.keys.client_write_IV + }; + state.write.cipherState = { + init: false, + cipher: forge3.cipher.createCipher("AES-CBC", client ? sp.keys.client_write_key : sp.keys.server_write_key), + iv: client ? sp.keys.client_write_IV : sp.keys.server_write_IV + }; + state.read.cipherFunction = decrypt_aes_cbc_sha1; + state.write.cipherFunction = encrypt_aes_cbc_sha1; + state.read.macLength = state.write.macLength = sp.mac_length; + state.read.macFunction = state.write.macFunction = tls.hmac_sha1; + } + function encrypt_aes_cbc_sha1(record, s) { + var rval = false; + var mac = s.macFunction(s.macKey, s.sequenceNumber, record); + record.fragment.putBytes(mac); + s.updateSequenceNumber(); + var iv; + if (record.version.minor === tls.Versions.TLS_1_0.minor) { + iv = s.cipherState.init ? null : s.cipherState.iv; + } else { + iv = forge3.random.getBytesSync(16); + } + s.cipherState.init = true; + var cipher = s.cipherState.cipher; + cipher.start({ iv }); + if (record.version.minor >= tls.Versions.TLS_1_1.minor) { + cipher.output.putBytes(iv); + } + cipher.update(record.fragment); + if (cipher.finish(encrypt_aes_cbc_sha1_padding)) { + record.fragment = cipher.output; + record.length = record.fragment.length(); + rval = true; + } + return rval; + } + function encrypt_aes_cbc_sha1_padding(blockSize, input, decrypt) { + if (!decrypt) { + var padding = blockSize - input.length() % blockSize; + input.fillWithByte(padding - 1, padding); + } + return true; + } + function decrypt_aes_cbc_sha1_padding(blockSize, output, decrypt) { + var rval = true; + if (decrypt) { + var len = output.length(); + var paddingLength = output.last(); + for (var i = len - 1 - paddingLength; i < len - 1; ++i) { + rval = rval && output.at(i) == paddingLength; + } + if (rval) { + output.truncate(paddingLength + 1); + } + } + return rval; + } + function decrypt_aes_cbc_sha1(record, s) { + var rval = false; + var iv; + if (record.version.minor === tls.Versions.TLS_1_0.minor) { + iv = s.cipherState.init ? null : s.cipherState.iv; + } else { + iv = record.fragment.getBytes(16); + } + s.cipherState.init = true; + var cipher = s.cipherState.cipher; + cipher.start({ iv }); + cipher.update(record.fragment); + rval = cipher.finish(decrypt_aes_cbc_sha1_padding); + var macLen = s.macLength; + var mac = forge3.random.getBytesSync(macLen); + var len = cipher.output.length(); + if (len >= macLen) { + record.fragment = cipher.output.getBytes(len - macLen); + mac = cipher.output.getBytes(macLen); + } else { + record.fragment = cipher.output.getBytes(); + } + record.fragment = forge3.util.createBuffer(record.fragment); + record.length = record.fragment.length(); + var mac2 = s.macFunction(s.macKey, s.sequenceNumber, record); + s.updateSequenceNumber(); + rval = compareMacs(s.macKey, mac, mac2) && rval; + return rval; + } + function compareMacs(key, mac1, mac2) { + var hmac = forge3.hmac.create(); + hmac.start("SHA1", key); + hmac.update(mac1); + mac1 = hmac.digest().getBytes(); + hmac.start(null, null); + hmac.update(mac2); + mac2 = hmac.digest().getBytes(); + return mac1 === mac2; + } + } +}); + +// node_modules/node-forge/lib/sha512.js +var require_sha512 = __commonJS({ + "node_modules/node-forge/lib/sha512.js"(exports2, module2) { + var forge3 = require_forge(); + require_md(); + require_util(); + var sha512 = module2.exports = forge3.sha512 = forge3.sha512 || {}; + forge3.md.sha512 = forge3.md.algorithms.sha512 = sha512; + var sha384 = forge3.sha384 = forge3.sha512.sha384 = forge3.sha512.sha384 || {}; + sha384.create = function() { + return sha512.create("SHA-384"); + }; + forge3.md.sha384 = forge3.md.algorithms.sha384 = sha384; + forge3.sha512.sha256 = forge3.sha512.sha256 || { + create: function() { + return sha512.create("SHA-512/256"); + } + }; + forge3.md["sha512/256"] = forge3.md.algorithms["sha512/256"] = forge3.sha512.sha256; + forge3.sha512.sha224 = forge3.sha512.sha224 || { + create: function() { + return sha512.create("SHA-512/224"); + } + }; + forge3.md["sha512/224"] = forge3.md.algorithms["sha512/224"] = forge3.sha512.sha224; + sha512.create = function(algorithm) { + if (!_initialized) { + _init(); + } + if (typeof algorithm === "undefined") { + algorithm = "SHA-512"; + } + if (!(algorithm in _states)) { + throw new Error("Invalid SHA-512 algorithm: " + algorithm); + } + var _state = _states[algorithm]; + var _h = null; + var _input = forge3.util.createBuffer(); + var _w = new Array(80); + for (var wi = 0; wi < 80; ++wi) { + _w[wi] = new Array(2); + } + var digestLength = 64; + switch (algorithm) { + case "SHA-384": + digestLength = 48; + break; + case "SHA-512/256": + digestLength = 32; + break; + case "SHA-512/224": + digestLength = 28; + break; + } + var md = { + algorithm: algorithm.replace("-", "").toLowerCase(), + blockLength: 128, + digestLength, + messageLength: 0, + fullMessageLength: null, + messageLengthSize: 16 + }; + md.start = function() { + md.messageLength = 0; + md.fullMessageLength = md.messageLength128 = []; + var int32s = md.messageLengthSize / 4; + for (var i = 0; i < int32s; ++i) { + md.fullMessageLength.push(0); + } + _input = forge3.util.createBuffer(); + _h = new Array(_state.length); + for (var i = 0; i < _state.length; ++i) { + _h[i] = _state[i].slice(0); + } + return md; + }; + md.start(); + md.update = function(msg, encoding) { + if (encoding === "utf8") { + msg = forge3.util.encodeUtf8(msg); + } + var len = msg.length; + md.messageLength += len; + len = [len / 4294967296 >>> 0, len >>> 0]; + for (var i = md.fullMessageLength.length - 1; i >= 0; --i) { + md.fullMessageLength[i] += len[1]; + len[1] = len[0] + (md.fullMessageLength[i] / 4294967296 >>> 0); + md.fullMessageLength[i] = md.fullMessageLength[i] >>> 0; + len[0] = len[1] / 4294967296 >>> 0; + } + _input.putBytes(msg); + _update(_h, _w, _input); + if (_input.read > 2048 || _input.length() === 0) { + _input.compact(); + } + return md; + }; + md.digest = function() { + var finalBlock = forge3.util.createBuffer(); + finalBlock.putBytes(_input.bytes()); + var remaining = md.fullMessageLength[md.fullMessageLength.length - 1] + md.messageLengthSize; + var overflow = remaining & md.blockLength - 1; + finalBlock.putBytes(_padding.substr(0, md.blockLength - overflow)); + var next, carry; + var bits = md.fullMessageLength[0] * 8; + for (var i = 0; i < md.fullMessageLength.length - 1; ++i) { + next = md.fullMessageLength[i + 1] * 8; + carry = next / 4294967296 >>> 0; + bits += carry; + finalBlock.putInt32(bits >>> 0); + bits = next >>> 0; + } + finalBlock.putInt32(bits); + var h = new Array(_h.length); + for (var i = 0; i < _h.length; ++i) { + h[i] = _h[i].slice(0); + } + _update(h, _w, finalBlock); + var rval = forge3.util.createBuffer(); + var hlen; + if (algorithm === "SHA-512") { + hlen = h.length; + } else if (algorithm === "SHA-384") { + hlen = h.length - 2; + } else { + hlen = h.length - 4; + } + for (var i = 0; i < hlen; ++i) { + rval.putInt32(h[i][0]); + if (i !== hlen - 1 || algorithm !== "SHA-512/224") { + rval.putInt32(h[i][1]); + } + } + return rval; + }; + return md; + }; + var _padding = null; + var _initialized = false; + var _k = null; + var _states = null; + function _init() { + _padding = String.fromCharCode(128); + _padding += forge3.util.fillString(String.fromCharCode(0), 128); + _k = [ + [1116352408, 3609767458], + [1899447441, 602891725], + [3049323471, 3964484399], + [3921009573, 2173295548], + [961987163, 4081628472], + [1508970993, 3053834265], + [2453635748, 2937671579], + [2870763221, 3664609560], + [3624381080, 2734883394], + [310598401, 1164996542], + [607225278, 1323610764], + [1426881987, 3590304994], + [1925078388, 4068182383], + [2162078206, 991336113], + [2614888103, 633803317], + [3248222580, 3479774868], + [3835390401, 2666613458], + [4022224774, 944711139], + [264347078, 2341262773], + [604807628, 2007800933], + [770255983, 1495990901], + [1249150122, 1856431235], + [1555081692, 3175218132], + [1996064986, 2198950837], + [2554220882, 3999719339], + [2821834349, 766784016], + [2952996808, 2566594879], + [3210313671, 3203337956], + [3336571891, 1034457026], + [3584528711, 2466948901], + [113926993, 3758326383], + [338241895, 168717936], + [666307205, 1188179964], + [773529912, 1546045734], + [1294757372, 1522805485], + [1396182291, 2643833823], + [1695183700, 2343527390], + [1986661051, 1014477480], + [2177026350, 1206759142], + [2456956037, 344077627], + [2730485921, 1290863460], + [2820302411, 3158454273], + [3259730800, 3505952657], + [3345764771, 106217008], + [3516065817, 3606008344], + [3600352804, 1432725776], + [4094571909, 1467031594], + [275423344, 851169720], + [430227734, 3100823752], + [506948616, 1363258195], + [659060556, 3750685593], + [883997877, 3785050280], + [958139571, 3318307427], + [1322822218, 3812723403], + [1537002063, 2003034995], + [1747873779, 3602036899], + [1955562222, 1575990012], + [2024104815, 1125592928], + [2227730452, 2716904306], + [2361852424, 442776044], + [2428436474, 593698344], + [2756734187, 3733110249], + [3204031479, 2999351573], + [3329325298, 3815920427], + [3391569614, 3928383900], + [3515267271, 566280711], + [3940187606, 3454069534], + [4118630271, 4000239992], + [116418474, 1914138554], + [174292421, 2731055270], + [289380356, 3203993006], + [460393269, 320620315], + [685471733, 587496836], + [852142971, 1086792851], + [1017036298, 365543100], + [1126000580, 2618297676], + [1288033470, 3409855158], + [1501505948, 4234509866], + [1607167915, 987167468], + [1816402316, 1246189591] + ]; + _states = {}; + _states["SHA-512"] = [ + [1779033703, 4089235720], + [3144134277, 2227873595], + [1013904242, 4271175723], + [2773480762, 1595750129], + [1359893119, 2917565137], + [2600822924, 725511199], + [528734635, 4215389547], + [1541459225, 327033209] + ]; + _states["SHA-384"] = [ + [3418070365, 3238371032], + [1654270250, 914150663], + [2438529370, 812702999], + [355462360, 4144912697], + [1731405415, 4290775857], + [2394180231, 1750603025], + [3675008525, 1694076839], + [1203062813, 3204075428] + ]; + _states["SHA-512/256"] = [ + [573645204, 4230739756], + [2673172387, 3360449730], + [596883563, 1867755857], + [2520282905, 1497426621], + [2519219938, 2827943907], + [3193839141, 1401305490], + [721525244, 746961066], + [246885852, 2177182882] + ]; + _states["SHA-512/224"] = [ + [2352822216, 424955298], + [1944164710, 2312950998], + [502970286, 855612546], + [1738396948, 1479516111], + [258812777, 2077511080], + [2011393907, 79989058], + [1067287976, 1780299464], + [286451373, 2446758561] + ]; + _initialized = true; + } + function _update(s, w, bytes) { + var t1_hi, t1_lo; + var t2_hi, t2_lo; + var s0_hi, s0_lo; + var s1_hi, s1_lo; + var ch_hi, ch_lo; + var maj_hi, maj_lo; + var a_hi, a_lo; + var b_hi, b_lo; + var c_hi, c_lo; + var d_hi, d_lo; + var e_hi, e_lo; + var f_hi, f_lo; + var g_hi, g_lo; + var h_hi, h_lo; + var i, hi, lo, w2, w7, w15, w16; + var len = bytes.length(); + while (len >= 128) { + for (i = 0; i < 16; ++i) { + w[i][0] = bytes.getInt32() >>> 0; + w[i][1] = bytes.getInt32() >>> 0; + } + for (; i < 80; ++i) { + w2 = w[i - 2]; + hi = w2[0]; + lo = w2[1]; + t1_hi = ((hi >>> 19 | lo << 13) ^ (lo >>> 29 | hi << 3) ^ hi >>> 6) >>> 0; + t1_lo = ((hi << 13 | lo >>> 19) ^ (lo << 3 | hi >>> 29) ^ (hi << 26 | lo >>> 6)) >>> 0; + w15 = w[i - 15]; + hi = w15[0]; + lo = w15[1]; + t2_hi = ((hi >>> 1 | lo << 31) ^ (hi >>> 8 | lo << 24) ^ hi >>> 7) >>> 0; + t2_lo = ((hi << 31 | lo >>> 1) ^ (hi << 24 | lo >>> 8) ^ (hi << 25 | lo >>> 7)) >>> 0; + w7 = w[i - 7]; + w16 = w[i - 16]; + lo = t1_lo + w7[1] + t2_lo + w16[1]; + w[i][0] = t1_hi + w7[0] + t2_hi + w16[0] + (lo / 4294967296 >>> 0) >>> 0; + w[i][1] = lo >>> 0; + } + a_hi = s[0][0]; + a_lo = s[0][1]; + b_hi = s[1][0]; + b_lo = s[1][1]; + c_hi = s[2][0]; + c_lo = s[2][1]; + d_hi = s[3][0]; + d_lo = s[3][1]; + e_hi = s[4][0]; + e_lo = s[4][1]; + f_hi = s[5][0]; + f_lo = s[5][1]; + g_hi = s[6][0]; + g_lo = s[6][1]; + h_hi = s[7][0]; + h_lo = s[7][1]; + for (i = 0; i < 80; ++i) { + s1_hi = ((e_hi >>> 14 | e_lo << 18) ^ (e_hi >>> 18 | e_lo << 14) ^ (e_lo >>> 9 | e_hi << 23)) >>> 0; + s1_lo = ((e_hi << 18 | e_lo >>> 14) ^ (e_hi << 14 | e_lo >>> 18) ^ (e_lo << 23 | e_hi >>> 9)) >>> 0; + ch_hi = (g_hi ^ e_hi & (f_hi ^ g_hi)) >>> 0; + ch_lo = (g_lo ^ e_lo & (f_lo ^ g_lo)) >>> 0; + s0_hi = ((a_hi >>> 28 | a_lo << 4) ^ (a_lo >>> 2 | a_hi << 30) ^ (a_lo >>> 7 | a_hi << 25)) >>> 0; + s0_lo = ((a_hi << 4 | a_lo >>> 28) ^ (a_lo << 30 | a_hi >>> 2) ^ (a_lo << 25 | a_hi >>> 7)) >>> 0; + maj_hi = (a_hi & b_hi | c_hi & (a_hi ^ b_hi)) >>> 0; + maj_lo = (a_lo & b_lo | c_lo & (a_lo ^ b_lo)) >>> 0; + lo = h_lo + s1_lo + ch_lo + _k[i][1] + w[i][1]; + t1_hi = h_hi + s1_hi + ch_hi + _k[i][0] + w[i][0] + (lo / 4294967296 >>> 0) >>> 0; + t1_lo = lo >>> 0; + lo = s0_lo + maj_lo; + t2_hi = s0_hi + maj_hi + (lo / 4294967296 >>> 0) >>> 0; + t2_lo = lo >>> 0; + h_hi = g_hi; + h_lo = g_lo; + g_hi = f_hi; + g_lo = f_lo; + f_hi = e_hi; + f_lo = e_lo; + lo = d_lo + t1_lo; + e_hi = d_hi + t1_hi + (lo / 4294967296 >>> 0) >>> 0; + e_lo = lo >>> 0; + d_hi = c_hi; + d_lo = c_lo; + c_hi = b_hi; + c_lo = b_lo; + b_hi = a_hi; + b_lo = a_lo; + lo = t1_lo + t2_lo; + a_hi = t1_hi + t2_hi + (lo / 4294967296 >>> 0) >>> 0; + a_lo = lo >>> 0; + } + lo = s[0][1] + a_lo; + s[0][0] = s[0][0] + a_hi + (lo / 4294967296 >>> 0) >>> 0; + s[0][1] = lo >>> 0; + lo = s[1][1] + b_lo; + s[1][0] = s[1][0] + b_hi + (lo / 4294967296 >>> 0) >>> 0; + s[1][1] = lo >>> 0; + lo = s[2][1] + c_lo; + s[2][0] = s[2][0] + c_hi + (lo / 4294967296 >>> 0) >>> 0; + s[2][1] = lo >>> 0; + lo = s[3][1] + d_lo; + s[3][0] = s[3][0] + d_hi + (lo / 4294967296 >>> 0) >>> 0; + s[3][1] = lo >>> 0; + lo = s[4][1] + e_lo; + s[4][0] = s[4][0] + e_hi + (lo / 4294967296 >>> 0) >>> 0; + s[4][1] = lo >>> 0; + lo = s[5][1] + f_lo; + s[5][0] = s[5][0] + f_hi + (lo / 4294967296 >>> 0) >>> 0; + s[5][1] = lo >>> 0; + lo = s[6][1] + g_lo; + s[6][0] = s[6][0] + g_hi + (lo / 4294967296 >>> 0) >>> 0; + s[6][1] = lo >>> 0; + lo = s[7][1] + h_lo; + s[7][0] = s[7][0] + h_hi + (lo / 4294967296 >>> 0) >>> 0; + s[7][1] = lo >>> 0; + len -= 128; + } + } + } +}); + +// node_modules/node-forge/lib/asn1-validator.js +var require_asn1_validator = __commonJS({ + "node_modules/node-forge/lib/asn1-validator.js"(exports2) { + var forge3 = require_forge(); + require_asn1(); + var asn1 = forge3.asn1; + exports2.privateKeyValidator = { + name: "PrivateKeyInfo", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "PrivateKeyInfo.version", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.INTEGER, + constructed: false, + capture: "privateKeyVersion" + }, { + name: "PrivateKeyInfo.privateKeyAlgorithm", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "AlgorithmIdentifier.algorithm", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OID, + constructed: false, + capture: "privateKeyOid" + }] + }, { + name: "PrivateKeyInfo", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OCTETSTRING, + constructed: false, + capture: "privateKey" + }] + }; + exports2.publicKeyValidator = { + name: "SubjectPublicKeyInfo", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + captureAsn1: "subjectPublicKeyInfo", + value: [ + { + name: "SubjectPublicKeyInfo.AlgorithmIdentifier", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.SEQUENCE, + constructed: true, + value: [{ + name: "AlgorithmIdentifier.algorithm", + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.OID, + constructed: false, + capture: "publicKeyOid" + }] + }, + { + tagClass: asn1.Class.UNIVERSAL, + type: asn1.Type.BITSTRING, + constructed: false, + composed: true, + captureBitStringValue: "ed25519PublicKey" + } + ] + }; + } +}); + +// node_modules/node-forge/lib/ed25519.js +var require_ed25519 = __commonJS({ + "node_modules/node-forge/lib/ed25519.js"(exports2, module2) { + var forge3 = require_forge(); + require_jsbn(); + require_random(); + require_sha512(); + require_util(); + var asn1Validator = require_asn1_validator(); + var publicKeyValidator = asn1Validator.publicKeyValidator; + var privateKeyValidator = asn1Validator.privateKeyValidator; + if (typeof BigInteger === "undefined") { + BigInteger = forge3.jsbn.BigInteger; + } + var BigInteger; + var ByteBuffer = forge3.util.ByteBuffer; + var NativeBuffer = typeof Buffer === "undefined" ? Uint8Array : Buffer; + forge3.pki = forge3.pki || {}; + module2.exports = forge3.pki.ed25519 = forge3.ed25519 = forge3.ed25519 || {}; + var ed25519 = forge3.ed25519; + ed25519.constants = {}; + ed25519.constants.PUBLIC_KEY_BYTE_LENGTH = 32; + ed25519.constants.PRIVATE_KEY_BYTE_LENGTH = 64; + ed25519.constants.SEED_BYTE_LENGTH = 32; + ed25519.constants.SIGN_BYTE_LENGTH = 64; + ed25519.constants.HASH_BYTE_LENGTH = 64; + ed25519.generateKeyPair = function(options) { + options = options || {}; + var seed = options.seed; + if (seed === void 0) { + seed = forge3.random.getBytesSync(ed25519.constants.SEED_BYTE_LENGTH); + } else if (typeof seed === "string") { + if (seed.length !== ed25519.constants.SEED_BYTE_LENGTH) { + throw new TypeError('"seed" must be ' + ed25519.constants.SEED_BYTE_LENGTH + " bytes in length."); + } + } else if (!(seed instanceof Uint8Array)) { + throw new TypeError('"seed" must be a node.js Buffer, Uint8Array, or a binary string.'); + } + seed = messageToNativeBuffer({ message: seed, encoding: "binary" }); + var pk = new NativeBuffer(ed25519.constants.PUBLIC_KEY_BYTE_LENGTH); + var sk = new NativeBuffer(ed25519.constants.PRIVATE_KEY_BYTE_LENGTH); + for (var i = 0; i < 32; ++i) { + sk[i] = seed[i]; + } + crypto_sign_keypair(pk, sk); + return { publicKey: pk, privateKey: sk }; + }; + ed25519.privateKeyFromAsn1 = function(obj) { + var capture = {}; + var errors = []; + var valid = forge3.asn1.validate(obj, privateKeyValidator, capture, errors); + if (!valid) { + var error = new Error("Invalid Key."); + error.errors = errors; + throw error; + } + var oid = forge3.asn1.derToOid(capture.privateKeyOid); + var ed25519Oid = forge3.oids.EdDSA25519; + if (oid !== ed25519Oid) { + throw new Error('Invalid OID "' + oid + '"; OID must be "' + ed25519Oid + '".'); + } + var privateKey = capture.privateKey; + var privateKeyBytes = messageToNativeBuffer({ + message: forge3.asn1.fromDer(privateKey).value, + encoding: "binary" + }); + return { privateKeyBytes }; + }; + ed25519.publicKeyFromAsn1 = function(obj) { + var capture = {}; + var errors = []; + var valid = forge3.asn1.validate(obj, publicKeyValidator, capture, errors); + if (!valid) { + var error = new Error("Invalid Key."); + error.errors = errors; + throw error; + } + var oid = forge3.asn1.derToOid(capture.publicKeyOid); + var ed25519Oid = forge3.oids.EdDSA25519; + if (oid !== ed25519Oid) { + throw new Error('Invalid OID "' + oid + '"; OID must be "' + ed25519Oid + '".'); + } + var publicKeyBytes = capture.ed25519PublicKey; + if (publicKeyBytes.length !== ed25519.constants.PUBLIC_KEY_BYTE_LENGTH) { + throw new Error("Key length is invalid."); + } + return messageToNativeBuffer({ + message: publicKeyBytes, + encoding: "binary" + }); + }; + ed25519.publicKeyFromPrivateKey = function(options) { + options = options || {}; + var privateKey = messageToNativeBuffer({ + message: options.privateKey, + encoding: "binary" + }); + if (privateKey.length !== ed25519.constants.PRIVATE_KEY_BYTE_LENGTH) { + throw new TypeError('"options.privateKey" must have a byte length of ' + ed25519.constants.PRIVATE_KEY_BYTE_LENGTH); + } + var pk = new NativeBuffer(ed25519.constants.PUBLIC_KEY_BYTE_LENGTH); + for (var i = 0; i < pk.length; ++i) { + pk[i] = privateKey[32 + i]; + } + return pk; + }; + ed25519.sign = function(options) { + options = options || {}; + var msg = messageToNativeBuffer(options); + var privateKey = messageToNativeBuffer({ + message: options.privateKey, + encoding: "binary" + }); + if (privateKey.length === ed25519.constants.SEED_BYTE_LENGTH) { + var keyPair = ed25519.generateKeyPair({ seed: privateKey }); + privateKey = keyPair.privateKey; + } else if (privateKey.length !== ed25519.constants.PRIVATE_KEY_BYTE_LENGTH) { + throw new TypeError('"options.privateKey" must have a byte length of ' + ed25519.constants.SEED_BYTE_LENGTH + " or " + ed25519.constants.PRIVATE_KEY_BYTE_LENGTH); + } + var signedMsg = new NativeBuffer(ed25519.constants.SIGN_BYTE_LENGTH + msg.length); + crypto_sign(signedMsg, msg, msg.length, privateKey); + var sig = new NativeBuffer(ed25519.constants.SIGN_BYTE_LENGTH); + for (var i = 0; i < sig.length; ++i) { + sig[i] = signedMsg[i]; + } + return sig; + }; + ed25519.verify = function(options) { + options = options || {}; + var msg = messageToNativeBuffer(options); + if (options.signature === void 0) { + throw new TypeError('"options.signature" must be a node.js Buffer, a Uint8Array, a forge ByteBuffer, or a binary string.'); + } + var sig = messageToNativeBuffer({ + message: options.signature, + encoding: "binary" + }); + if (sig.length !== ed25519.constants.SIGN_BYTE_LENGTH) { + throw new TypeError('"options.signature" must have a byte length of ' + ed25519.constants.SIGN_BYTE_LENGTH); + } + var publicKey = messageToNativeBuffer({ + message: options.publicKey, + encoding: "binary" + }); + if (publicKey.length !== ed25519.constants.PUBLIC_KEY_BYTE_LENGTH) { + throw new TypeError('"options.publicKey" must have a byte length of ' + ed25519.constants.PUBLIC_KEY_BYTE_LENGTH); + } + var sm = new NativeBuffer(ed25519.constants.SIGN_BYTE_LENGTH + msg.length); + var m = new NativeBuffer(ed25519.constants.SIGN_BYTE_LENGTH + msg.length); + var i; + for (i = 0; i < ed25519.constants.SIGN_BYTE_LENGTH; ++i) { + sm[i] = sig[i]; + } + for (i = 0; i < msg.length; ++i) { + sm[i + ed25519.constants.SIGN_BYTE_LENGTH] = msg[i]; + } + return crypto_sign_open(m, sm, sm.length, publicKey) >= 0; + }; + function messageToNativeBuffer(options) { + var message2 = options.message; + if (message2 instanceof Uint8Array || message2 instanceof NativeBuffer) { + return message2; + } + var encoding = options.encoding; + if (message2 === void 0) { + if (options.md) { + message2 = options.md.digest().getBytes(); + encoding = "binary"; + } else { + throw new TypeError('"options.message" or "options.md" not specified.'); + } + } + if (typeof message2 === "string" && !encoding) { + throw new TypeError('"options.encoding" must be "binary" or "utf8".'); + } + if (typeof message2 === "string") { + if (typeof Buffer !== "undefined") { + return Buffer.from(message2, encoding); + } + message2 = new ByteBuffer(message2, encoding); + } else if (!(message2 instanceof ByteBuffer)) { + throw new TypeError('"options.message" must be a node.js Buffer, a Uint8Array, a forge ByteBuffer, or a string with "options.encoding" specifying its encoding.'); + } + var buffer = new NativeBuffer(message2.length()); + for (var i = 0; i < buffer.length; ++i) { + buffer[i] = message2.at(i); + } + return buffer; + } + var gf0 = gf(); + var gf1 = gf([1]); + var D = gf([ + 30883, + 4953, + 19914, + 30187, + 55467, + 16705, + 2637, + 112, + 59544, + 30585, + 16505, + 36039, + 65139, + 11119, + 27886, + 20995 + ]); + var D2 = gf([ + 61785, + 9906, + 39828, + 60374, + 45398, + 33411, + 5274, + 224, + 53552, + 61171, + 33010, + 6542, + 64743, + 22239, + 55772, + 9222 + ]); + var X = gf([ + 54554, + 36645, + 11616, + 51542, + 42930, + 38181, + 51040, + 26924, + 56412, + 64982, + 57905, + 49316, + 21502, + 52590, + 14035, + 8553 + ]); + var Y = gf([ + 26200, + 26214, + 26214, + 26214, + 26214, + 26214, + 26214, + 26214, + 26214, + 26214, + 26214, + 26214, + 26214, + 26214, + 26214, + 26214 + ]); + var L = new Float64Array([ + 237, + 211, + 245, + 92, + 26, + 99, + 18, + 88, + 214, + 156, + 247, + 162, + 222, + 249, + 222, + 20, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16 + ]); + var I = gf([ + 41136, + 18958, + 6951, + 50414, + 58488, + 44335, + 6150, + 12099, + 55207, + 15867, + 153, + 11085, + 57099, + 20417, + 9344, + 11139 + ]); + function sha512(msg, msgLen) { + var md = forge3.md.sha512.create(); + var buffer = new ByteBuffer(msg); + md.update(buffer.getBytes(msgLen), "binary"); + var hash = md.digest().getBytes(); + if (typeof Buffer !== "undefined") { + return Buffer.from(hash, "binary"); + } + var out = new NativeBuffer(ed25519.constants.HASH_BYTE_LENGTH); + for (var i = 0; i < 64; ++i) { + out[i] = hash.charCodeAt(i); + } + return out; + } + function crypto_sign_keypair(pk, sk) { + var p = [gf(), gf(), gf(), gf()]; + var i; + var d = sha512(sk, 32); + d[0] &= 248; + d[31] &= 127; + d[31] |= 64; + scalarbase(p, d); + pack(pk, p); + for (i = 0; i < 32; ++i) { + sk[i + 32] = pk[i]; + } + return 0; + } + function crypto_sign(sm, m, n, sk) { + var i, j, x = new Float64Array(64); + var p = [gf(), gf(), gf(), gf()]; + var d = sha512(sk, 32); + d[0] &= 248; + d[31] &= 127; + d[31] |= 64; + var smlen = n + 64; + for (i = 0; i < n; ++i) { + sm[64 + i] = m[i]; + } + for (i = 0; i < 32; ++i) { + sm[32 + i] = d[32 + i]; + } + var r = sha512(sm.subarray(32), n + 32); + reduce(r); + scalarbase(p, r); + pack(sm, p); + for (i = 32; i < 64; ++i) { + sm[i] = sk[i]; + } + var h = sha512(sm, n + 64); + reduce(h); + for (i = 32; i < 64; ++i) { + x[i] = 0; + } + for (i = 0; i < 32; ++i) { + x[i] = r[i]; + } + for (i = 0; i < 32; ++i) { + for (j = 0; j < 32; j++) { + x[i + j] += h[i] * d[j]; + } + } + modL(sm.subarray(32), x); + return smlen; + } + function crypto_sign_open(m, sm, n, pk) { + var i, mlen; + var t = new NativeBuffer(32); + var p = [gf(), gf(), gf(), gf()], q = [gf(), gf(), gf(), gf()]; + mlen = -1; + if (n < 64) { + return -1; + } + if (unpackneg(q, pk)) { + return -1; + } + for (i = 0; i < n; ++i) { + m[i] = sm[i]; + } + for (i = 0; i < 32; ++i) { + m[i + 32] = pk[i]; + } + var h = sha512(m, n); + reduce(h); + scalarmult(p, q, h); + scalarbase(q, sm.subarray(32)); + add(p, q); + pack(t, p); + n -= 64; + if (crypto_verify_32(sm, 0, t, 0)) { + for (i = 0; i < n; ++i) { + m[i] = 0; + } + return -1; + } + for (i = 0; i < n; ++i) { + m[i] = sm[i + 64]; + } + mlen = n; + return mlen; + } + function modL(r, x) { + var carry, i, j, k; + for (i = 63; i >= 32; --i) { + carry = 0; + for (j = i - 32, k = i - 12; j < k; ++j) { + x[j] += carry - 16 * x[i] * L[j - (i - 32)]; + carry = x[j] + 128 >> 8; + x[j] -= carry * 256; + } + x[j] += carry; + x[i] = 0; + } + carry = 0; + for (j = 0; j < 32; ++j) { + x[j] += carry - (x[31] >> 4) * L[j]; + carry = x[j] >> 8; + x[j] &= 255; + } + for (j = 0; j < 32; ++j) { + x[j] -= carry * L[j]; + } + for (i = 0; i < 32; ++i) { + x[i + 1] += x[i] >> 8; + r[i] = x[i] & 255; + } + } + function reduce(r) { + var x = new Float64Array(64); + for (var i = 0; i < 64; ++i) { + x[i] = r[i]; + r[i] = 0; + } + modL(r, x); + } + function add(p, q) { + var a = gf(), b = gf(), c = gf(), d = gf(), e = gf(), f = gf(), g = gf(), h = gf(), t = gf(); + Z(a, p[1], p[0]); + Z(t, q[1], q[0]); + M(a, a, t); + A(b, p[0], p[1]); + A(t, q[0], q[1]); + M(b, b, t); + M(c, p[3], q[3]); + M(c, c, D2); + M(d, p[2], q[2]); + A(d, d, d); + Z(e, b, a); + Z(f, d, c); + A(g, d, c); + A(h, b, a); + M(p[0], e, f); + M(p[1], h, g); + M(p[2], g, f); + M(p[3], e, h); + } + function cswap(p, q, b) { + for (var i = 0; i < 4; ++i) { + sel25519(p[i], q[i], b); + } + } + function pack(r, p) { + var tx = gf(), ty = gf(), zi = gf(); + inv25519(zi, p[2]); + M(tx, p[0], zi); + M(ty, p[1], zi); + pack25519(r, ty); + r[31] ^= par25519(tx) << 7; + } + function pack25519(o, n) { + var i, j, b; + var m = gf(), t = gf(); + for (i = 0; i < 16; ++i) { + t[i] = n[i]; + } + car25519(t); + car25519(t); + car25519(t); + for (j = 0; j < 2; ++j) { + m[0] = t[0] - 65517; + for (i = 1; i < 15; ++i) { + m[i] = t[i] - 65535 - (m[i - 1] >> 16 & 1); + m[i - 1] &= 65535; + } + m[15] = t[15] - 32767 - (m[14] >> 16 & 1); + b = m[15] >> 16 & 1; + m[14] &= 65535; + sel25519(t, m, 1 - b); + } + for (i = 0; i < 16; i++) { + o[2 * i] = t[i] & 255; + o[2 * i + 1] = t[i] >> 8; + } + } + function unpackneg(r, p) { + var t = gf(), chk = gf(), num = gf(), den = gf(), den2 = gf(), den4 = gf(), den6 = gf(); + set25519(r[2], gf1); + unpack25519(r[1], p); + S(num, r[1]); + M(den, num, D); + Z(num, num, r[2]); + A(den, r[2], den); + S(den2, den); + S(den4, den2); + M(den6, den4, den2); + M(t, den6, num); + M(t, t, den); + pow2523(t, t); + M(t, t, num); + M(t, t, den); + M(t, t, den); + M(r[0], t, den); + S(chk, r[0]); + M(chk, chk, den); + if (neq25519(chk, num)) { + M(r[0], r[0], I); + } + S(chk, r[0]); + M(chk, chk, den); + if (neq25519(chk, num)) { + return -1; + } + if (par25519(r[0]) === p[31] >> 7) { + Z(r[0], gf0, r[0]); + } + M(r[3], r[0], r[1]); + return 0; + } + function unpack25519(o, n) { + var i; + for (i = 0; i < 16; ++i) { + o[i] = n[2 * i] + (n[2 * i + 1] << 8); + } + o[15] &= 32767; + } + function pow2523(o, i) { + var c = gf(); + var a; + for (a = 0; a < 16; ++a) { + c[a] = i[a]; + } + for (a = 250; a >= 0; --a) { + S(c, c); + if (a !== 1) { + M(c, c, i); + } + } + for (a = 0; a < 16; ++a) { + o[a] = c[a]; + } + } + function neq25519(a, b) { + var c = new NativeBuffer(32); + var d = new NativeBuffer(32); + pack25519(c, a); + pack25519(d, b); + return crypto_verify_32(c, 0, d, 0); + } + function crypto_verify_32(x, xi, y, yi) { + return vn(x, xi, y, yi, 32); + } + function vn(x, xi, y, yi, n) { + var i, d = 0; + for (i = 0; i < n; ++i) { + d |= x[xi + i] ^ y[yi + i]; + } + return (1 & d - 1 >>> 8) - 1; + } + function par25519(a) { + var d = new NativeBuffer(32); + pack25519(d, a); + return d[0] & 1; + } + function scalarmult(p, q, s) { + var b, i; + set25519(p[0], gf0); + set25519(p[1], gf1); + set25519(p[2], gf1); + set25519(p[3], gf0); + for (i = 255; i >= 0; --i) { + b = s[i / 8 | 0] >> (i & 7) & 1; + cswap(p, q, b); + add(q, p); + add(p, p); + cswap(p, q, b); + } + } + function scalarbase(p, s) { + var q = [gf(), gf(), gf(), gf()]; + set25519(q[0], X); + set25519(q[1], Y); + set25519(q[2], gf1); + M(q[3], X, Y); + scalarmult(p, q, s); + } + function set25519(r, a) { + var i; + for (i = 0; i < 16; i++) { + r[i] = a[i] | 0; + } + } + function inv25519(o, i) { + var c = gf(); + var a; + for (a = 0; a < 16; ++a) { + c[a] = i[a]; + } + for (a = 253; a >= 0; --a) { + S(c, c); + if (a !== 2 && a !== 4) { + M(c, c, i); + } + } + for (a = 0; a < 16; ++a) { + o[a] = c[a]; + } + } + function car25519(o) { + var i, v, c = 1; + for (i = 0; i < 16; ++i) { + v = o[i] + c + 65535; + c = Math.floor(v / 65536); + o[i] = v - c * 65536; + } + o[0] += c - 1 + 37 * (c - 1); + } + function sel25519(p, q, b) { + var t, c = ~(b - 1); + for (var i = 0; i < 16; ++i) { + t = c & (p[i] ^ q[i]); + p[i] ^= t; + q[i] ^= t; + } + } + function gf(init) { + var i, r = new Float64Array(16); + if (init) { + for (i = 0; i < init.length; ++i) { + r[i] = init[i]; + } + } + return r; + } + function A(o, a, b) { + for (var i = 0; i < 16; ++i) { + o[i] = a[i] + b[i]; + } + } + function Z(o, a, b) { + for (var i = 0; i < 16; ++i) { + o[i] = a[i] - b[i]; + } + } + function S(o, a) { + M(o, a, a); + } + function M(o, a, b) { + var v, c, t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0, t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0, t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0, t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0, b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3], b4 = b[4], b5 = b[5], b6 = b[6], b7 = b[7], b8 = b[8], b9 = b[9], b10 = b[10], b11 = b[11], b12 = b[12], b13 = b[13], b14 = b[14], b15 = b[15]; + v = a[0]; + t0 += v * b0; + t1 += v * b1; + t2 += v * b2; + t3 += v * b3; + t4 += v * b4; + t5 += v * b5; + t6 += v * b6; + t7 += v * b7; + t8 += v * b8; + t9 += v * b9; + t10 += v * b10; + t11 += v * b11; + t12 += v * b12; + t13 += v * b13; + t14 += v * b14; + t15 += v * b15; + v = a[1]; + t1 += v * b0; + t2 += v * b1; + t3 += v * b2; + t4 += v * b3; + t5 += v * b4; + t6 += v * b5; + t7 += v * b6; + t8 += v * b7; + t9 += v * b8; + t10 += v * b9; + t11 += v * b10; + t12 += v * b11; + t13 += v * b12; + t14 += v * b13; + t15 += v * b14; + t16 += v * b15; + v = a[2]; + t2 += v * b0; + t3 += v * b1; + t4 += v * b2; + t5 += v * b3; + t6 += v * b4; + t7 += v * b5; + t8 += v * b6; + t9 += v * b7; + t10 += v * b8; + t11 += v * b9; + t12 += v * b10; + t13 += v * b11; + t14 += v * b12; + t15 += v * b13; + t16 += v * b14; + t17 += v * b15; + v = a[3]; + t3 += v * b0; + t4 += v * b1; + t5 += v * b2; + t6 += v * b3; + t7 += v * b4; + t8 += v * b5; + t9 += v * b6; + t10 += v * b7; + t11 += v * b8; + t12 += v * b9; + t13 += v * b10; + t14 += v * b11; + t15 += v * b12; + t16 += v * b13; + t17 += v * b14; + t18 += v * b15; + v = a[4]; + t4 += v * b0; + t5 += v * b1; + t6 += v * b2; + t7 += v * b3; + t8 += v * b4; + t9 += v * b5; + t10 += v * b6; + t11 += v * b7; + t12 += v * b8; + t13 += v * b9; + t14 += v * b10; + t15 += v * b11; + t16 += v * b12; + t17 += v * b13; + t18 += v * b14; + t19 += v * b15; + v = a[5]; + t5 += v * b0; + t6 += v * b1; + t7 += v * b2; + t8 += v * b3; + t9 += v * b4; + t10 += v * b5; + t11 += v * b6; + t12 += v * b7; + t13 += v * b8; + t14 += v * b9; + t15 += v * b10; + t16 += v * b11; + t17 += v * b12; + t18 += v * b13; + t19 += v * b14; + t20 += v * b15; + v = a[6]; + t6 += v * b0; + t7 += v * b1; + t8 += v * b2; + t9 += v * b3; + t10 += v * b4; + t11 += v * b5; + t12 += v * b6; + t13 += v * b7; + t14 += v * b8; + t15 += v * b9; + t16 += v * b10; + t17 += v * b11; + t18 += v * b12; + t19 += v * b13; + t20 += v * b14; + t21 += v * b15; + v = a[7]; + t7 += v * b0; + t8 += v * b1; + t9 += v * b2; + t10 += v * b3; + t11 += v * b4; + t12 += v * b5; + t13 += v * b6; + t14 += v * b7; + t15 += v * b8; + t16 += v * b9; + t17 += v * b10; + t18 += v * b11; + t19 += v * b12; + t20 += v * b13; + t21 += v * b14; + t22 += v * b15; + v = a[8]; + t8 += v * b0; + t9 += v * b1; + t10 += v * b2; + t11 += v * b3; + t12 += v * b4; + t13 += v * b5; + t14 += v * b6; + t15 += v * b7; + t16 += v * b8; + t17 += v * b9; + t18 += v * b10; + t19 += v * b11; + t20 += v * b12; + t21 += v * b13; + t22 += v * b14; + t23 += v * b15; + v = a[9]; + t9 += v * b0; + t10 += v * b1; + t11 += v * b2; + t12 += v * b3; + t13 += v * b4; + t14 += v * b5; + t15 += v * b6; + t16 += v * b7; + t17 += v * b8; + t18 += v * b9; + t19 += v * b10; + t20 += v * b11; + t21 += v * b12; + t22 += v * b13; + t23 += v * b14; + t24 += v * b15; + v = a[10]; + t10 += v * b0; + t11 += v * b1; + t12 += v * b2; + t13 += v * b3; + t14 += v * b4; + t15 += v * b5; + t16 += v * b6; + t17 += v * b7; + t18 += v * b8; + t19 += v * b9; + t20 += v * b10; + t21 += v * b11; + t22 += v * b12; + t23 += v * b13; + t24 += v * b14; + t25 += v * b15; + v = a[11]; + t11 += v * b0; + t12 += v * b1; + t13 += v * b2; + t14 += v * b3; + t15 += v * b4; + t16 += v * b5; + t17 += v * b6; + t18 += v * b7; + t19 += v * b8; + t20 += v * b9; + t21 += v * b10; + t22 += v * b11; + t23 += v * b12; + t24 += v * b13; + t25 += v * b14; + t26 += v * b15; + v = a[12]; + t12 += v * b0; + t13 += v * b1; + t14 += v * b2; + t15 += v * b3; + t16 += v * b4; + t17 += v * b5; + t18 += v * b6; + t19 += v * b7; + t20 += v * b8; + t21 += v * b9; + t22 += v * b10; + t23 += v * b11; + t24 += v * b12; + t25 += v * b13; + t26 += v * b14; + t27 += v * b15; + v = a[13]; + t13 += v * b0; + t14 += v * b1; + t15 += v * b2; + t16 += v * b3; + t17 += v * b4; + t18 += v * b5; + t19 += v * b6; + t20 += v * b7; + t21 += v * b8; + t22 += v * b9; + t23 += v * b10; + t24 += v * b11; + t25 += v * b12; + t26 += v * b13; + t27 += v * b14; + t28 += v * b15; + v = a[14]; + t14 += v * b0; + t15 += v * b1; + t16 += v * b2; + t17 += v * b3; + t18 += v * b4; + t19 += v * b5; + t20 += v * b6; + t21 += v * b7; + t22 += v * b8; + t23 += v * b9; + t24 += v * b10; + t25 += v * b11; + t26 += v * b12; + t27 += v * b13; + t28 += v * b14; + t29 += v * b15; + v = a[15]; + t15 += v * b0; + t16 += v * b1; + t17 += v * b2; + t18 += v * b3; + t19 += v * b4; + t20 += v * b5; + t21 += v * b6; + t22 += v * b7; + t23 += v * b8; + t24 += v * b9; + t25 += v * b10; + t26 += v * b11; + t27 += v * b12; + t28 += v * b13; + t29 += v * b14; + t30 += v * b15; + t0 += 38 * t16; + t1 += 38 * t17; + t2 += 38 * t18; + t3 += 38 * t19; + t4 += 38 * t20; + t5 += 38 * t21; + t6 += 38 * t22; + t7 += 38 * t23; + t8 += 38 * t24; + t9 += 38 * t25; + t10 += 38 * t26; + t11 += 38 * t27; + t12 += 38 * t28; + t13 += 38 * t29; + t14 += 38 * t30; + c = 1; + v = t0 + c + 65535; + c = Math.floor(v / 65536); + t0 = v - c * 65536; + v = t1 + c + 65535; + c = Math.floor(v / 65536); + t1 = v - c * 65536; + v = t2 + c + 65535; + c = Math.floor(v / 65536); + t2 = v - c * 65536; + v = t3 + c + 65535; + c = Math.floor(v / 65536); + t3 = v - c * 65536; + v = t4 + c + 65535; + c = Math.floor(v / 65536); + t4 = v - c * 65536; + v = t5 + c + 65535; + c = Math.floor(v / 65536); + t5 = v - c * 65536; + v = t6 + c + 65535; + c = Math.floor(v / 65536); + t6 = v - c * 65536; + v = t7 + c + 65535; + c = Math.floor(v / 65536); + t7 = v - c * 65536; + v = t8 + c + 65535; + c = Math.floor(v / 65536); + t8 = v - c * 65536; + v = t9 + c + 65535; + c = Math.floor(v / 65536); + t9 = v - c * 65536; + v = t10 + c + 65535; + c = Math.floor(v / 65536); + t10 = v - c * 65536; + v = t11 + c + 65535; + c = Math.floor(v / 65536); + t11 = v - c * 65536; + v = t12 + c + 65535; + c = Math.floor(v / 65536); + t12 = v - c * 65536; + v = t13 + c + 65535; + c = Math.floor(v / 65536); + t13 = v - c * 65536; + v = t14 + c + 65535; + c = Math.floor(v / 65536); + t14 = v - c * 65536; + v = t15 + c + 65535; + c = Math.floor(v / 65536); + t15 = v - c * 65536; + t0 += c - 1 + 37 * (c - 1); + c = 1; + v = t0 + c + 65535; + c = Math.floor(v / 65536); + t0 = v - c * 65536; + v = t1 + c + 65535; + c = Math.floor(v / 65536); + t1 = v - c * 65536; + v = t2 + c + 65535; + c = Math.floor(v / 65536); + t2 = v - c * 65536; + v = t3 + c + 65535; + c = Math.floor(v / 65536); + t3 = v - c * 65536; + v = t4 + c + 65535; + c = Math.floor(v / 65536); + t4 = v - c * 65536; + v = t5 + c + 65535; + c = Math.floor(v / 65536); + t5 = v - c * 65536; + v = t6 + c + 65535; + c = Math.floor(v / 65536); + t6 = v - c * 65536; + v = t7 + c + 65535; + c = Math.floor(v / 65536); + t7 = v - c * 65536; + v = t8 + c + 65535; + c = Math.floor(v / 65536); + t8 = v - c * 65536; + v = t9 + c + 65535; + c = Math.floor(v / 65536); + t9 = v - c * 65536; + v = t10 + c + 65535; + c = Math.floor(v / 65536); + t10 = v - c * 65536; + v = t11 + c + 65535; + c = Math.floor(v / 65536); + t11 = v - c * 65536; + v = t12 + c + 65535; + c = Math.floor(v / 65536); + t12 = v - c * 65536; + v = t13 + c + 65535; + c = Math.floor(v / 65536); + t13 = v - c * 65536; + v = t14 + c + 65535; + c = Math.floor(v / 65536); + t14 = v - c * 65536; + v = t15 + c + 65535; + c = Math.floor(v / 65536); + t15 = v - c * 65536; + t0 += c - 1 + 37 * (c - 1); + o[0] = t0; + o[1] = t1; + o[2] = t2; + o[3] = t3; + o[4] = t4; + o[5] = t5; + o[6] = t6; + o[7] = t7; + o[8] = t8; + o[9] = t9; + o[10] = t10; + o[11] = t11; + o[12] = t12; + o[13] = t13; + o[14] = t14; + o[15] = t15; + } + } +}); + +// node_modules/node-forge/lib/kem.js +var require_kem = __commonJS({ + "node_modules/node-forge/lib/kem.js"(exports2, module2) { + var forge3 = require_forge(); + require_util(); + require_random(); + require_jsbn(); + module2.exports = forge3.kem = forge3.kem || {}; + var BigInteger = forge3.jsbn.BigInteger; + forge3.kem.rsa = {}; + forge3.kem.rsa.create = function(kdf, options) { + options = options || {}; + var prng = options.prng || forge3.random; + var kem = {}; + kem.encrypt = function(publicKey, keyLength) { + var byteLength = Math.ceil(publicKey.n.bitLength() / 8); + var r; + do { + r = new BigInteger(forge3.util.bytesToHex(prng.getBytesSync(byteLength)), 16).mod(publicKey.n); + } while (r.compareTo(BigInteger.ONE) <= 0); + r = forge3.util.hexToBytes(r.toString(16)); + var zeros = byteLength - r.length; + if (zeros > 0) { + r = forge3.util.fillString(String.fromCharCode(0), zeros) + r; + } + var encapsulation = publicKey.encrypt(r, "NONE"); + var key = kdf.generate(r, keyLength); + return { encapsulation, key }; + }; + kem.decrypt = function(privateKey, encapsulation, keyLength) { + var r = privateKey.decrypt(encapsulation, "NONE"); + return kdf.generate(r, keyLength); + }; + return kem; + }; + forge3.kem.kdf1 = function(md, digestLength) { + _createKDF(this, md, 0, digestLength || md.digestLength); + }; + forge3.kem.kdf2 = function(md, digestLength) { + _createKDF(this, md, 1, digestLength || md.digestLength); + }; + function _createKDF(kdf, md, counterStart, digestLength) { + kdf.generate = function(x, length) { + var key = new forge3.util.ByteBuffer(); + var k = Math.ceil(length / digestLength) + counterStart; + var c = new forge3.util.ByteBuffer(); + for (var i = counterStart; i < k; ++i) { + c.putInt32(i); + md.start(); + md.update(x + c.getBytes()); + var hash = md.digest(); + key.putBytes(hash.getBytes(digestLength)); + } + key.truncate(key.length() - length); + return key.getBytes(); + }; + } + } +}); + +// node_modules/node-forge/lib/log.js +var require_log = __commonJS({ + "node_modules/node-forge/lib/log.js"(exports2, module2) { + var forge3 = require_forge(); + require_util(); + module2.exports = forge3.log = forge3.log || {}; + forge3.log.levels = [ + "none", + "error", + "warning", + "info", + "debug", + "verbose", + "max" + ]; + var sLevelInfo = {}; + var sLoggers = []; + var sConsoleLogger = null; + forge3.log.LEVEL_LOCKED = 1 << 1; + forge3.log.NO_LEVEL_CHECK = 1 << 2; + forge3.log.INTERPOLATE = 1 << 3; + for (i = 0; i < forge3.log.levels.length; ++i) { + level = forge3.log.levels[i]; + sLevelInfo[level] = { + index: i, + name: level.toUpperCase() + }; + } + var level; + var i; + forge3.log.logMessage = function(message2) { + var messageLevelIndex = sLevelInfo[message2.level].index; + for (var i2 = 0; i2 < sLoggers.length; ++i2) { + var logger2 = sLoggers[i2]; + if (logger2.flags & forge3.log.NO_LEVEL_CHECK) { + logger2.f(message2); + } else { + var loggerLevelIndex = sLevelInfo[logger2.level].index; + if (messageLevelIndex <= loggerLevelIndex) { + logger2.f(logger2, message2); + } + } + } + }; + forge3.log.prepareStandard = function(message2) { + if (!("standard" in message2)) { + message2.standard = sLevelInfo[message2.level].name + " [" + message2.category + "] " + message2.message; + } + }; + forge3.log.prepareFull = function(message2) { + if (!("full" in message2)) { + var args2 = [message2.message]; + args2 = args2.concat([]); + message2.full = forge3.util.format.apply(this, args2); + } + }; + forge3.log.prepareStandardFull = function(message2) { + if (!("standardFull" in message2)) { + forge3.log.prepareStandard(message2); + message2.standardFull = message2.standard; + } + }; + if (true) { + levels = ["error", "warning", "info", "debug", "verbose"]; + for (i = 0; i < levels.length; ++i) { + (function(level2) { + forge3.log[level2] = function(category, message2) { + var args2 = Array.prototype.slice.call(arguments).slice(2); + var msg = { + timestamp: new Date(), + level: level2, + category, + message: message2, + "arguments": args2 + }; + forge3.log.logMessage(msg); + }; + })(levels[i]); + } + } + var levels; + var i; + forge3.log.makeLogger = function(logFunction) { + var logger2 = { + flags: 0, + f: logFunction + }; + forge3.log.setLevel(logger2, "none"); + return logger2; + }; + forge3.log.setLevel = function(logger2, level2) { + var rval = false; + if (logger2 && !(logger2.flags & forge3.log.LEVEL_LOCKED)) { + for (var i2 = 0; i2 < forge3.log.levels.length; ++i2) { + var aValidLevel = forge3.log.levels[i2]; + if (level2 == aValidLevel) { + logger2.level = level2; + rval = true; + break; + } + } + } + return rval; + }; + forge3.log.lock = function(logger2, lock2) { + if (typeof lock2 === "undefined" || lock2) { + logger2.flags |= forge3.log.LEVEL_LOCKED; + } else { + logger2.flags &= ~forge3.log.LEVEL_LOCKED; + } + }; + forge3.log.addLogger = function(logger2) { + sLoggers.push(logger2); + }; + if (typeof console !== "undefined" && "log" in console) { + if (console.error && console.warn && console.info && console.debug) { + levelHandlers = { + error: console.error, + warning: console.warn, + info: console.info, + debug: console.debug, + verbose: console.debug + }; + f = function(logger2, message2) { + forge3.log.prepareStandard(message2); + var handler = levelHandlers[message2.level]; + var args2 = [message2.standard]; + args2 = args2.concat(message2["arguments"].slice()); + handler.apply(console, args2); + }; + logger = forge3.log.makeLogger(f); + } else { + f = function(logger2, message2) { + forge3.log.prepareStandardFull(message2); + console.log(message2.standardFull); + }; + logger = forge3.log.makeLogger(f); + } + forge3.log.setLevel(logger, "debug"); + forge3.log.addLogger(logger); + sConsoleLogger = logger; + } else { + console = { + log: function() { + } + }; + } + var logger; + var levelHandlers; + var f; + if (sConsoleLogger !== null && typeof window !== "undefined" && window.location) { + query = new URL(window.location.href).searchParams; + if (query.has("console.level")) { + forge3.log.setLevel(sConsoleLogger, query.get("console.level").slice(-1)[0]); + } + if (query.has("console.lock")) { + lock = query.get("console.lock").slice(-1)[0]; + if (lock == "true") { + forge3.log.lock(sConsoleLogger); + } + } + } + var query; + var lock; + forge3.log.consoleLogger = sConsoleLogger; + } +}); + +// node_modules/node-forge/lib/md.all.js +var require_md_all = __commonJS({ + "node_modules/node-forge/lib/md.all.js"(exports2, module2) { + module2.exports = require_md(); + require_md5(); + require_sha1(); + require_sha256(); + require_sha512(); + } +}); + +// node_modules/node-forge/lib/pkcs7.js +var require_pkcs7 = __commonJS({ + "node_modules/node-forge/lib/pkcs7.js"(exports2, module2) { + var forge3 = require_forge(); + require_aes(); + require_asn1(); + require_des(); + require_oids(); + require_pem(); + require_pkcs7asn1(); + require_random(); + require_util(); + require_x509(); + var asn1 = forge3.asn1; + var p7 = module2.exports = forge3.pkcs7 = forge3.pkcs7 || {}; + p7.messageFromPem = function(pem) { + var msg = forge3.pem.decode(pem)[0]; + if (msg.type !== "PKCS7") { + var error = new Error('Could not convert PKCS#7 message from PEM; PEM header type is not "PKCS#7".'); + error.headerType = msg.type; + throw error; + } + if (msg.procType && msg.procType.type === "ENCRYPTED") { + throw new Error("Could not convert PKCS#7 message from PEM; PEM is encrypted."); + } + var obj = asn1.fromDer(msg.body); + return p7.messageFromAsn1(obj); + }; + p7.messageToPem = function(msg, maxline) { + var pemObj = { + type: "PKCS7", + body: asn1.toDer(msg.toAsn1()).getBytes() + }; + return forge3.pem.encode(pemObj, { maxline }); + }; + p7.messageFromAsn1 = function(obj) { + var capture = {}; + var errors = []; + if (!asn1.validate(obj, p7.asn1.contentInfoValidator, capture, errors)) { + var error = new Error("Cannot read PKCS#7 message. ASN.1 object is not an PKCS#7 ContentInfo."); + error.errors = errors; + throw error; + } + var contentType = asn1.derToOid(capture.contentType); + var msg; + switch (contentType) { + case forge3.pki.oids.envelopedData: + msg = p7.createEnvelopedData(); + break; + case forge3.pki.oids.encryptedData: + msg = p7.createEncryptedData(); + break; + case forge3.pki.oids.signedData: + msg = p7.createSignedData(); + break; + default: + throw new Error("Cannot read PKCS#7 message. ContentType with OID " + contentType + " is not (yet) supported."); + } + msg.fromAsn1(capture.content.value[0]); + return msg; + }; + p7.createSignedData = function() { + var msg = null; + msg = { + type: forge3.pki.oids.signedData, + version: 1, + certificates: [], + crls: [], + signers: [], + digestAlgorithmIdentifiers: [], + contentInfo: null, + signerInfos: [], + fromAsn1: function(obj) { + _fromAsn1(msg, obj, p7.asn1.signedDataValidator); + msg.certificates = []; + msg.crls = []; + msg.digestAlgorithmIdentifiers = []; + msg.contentInfo = null; + msg.signerInfos = []; + if (msg.rawCapture.certificates) { + var certs = msg.rawCapture.certificates.value; + for (var i = 0; i < certs.length; ++i) { + msg.certificates.push(forge3.pki.certificateFromAsn1(certs[i])); + } + } + }, + toAsn1: function() { + if (!msg.contentInfo) { + msg.sign(); + } + var certs = []; + for (var i = 0; i < msg.certificates.length; ++i) { + certs.push(forge3.pki.certificateToAsn1(msg.certificates[i])); + } + var crls = []; + var signedData = asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, asn1.integerToDer(msg.version).getBytes()), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, msg.digestAlgorithmIdentifiers), + msg.contentInfo + ]) + ]); + if (certs.length > 0) { + signedData.value[0].value.push(asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, certs)); + } + if (crls.length > 0) { + signedData.value[0].value.push(asn1.create(asn1.Class.CONTEXT_SPECIFIC, 1, true, crls)); + } + signedData.value[0].value.push(asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, msg.signerInfos)); + return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(msg.type).getBytes()), + signedData + ]); + }, + addSigner: function(signer) { + var issuer = signer.issuer; + var serialNumber = signer.serialNumber; + if (signer.certificate) { + var cert = signer.certificate; + if (typeof cert === "string") { + cert = forge3.pki.certificateFromPem(cert); + } + issuer = cert.issuer.attributes; + serialNumber = cert.serialNumber; + } + var key = signer.key; + if (!key) { + throw new Error("Could not add PKCS#7 signer; no private key specified."); + } + if (typeof key === "string") { + key = forge3.pki.privateKeyFromPem(key); + } + var digestAlgorithm = signer.digestAlgorithm || forge3.pki.oids.sha1; + switch (digestAlgorithm) { + case forge3.pki.oids.sha1: + case forge3.pki.oids.sha256: + case forge3.pki.oids.sha384: + case forge3.pki.oids.sha512: + case forge3.pki.oids.md5: + break; + default: + throw new Error("Could not add PKCS#7 signer; unknown message digest algorithm: " + digestAlgorithm); + } + var authenticatedAttributes = signer.authenticatedAttributes || []; + if (authenticatedAttributes.length > 0) { + var contentType = false; + var messageDigest = false; + for (var i = 0; i < authenticatedAttributes.length; ++i) { + var attr = authenticatedAttributes[i]; + if (!contentType && attr.type === forge3.pki.oids.contentType) { + contentType = true; + if (messageDigest) { + break; + } + continue; + } + if (!messageDigest && attr.type === forge3.pki.oids.messageDigest) { + messageDigest = true; + if (contentType) { + break; + } + continue; + } + } + if (!contentType || !messageDigest) { + throw new Error("Invalid signer.authenticatedAttributes. If signer.authenticatedAttributes is specified, then it must contain at least two attributes, PKCS #9 content-type and PKCS #9 message-digest."); + } + } + msg.signers.push({ + key, + version: 1, + issuer, + serialNumber, + digestAlgorithm, + signatureAlgorithm: forge3.pki.oids.rsaEncryption, + signature: null, + authenticatedAttributes, + unauthenticatedAttributes: [] + }); + }, + sign: function(options) { + options = options || {}; + if (typeof msg.content !== "object" || msg.contentInfo === null) { + msg.contentInfo = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(forge3.pki.oids.data).getBytes()) + ]); + if ("content" in msg) { + var content; + if (msg.content instanceof forge3.util.ByteBuffer) { + content = msg.content.bytes(); + } else if (typeof msg.content === "string") { + content = forge3.util.encodeUtf8(msg.content); + } + if (options.detached) { + msg.detachedContent = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, content); + } else { + msg.contentInfo.value.push(asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, content) + ])); + } + } + } + if (msg.signers.length === 0) { + return; + } + var mds = addDigestAlgorithmIds(); + addSignerInfos(mds); + }, + verify: function() { + throw new Error("PKCS#7 signature verification not yet implemented."); + }, + addCertificate: function(cert) { + if (typeof cert === "string") { + cert = forge3.pki.certificateFromPem(cert); + } + msg.certificates.push(cert); + }, + addCertificateRevokationList: function(crl) { + throw new Error("PKCS#7 CRL support not yet implemented."); + } + }; + return msg; + function addDigestAlgorithmIds() { + var mds = {}; + for (var i = 0; i < msg.signers.length; ++i) { + var signer = msg.signers[i]; + var oid = signer.digestAlgorithm; + if (!(oid in mds)) { + mds[oid] = forge3.md[forge3.pki.oids[oid]].create(); + } + if (signer.authenticatedAttributes.length === 0) { + signer.md = mds[oid]; + } else { + signer.md = forge3.md[forge3.pki.oids[oid]].create(); + } + } + msg.digestAlgorithmIdentifiers = []; + for (var oid in mds) { + msg.digestAlgorithmIdentifiers.push(asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(oid).getBytes()), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, "") + ])); + } + return mds; + } + function addSignerInfos(mds) { + var content; + if (msg.detachedContent) { + content = msg.detachedContent; + } else { + content = msg.contentInfo.value[1]; + content = content.value[0]; + } + if (!content) { + throw new Error("Could not sign PKCS#7 message; there is no content to sign."); + } + var contentType = asn1.derToOid(msg.contentInfo.value[0].value); + var bytes = asn1.toDer(content); + bytes.getByte(); + asn1.getBerValueLength(bytes); + bytes = bytes.getBytes(); + for (var oid in mds) { + mds[oid].start().update(bytes); + } + var signingTime = new Date(); + for (var i = 0; i < msg.signers.length; ++i) { + var signer = msg.signers[i]; + if (signer.authenticatedAttributes.length === 0) { + if (contentType !== forge3.pki.oids.data) { + throw new Error("Invalid signer; authenticatedAttributes must be present when the ContentInfo content type is not PKCS#7 Data."); + } + } else { + signer.authenticatedAttributesAsn1 = asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, []); + var attrsAsn1 = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, []); + for (var ai = 0; ai < signer.authenticatedAttributes.length; ++ai) { + var attr = signer.authenticatedAttributes[ai]; + if (attr.type === forge3.pki.oids.messageDigest) { + attr.value = mds[signer.digestAlgorithm].digest(); + } else if (attr.type === forge3.pki.oids.signingTime) { + if (!attr.value) { + attr.value = signingTime; + } + } + attrsAsn1.value.push(_attributeToAsn1(attr)); + signer.authenticatedAttributesAsn1.value.push(_attributeToAsn1(attr)); + } + bytes = asn1.toDer(attrsAsn1).getBytes(); + signer.md.start().update(bytes); + } + signer.signature = signer.key.sign(signer.md, "RSASSA-PKCS1-V1_5"); + } + msg.signerInfos = _signersToAsn1(msg.signers); + } + }; + p7.createEncryptedData = function() { + var msg = null; + msg = { + type: forge3.pki.oids.encryptedData, + version: 0, + encryptedContent: { + algorithm: forge3.pki.oids["aes256-CBC"] + }, + fromAsn1: function(obj) { + _fromAsn1(msg, obj, p7.asn1.encryptedDataValidator); + }, + decrypt: function(key) { + if (key !== void 0) { + msg.encryptedContent.key = key; + } + _decryptContent(msg); + } + }; + return msg; + }; + p7.createEnvelopedData = function() { + var msg = null; + msg = { + type: forge3.pki.oids.envelopedData, + version: 0, + recipients: [], + encryptedContent: { + algorithm: forge3.pki.oids["aes256-CBC"] + }, + fromAsn1: function(obj) { + var capture = _fromAsn1(msg, obj, p7.asn1.envelopedDataValidator); + msg.recipients = _recipientsFromAsn1(capture.recipientInfos.value); + }, + toAsn1: function() { + return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(msg.type).getBytes()), + asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, asn1.integerToDer(msg.version).getBytes()), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, _recipientsToAsn1(msg.recipients)), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, _encryptedContentToAsn1(msg.encryptedContent)) + ]) + ]) + ]); + }, + findRecipient: function(cert) { + var sAttr = cert.issuer.attributes; + for (var i = 0; i < msg.recipients.length; ++i) { + var r = msg.recipients[i]; + var rAttr = r.issuer; + if (r.serialNumber !== cert.serialNumber) { + continue; + } + if (rAttr.length !== sAttr.length) { + continue; + } + var match = true; + for (var j = 0; j < sAttr.length; ++j) { + if (rAttr[j].type !== sAttr[j].type || rAttr[j].value !== sAttr[j].value) { + match = false; + break; + } + } + if (match) { + return r; + } + } + return null; + }, + decrypt: function(recipient, privKey) { + if (msg.encryptedContent.key === void 0 && recipient !== void 0 && privKey !== void 0) { + switch (recipient.encryptedContent.algorithm) { + case forge3.pki.oids.rsaEncryption: + case forge3.pki.oids.desCBC: + var key = privKey.decrypt(recipient.encryptedContent.content); + msg.encryptedContent.key = forge3.util.createBuffer(key); + break; + default: + throw new Error("Unsupported asymmetric cipher, OID " + recipient.encryptedContent.algorithm); + } + } + _decryptContent(msg); + }, + addRecipient: function(cert) { + msg.recipients.push({ + version: 0, + issuer: cert.issuer.attributes, + serialNumber: cert.serialNumber, + encryptedContent: { + algorithm: forge3.pki.oids.rsaEncryption, + key: cert.publicKey + } + }); + }, + encrypt: function(key, cipher) { + if (msg.encryptedContent.content === void 0) { + cipher = cipher || msg.encryptedContent.algorithm; + key = key || msg.encryptedContent.key; + var keyLen, ivLen, ciphFn; + switch (cipher) { + case forge3.pki.oids["aes128-CBC"]: + keyLen = 16; + ivLen = 16; + ciphFn = forge3.aes.createEncryptionCipher; + break; + case forge3.pki.oids["aes192-CBC"]: + keyLen = 24; + ivLen = 16; + ciphFn = forge3.aes.createEncryptionCipher; + break; + case forge3.pki.oids["aes256-CBC"]: + keyLen = 32; + ivLen = 16; + ciphFn = forge3.aes.createEncryptionCipher; + break; + case forge3.pki.oids["des-EDE3-CBC"]: + keyLen = 24; + ivLen = 8; + ciphFn = forge3.des.createEncryptionCipher; + break; + default: + throw new Error("Unsupported symmetric cipher, OID " + cipher); + } + if (key === void 0) { + key = forge3.util.createBuffer(forge3.random.getBytes(keyLen)); + } else if (key.length() != keyLen) { + throw new Error("Symmetric key has wrong length; got " + key.length() + " bytes, expected " + keyLen + "."); + } + msg.encryptedContent.algorithm = cipher; + msg.encryptedContent.key = key; + msg.encryptedContent.parameter = forge3.util.createBuffer(forge3.random.getBytes(ivLen)); + var ciph = ciphFn(key); + ciph.start(msg.encryptedContent.parameter.copy()); + ciph.update(msg.content); + if (!ciph.finish()) { + throw new Error("Symmetric encryption failed."); + } + msg.encryptedContent.content = ciph.output; + } + for (var i = 0; i < msg.recipients.length; ++i) { + var recipient = msg.recipients[i]; + if (recipient.encryptedContent.content !== void 0) { + continue; + } + switch (recipient.encryptedContent.algorithm) { + case forge3.pki.oids.rsaEncryption: + recipient.encryptedContent.content = recipient.encryptedContent.key.encrypt(msg.encryptedContent.key.data); + break; + default: + throw new Error("Unsupported asymmetric cipher, OID " + recipient.encryptedContent.algorithm); + } + } + } + }; + return msg; + }; + function _recipientFromAsn1(obj) { + var capture = {}; + var errors = []; + if (!asn1.validate(obj, p7.asn1.recipientInfoValidator, capture, errors)) { + var error = new Error("Cannot read PKCS#7 RecipientInfo. ASN.1 object is not an PKCS#7 RecipientInfo."); + error.errors = errors; + throw error; + } + return { + version: capture.version.charCodeAt(0), + issuer: forge3.pki.RDNAttributesAsArray(capture.issuer), + serialNumber: forge3.util.createBuffer(capture.serial).toHex(), + encryptedContent: { + algorithm: asn1.derToOid(capture.encAlgorithm), + parameter: capture.encParameter ? capture.encParameter.value : void 0, + content: capture.encKey + } + }; + } + function _recipientToAsn1(obj) { + return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, asn1.integerToDer(obj.version).getBytes()), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + forge3.pki.distinguishedNameToAsn1({ attributes: obj.issuer }), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, forge3.util.hexToBytes(obj.serialNumber)) + ]), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(obj.encryptedContent.algorithm).getBytes()), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, "") + ]), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, obj.encryptedContent.content) + ]); + } + function _recipientsFromAsn1(infos) { + var ret = []; + for (var i = 0; i < infos.length; ++i) { + ret.push(_recipientFromAsn1(infos[i])); + } + return ret; + } + function _recipientsToAsn1(recipients) { + var ret = []; + for (var i = 0; i < recipients.length; ++i) { + ret.push(_recipientToAsn1(recipients[i])); + } + return ret; + } + function _signerToAsn1(obj) { + var rval = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, asn1.integerToDer(obj.version).getBytes()), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + forge3.pki.distinguishedNameToAsn1({ attributes: obj.issuer }), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.INTEGER, false, forge3.util.hexToBytes(obj.serialNumber)) + ]), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(obj.digestAlgorithm).getBytes()), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, "") + ]) + ]); + if (obj.authenticatedAttributesAsn1) { + rval.value.push(obj.authenticatedAttributesAsn1); + } + rval.value.push(asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(obj.signatureAlgorithm).getBytes()), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.NULL, false, "") + ])); + rval.value.push(asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, obj.signature)); + if (obj.unauthenticatedAttributes.length > 0) { + var attrsAsn1 = asn1.create(asn1.Class.CONTEXT_SPECIFIC, 1, true, []); + for (var i = 0; i < obj.unauthenticatedAttributes.length; ++i) { + var attr = obj.unauthenticatedAttributes[i]; + attrsAsn1.values.push(_attributeToAsn1(attr)); + } + rval.value.push(attrsAsn1); + } + return rval; + } + function _signersToAsn1(signers) { + var ret = []; + for (var i = 0; i < signers.length; ++i) { + ret.push(_signerToAsn1(signers[i])); + } + return ret; + } + function _attributeToAsn1(attr) { + var value; + if (attr.type === forge3.pki.oids.contentType) { + value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(attr.value).getBytes()); + } else if (attr.type === forge3.pki.oids.messageDigest) { + value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, attr.value.bytes()); + } else if (attr.type === forge3.pki.oids.signingTime) { + var jan_1_1950 = new Date("1950-01-01T00:00:00Z"); + var jan_1_2050 = new Date("2050-01-01T00:00:00Z"); + var date = attr.value; + if (typeof date === "string") { + var timestamp = Date.parse(date); + if (!isNaN(timestamp)) { + date = new Date(timestamp); + } else if (date.length === 13) { + date = asn1.utcTimeToDate(date); + } else { + date = asn1.generalizedTimeToDate(date); + } + } + if (date >= jan_1_1950 && date < jan_1_2050) { + value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.UTCTIME, false, asn1.dateToUtcTime(date)); + } else { + value = asn1.create(asn1.Class.UNIVERSAL, asn1.Type.GENERALIZEDTIME, false, asn1.dateToGeneralizedTime(date)); + } + } + return asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(attr.type).getBytes()), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SET, true, [ + value + ]) + ]); + } + function _encryptedContentToAsn1(ec) { + return [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(forge3.pki.oids.data).getBytes()), + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.SEQUENCE, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OID, false, asn1.oidToDer(ec.algorithm).getBytes()), + !ec.parameter ? void 0 : asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, ec.parameter.getBytes()) + ]), + asn1.create(asn1.Class.CONTEXT_SPECIFIC, 0, true, [ + asn1.create(asn1.Class.UNIVERSAL, asn1.Type.OCTETSTRING, false, ec.content.getBytes()) + ]) + ]; + } + function _fromAsn1(msg, obj, validator) { + var capture = {}; + var errors = []; + if (!asn1.validate(obj, validator, capture, errors)) { + var error = new Error("Cannot read PKCS#7 message. ASN.1 object is not a supported PKCS#7 message."); + error.errors = error; + throw error; + } + var contentType = asn1.derToOid(capture.contentType); + if (contentType !== forge3.pki.oids.data) { + throw new Error("Unsupported PKCS#7 message. Only wrapped ContentType Data supported."); + } + if (capture.encryptedContent) { + var content = ""; + if (forge3.util.isArray(capture.encryptedContent)) { + for (var i = 0; i < capture.encryptedContent.length; ++i) { + if (capture.encryptedContent[i].type !== asn1.Type.OCTETSTRING) { + throw new Error("Malformed PKCS#7 message, expecting encrypted content constructed of only OCTET STRING objects."); + } + content += capture.encryptedContent[i].value; + } + } else { + content = capture.encryptedContent; + } + msg.encryptedContent = { + algorithm: asn1.derToOid(capture.encAlgorithm), + parameter: forge3.util.createBuffer(capture.encParameter.value), + content: forge3.util.createBuffer(content) + }; + } + if (capture.content) { + var content = ""; + if (forge3.util.isArray(capture.content)) { + for (var i = 0; i < capture.content.length; ++i) { + if (capture.content[i].type !== asn1.Type.OCTETSTRING) { + throw new Error("Malformed PKCS#7 message, expecting content constructed of only OCTET STRING objects."); + } + content += capture.content[i].value; + } + } else { + content = capture.content; + } + msg.content = forge3.util.createBuffer(content); + } + msg.version = capture.version.charCodeAt(0); + msg.rawCapture = capture; + return capture; + } + function _decryptContent(msg) { + if (msg.encryptedContent.key === void 0) { + throw new Error("Symmetric key not available."); + } + if (msg.content === void 0) { + var ciph; + switch (msg.encryptedContent.algorithm) { + case forge3.pki.oids["aes128-CBC"]: + case forge3.pki.oids["aes192-CBC"]: + case forge3.pki.oids["aes256-CBC"]: + ciph = forge3.aes.createDecryptionCipher(msg.encryptedContent.key); + break; + case forge3.pki.oids["desCBC"]: + case forge3.pki.oids["des-EDE3-CBC"]: + ciph = forge3.des.createDecryptionCipher(msg.encryptedContent.key); + break; + default: + throw new Error("Unsupported symmetric cipher, OID " + msg.encryptedContent.algorithm); + } + ciph.start(msg.encryptedContent.parameter); + ciph.update(msg.encryptedContent.content); + if (!ciph.finish()) { + throw new Error("Symmetric decryption failed."); + } + msg.content = ciph.output; + } + } + } +}); + +// node_modules/node-forge/lib/ssh.js +var require_ssh = __commonJS({ + "node_modules/node-forge/lib/ssh.js"(exports2, module2) { + var forge3 = require_forge(); + require_aes(); + require_hmac(); + require_md5(); + require_sha1(); + require_util(); + var ssh = module2.exports = forge3.ssh = forge3.ssh || {}; + ssh.privateKeyToPutty = function(privateKey, passphrase, comment) { + comment = comment || ""; + passphrase = passphrase || ""; + var algorithm = "ssh-rsa"; + var encryptionAlgorithm = passphrase === "" ? "none" : "aes256-cbc"; + var ppk = "PuTTY-User-Key-File-2: " + algorithm + "\r\n"; + ppk += "Encryption: " + encryptionAlgorithm + "\r\n"; + ppk += "Comment: " + comment + "\r\n"; + var pubbuffer = forge3.util.createBuffer(); + _addStringToBuffer(pubbuffer, algorithm); + _addBigIntegerToBuffer(pubbuffer, privateKey.e); + _addBigIntegerToBuffer(pubbuffer, privateKey.n); + var pub = forge3.util.encode64(pubbuffer.bytes(), 64); + var length = Math.floor(pub.length / 66) + 1; + ppk += "Public-Lines: " + length + "\r\n"; + ppk += pub; + var privbuffer = forge3.util.createBuffer(); + _addBigIntegerToBuffer(privbuffer, privateKey.d); + _addBigIntegerToBuffer(privbuffer, privateKey.p); + _addBigIntegerToBuffer(privbuffer, privateKey.q); + _addBigIntegerToBuffer(privbuffer, privateKey.qInv); + var priv; + if (!passphrase) { + priv = forge3.util.encode64(privbuffer.bytes(), 64); + } else { + var encLen = privbuffer.length() + 16 - 1; + encLen -= encLen % 16; + var padding = _sha1(privbuffer.bytes()); + padding.truncate(padding.length() - encLen + privbuffer.length()); + privbuffer.putBuffer(padding); + var aeskey = forge3.util.createBuffer(); + aeskey.putBuffer(_sha1("\0\0\0\0", passphrase)); + aeskey.putBuffer(_sha1("\0\0\0", passphrase)); + var cipher = forge3.aes.createEncryptionCipher(aeskey.truncate(8), "CBC"); + cipher.start(forge3.util.createBuffer().fillWithByte(0, 16)); + cipher.update(privbuffer.copy()); + cipher.finish(); + var encrypted = cipher.output; + encrypted.truncate(16); + priv = forge3.util.encode64(encrypted.bytes(), 64); + } + length = Math.floor(priv.length / 66) + 1; + ppk += "\r\nPrivate-Lines: " + length + "\r\n"; + ppk += priv; + var mackey = _sha1("putty-private-key-file-mac-key", passphrase); + var macbuffer = forge3.util.createBuffer(); + _addStringToBuffer(macbuffer, algorithm); + _addStringToBuffer(macbuffer, encryptionAlgorithm); + _addStringToBuffer(macbuffer, comment); + macbuffer.putInt32(pubbuffer.length()); + macbuffer.putBuffer(pubbuffer); + macbuffer.putInt32(privbuffer.length()); + macbuffer.putBuffer(privbuffer); + var hmac = forge3.hmac.create(); + hmac.start("sha1", mackey); + hmac.update(macbuffer.bytes()); + ppk += "\r\nPrivate-MAC: " + hmac.digest().toHex() + "\r\n"; + return ppk; + }; + ssh.publicKeyToOpenSSH = function(key, comment) { + var type = "ssh-rsa"; + comment = comment || ""; + var buffer = forge3.util.createBuffer(); + _addStringToBuffer(buffer, type); + _addBigIntegerToBuffer(buffer, key.e); + _addBigIntegerToBuffer(buffer, key.n); + return type + " " + forge3.util.encode64(buffer.bytes()) + " " + comment; + }; + ssh.privateKeyToOpenSSH = function(privateKey, passphrase) { + if (!passphrase) { + return forge3.pki.privateKeyToPem(privateKey); + } + return forge3.pki.encryptRsaPrivateKey(privateKey, passphrase, { legacy: true, algorithm: "aes128" }); + }; + ssh.getPublicKeyFingerprint = function(key, options) { + options = options || {}; + var md = options.md || forge3.md.md5.create(); + var type = "ssh-rsa"; + var buffer = forge3.util.createBuffer(); + _addStringToBuffer(buffer, type); + _addBigIntegerToBuffer(buffer, key.e); + _addBigIntegerToBuffer(buffer, key.n); + md.start(); + md.update(buffer.getBytes()); + var digest = md.digest(); + if (options.encoding === "hex") { + var hex = digest.toHex(); + if (options.delimiter) { + return hex.match(/.{2}/g).join(options.delimiter); + } + return hex; + } else if (options.encoding === "binary") { + return digest.getBytes(); + } else if (options.encoding) { + throw new Error('Unknown encoding "' + options.encoding + '".'); + } + return digest; + }; + function _addBigIntegerToBuffer(buffer, val) { + var hexVal = val.toString(16); + if (hexVal[0] >= "8") { + hexVal = "00" + hexVal; + } + var bytes = forge3.util.hexToBytes(hexVal); + buffer.putInt32(bytes.length); + buffer.putBytes(bytes); + } + function _addStringToBuffer(buffer, val) { + buffer.putInt32(val.length); + buffer.putString(val); + } + function _sha1() { + var sha = forge3.md.sha1.create(); + var num = arguments.length; + for (var i = 0; i < num; ++i) { + sha.update(arguments[i]); + } + return sha.digest(); + } + } +}); + +// node_modules/node-forge/lib/index.js +var require_lib = __commonJS({ + "node_modules/node-forge/lib/index.js"(exports2, module2) { + module2.exports = require_forge(); + require_aes(); + require_aesCipherSuites(); + require_asn1(); + require_cipher(); + require_des(); + require_ed25519(); + require_hmac(); + require_kem(); + require_log(); + require_md_all(); + require_mgf1(); + require_pbkdf2(); + require_pem(); + require_pkcs1(); + require_pkcs12(); + require_pkcs7(); + require_pki(); + require_prime(); + require_prng(); + require_pss(); + require_random(); + require_rc2(); + require_ssh(); + require_tls(); + require_util(); + } +}); + +// node_modules/obsidian-daily-notes-interface/dist/main.js +var require_main = __commonJS({ + "node_modules/obsidian-daily-notes-interface/dist/main.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + var obsidian = require("obsidian"); + var DEFAULT_DAILY_NOTE_FORMAT = "YYYY-MM-DD"; + var DEFAULT_WEEKLY_NOTE_FORMAT = "gggg-[W]ww"; + var DEFAULT_MONTHLY_NOTE_FORMAT = "YYYY-MM"; + var DEFAULT_QUARTERLY_NOTE_FORMAT = "YYYY-[Q]Q"; + var DEFAULT_YEARLY_NOTE_FORMAT = "YYYY"; + function shouldUsePeriodicNotesSettings(periodicity) { + var _a, _b; + const periodicNotes2 = window.app.plugins.getPlugin("periodic-notes"); + return periodicNotes2 && ((_b = (_a = periodicNotes2.settings) == null ? void 0 : _a[periodicity]) == null ? void 0 : _b.enabled); + } + function getDailyNoteSettings() { + var _a, _b, _c, _d; + try { + const { internalPlugins, plugins } = window.app; + if (shouldUsePeriodicNotesSettings("daily")) { + const { format: format2, folder: folder2, template: template2 } = ((_b = (_a = plugins.getPlugin("periodic-notes")) == null ? void 0 : _a.settings) == null ? void 0 : _b.daily) || {}; + return { + format: format2 || DEFAULT_DAILY_NOTE_FORMAT, + folder: (folder2 == null ? void 0 : folder2.trim()) || "", + template: (template2 == null ? void 0 : template2.trim()) || "" + }; + } + const { folder, format, template } = ((_d = (_c = internalPlugins.getPluginById("daily-notes")) == null ? void 0 : _c.instance) == null ? void 0 : _d.options) || {}; + return { + format: format || DEFAULT_DAILY_NOTE_FORMAT, + folder: (folder == null ? void 0 : folder.trim()) || "", + template: (template == null ? void 0 : template.trim()) || "" + }; + } catch (err) { + console.info("No custom daily note settings found!", err); + } + } + function getWeeklyNoteSettings() { + var _a, _b, _c, _d, _e, _f, _g; + try { + const pluginManager = window.app.plugins; + const calendarSettings = (_a = pluginManager.getPlugin("calendar")) == null ? void 0 : _a.options; + const periodicNotesSettings = (_c = (_b = pluginManager.getPlugin("periodic-notes")) == null ? void 0 : _b.settings) == null ? void 0 : _c.weekly; + if (shouldUsePeriodicNotesSettings("weekly")) { + return { + format: periodicNotesSettings.format || DEFAULT_WEEKLY_NOTE_FORMAT, + folder: ((_d = periodicNotesSettings.folder) == null ? void 0 : _d.trim()) || "", + template: ((_e = periodicNotesSettings.template) == null ? void 0 : _e.trim()) || "" + }; + } + const settings = calendarSettings || {}; + return { + format: settings.weeklyNoteFormat || DEFAULT_WEEKLY_NOTE_FORMAT, + folder: ((_f = settings.weeklyNoteFolder) == null ? void 0 : _f.trim()) || "", + template: ((_g = settings.weeklyNoteTemplate) == null ? void 0 : _g.trim()) || "" + }; + } catch (err) { + console.info("No custom weekly note settings found!", err); + } + } + function getMonthlyNoteSettings() { + var _a, _b, _c, _d; + const pluginManager = window.app.plugins; + try { + const settings = shouldUsePeriodicNotesSettings("monthly") && ((_b = (_a = pluginManager.getPlugin("periodic-notes")) == null ? void 0 : _a.settings) == null ? void 0 : _b.monthly) || {}; + return { + format: settings.format || DEFAULT_MONTHLY_NOTE_FORMAT, + folder: ((_c = settings.folder) == null ? void 0 : _c.trim()) || "", + template: ((_d = settings.template) == null ? void 0 : _d.trim()) || "" + }; + } catch (err) { + console.info("No custom monthly note settings found!", err); + } + } + function getQuarterlyNoteSettings() { + var _a, _b, _c, _d; + const pluginManager = window.app.plugins; + try { + const settings = shouldUsePeriodicNotesSettings("quarterly") && ((_b = (_a = pluginManager.getPlugin("periodic-notes")) == null ? void 0 : _a.settings) == null ? void 0 : _b.quarterly) || {}; + return { + format: settings.format || DEFAULT_QUARTERLY_NOTE_FORMAT, + folder: ((_c = settings.folder) == null ? void 0 : _c.trim()) || "", + template: ((_d = settings.template) == null ? void 0 : _d.trim()) || "" + }; + } catch (err) { + console.info("No custom quarterly note settings found!", err); + } + } + function getYearlyNoteSettings() { + var _a, _b, _c, _d; + const pluginManager = window.app.plugins; + try { + const settings = shouldUsePeriodicNotesSettings("yearly") && ((_b = (_a = pluginManager.getPlugin("periodic-notes")) == null ? void 0 : _a.settings) == null ? void 0 : _b.yearly) || {}; + return { + format: settings.format || DEFAULT_YEARLY_NOTE_FORMAT, + folder: ((_c = settings.folder) == null ? void 0 : _c.trim()) || "", + template: ((_d = settings.template) == null ? void 0 : _d.trim()) || "" + }; + } catch (err) { + console.info("No custom yearly note settings found!", err); + } + } + function join(...partSegments) { + let parts = []; + for (let i = 0, l = partSegments.length; i < l; i++) { + parts = parts.concat(partSegments[i].split("/")); + } + const newParts = []; + for (let i = 0, l = parts.length; i < l; i++) { + const part = parts[i]; + if (!part || part === ".") + continue; + else + newParts.push(part); + } + if (parts[0] === "") + newParts.unshift(""); + return newParts.join("/"); + } + function basename(fullPath) { + let base = fullPath.substring(fullPath.lastIndexOf("/") + 1); + if (base.lastIndexOf(".") != -1) + base = base.substring(0, base.lastIndexOf(".")); + return base; + } + function ensureFolderExists(path2) { + return __async(this, null, function* () { + const dirs = path2.replace(/\\/g, "/").split("/"); + dirs.pop(); + if (dirs.length) { + const dir = join(...dirs); + if (!window.app.vault.getAbstractFileByPath(dir)) { + yield window.app.vault.createFolder(dir); + } + } + }); + } + function getNotePath(directory, filename) { + return __async(this, null, function* () { + if (!filename.endsWith(".md")) { + filename += ".md"; + } + const path2 = obsidian.normalizePath(join(directory, filename)); + yield ensureFolderExists(path2); + return path2; + }); + } + function getTemplateInfo(template) { + return __async(this, null, function* () { + const { metadataCache, vault } = window.app; + const templatePath = obsidian.normalizePath(template); + if (templatePath === "/") { + return Promise.resolve(["", null]); + } + try { + const templateFile = metadataCache.getFirstLinkpathDest(templatePath, ""); + const contents = yield vault.cachedRead(templateFile); + const IFoldInfo = window.app.foldManager.load(templateFile); + return [contents, IFoldInfo]; + } catch (err) { + console.error(`Failed to read the daily note template '${templatePath}'`, err); + new obsidian.Notice("Failed to read the daily note template"); + return ["", null]; + } + }); + } + function getDateUID(date, granularity = "day") { + const ts = date.clone().startOf(granularity).format(); + return `${granularity}-${ts}`; + } + function removeEscapedCharacters(format) { + return format.replace(/\[[^\]]*\]/g, ""); + } + function isFormatAmbiguous(format, granularity) { + if (granularity === "week") { + const cleanFormat = removeEscapedCharacters(format); + return /w{1,2}/i.test(cleanFormat) && (/M{1,4}/.test(cleanFormat) || /D{1,4}/.test(cleanFormat)); + } + return false; + } + function getDateFromFile(file, granularity) { + return getDateFromFilename(file.basename, granularity); + } + function getDateFromPath(path2, granularity) { + return getDateFromFilename(basename(path2), granularity); + } + function getDateFromFilename(filename, granularity) { + const getSettings = { + day: getDailyNoteSettings, + week: getWeeklyNoteSettings, + month: getMonthlyNoteSettings, + quarter: getQuarterlyNoteSettings, + year: getYearlyNoteSettings + }; + const format = getSettings[granularity]().format.split("/").pop(); + const noteDate = window.moment(filename, format, true); + if (!noteDate.isValid()) { + return null; + } + if (isFormatAmbiguous(format, granularity)) { + if (granularity === "week") { + const cleanFormat = removeEscapedCharacters(format); + if (/w{1,2}/i.test(cleanFormat)) { + return window.moment(filename, format.replace(/M{1,4}/g, "").replace(/D{1,4}/g, ""), false); + } + } + } + return noteDate; + } + var DailyNotesFolderMissingError = class extends Error { + }; + function createDailyNote(date) { + return __async(this, null, function* () { + const app = window.app; + const { vault } = app; + const moment = window.moment; + const { template, format, folder } = getDailyNoteSettings(); + const [templateContents, IFoldInfo] = yield getTemplateInfo(template); + const filename = date.format(format); + const normalizedPath = yield getNotePath(folder, filename); + try { + const createdFile = yield vault.create(normalizedPath, templateContents.replace(/{{\s*date\s*}}/gi, filename).replace(/{{\s*time\s*}}/gi, moment().format("HH:mm")).replace(/{{\s*title\s*}}/gi, filename).replace(/{{\s*(date|time)\s*(([+-]\d+)([yqmwdhs]))?\s*(:.+?)?}}/gi, (_, _timeOrDate, calc, timeDelta, unit, momentFormat) => { + const now = moment(); + const currentDate = date.clone().set({ + hour: now.get("hour"), + minute: now.get("minute"), + second: now.get("second") + }); + if (calc) { + currentDate.add(parseInt(timeDelta, 10), unit); + } + if (momentFormat) { + return currentDate.format(momentFormat.substring(1).trim()); + } + return currentDate.format(format); + }).replace(/{{\s*yesterday\s*}}/gi, date.clone().subtract(1, "day").format(format)).replace(/{{\s*tomorrow\s*}}/gi, date.clone().add(1, "d").format(format))); + app.foldManager.save(createdFile, IFoldInfo); + return createdFile; + } catch (err) { + console.error(`Failed to create file: '${normalizedPath}'`, err); + new obsidian.Notice("Unable to create new file."); + } + }); + } + function getDailyNote(date, dailyNotes) { + var _a; + return (_a = dailyNotes[getDateUID(date, "day")]) != null ? _a : null; + } + function getAllDailyNotes() { + const { vault } = window.app; + const { folder } = getDailyNoteSettings(); + const dailyNotesFolder = vault.getAbstractFileByPath(obsidian.normalizePath(folder)); + if (!dailyNotesFolder) { + throw new DailyNotesFolderMissingError("Failed to find daily notes folder"); + } + const dailyNotes = {}; + obsidian.Vault.recurseChildren(dailyNotesFolder, (note) => { + if (note instanceof obsidian.TFile) { + const date = getDateFromFile(note, "day"); + if (date) { + const dateString = getDateUID(date, "day"); + dailyNotes[dateString] = note; + } + } + }); + return dailyNotes; + } + var WeeklyNotesFolderMissingError = class extends Error { + }; + function getDaysOfWeek() { + const { moment } = window; + let weekStart = moment.localeData()._week.dow; + const daysOfWeek = [ + "sunday", + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday" + ]; + while (weekStart) { + daysOfWeek.push(daysOfWeek.shift()); + weekStart--; + } + return daysOfWeek; + } + function getDayOfWeekNumericalValue(dayOfWeekName) { + return getDaysOfWeek().indexOf(dayOfWeekName.toLowerCase()); + } + function createWeeklyNote(date) { + return __async(this, null, function* () { + const { vault } = window.app; + const { template, format, folder } = getWeeklyNoteSettings(); + const [templateContents, IFoldInfo] = yield getTemplateInfo(template); + const filename = date.format(format); + const normalizedPath = yield getNotePath(folder, filename); + try { + const createdFile = yield vault.create(normalizedPath, templateContents.replace(/{{\s*(date|time)\s*(([+-]\d+)([yqmwdhs]))?\s*(:.+?)?}}/gi, (_, _timeOrDate, calc, timeDelta, unit, momentFormat) => { + const now = window.moment(); + const currentDate = date.clone().set({ + hour: now.get("hour"), + minute: now.get("minute"), + second: now.get("second") + }); + if (calc) { + currentDate.add(parseInt(timeDelta, 10), unit); + } + if (momentFormat) { + return currentDate.format(momentFormat.substring(1).trim()); + } + return currentDate.format(format); + }).replace(/{{\s*title\s*}}/gi, filename).replace(/{{\s*time\s*}}/gi, window.moment().format("HH:mm")).replace(/{{\s*(sunday|monday|tuesday|wednesday|thursday|friday|saturday)\s*:(.*?)}}/gi, (_, dayOfWeek, momentFormat) => { + const day = getDayOfWeekNumericalValue(dayOfWeek); + return date.weekday(day).format(momentFormat.trim()); + })); + window.app.foldManager.save(createdFile, IFoldInfo); + return createdFile; + } catch (err) { + console.error(`Failed to create file: '${normalizedPath}'`, err); + new obsidian.Notice("Unable to create new file."); + } + }); + } + function getWeeklyNote(date, weeklyNotes) { + var _a; + return (_a = weeklyNotes[getDateUID(date, "week")]) != null ? _a : null; + } + function getAllWeeklyNotes() { + const weeklyNotes = {}; + if (!appHasWeeklyNotesPluginLoaded()) { + return weeklyNotes; + } + const { vault } = window.app; + const { folder } = getWeeklyNoteSettings(); + const weeklyNotesFolder = vault.getAbstractFileByPath(obsidian.normalizePath(folder)); + if (!weeklyNotesFolder) { + throw new WeeklyNotesFolderMissingError("Failed to find weekly notes folder"); + } + obsidian.Vault.recurseChildren(weeklyNotesFolder, (note) => { + if (note instanceof obsidian.TFile) { + const date = getDateFromFile(note, "week"); + if (date) { + const dateString = getDateUID(date, "week"); + weeklyNotes[dateString] = note; + } + } + }); + return weeklyNotes; + } + var MonthlyNotesFolderMissingError = class extends Error { + }; + function createMonthlyNote(date) { + return __async(this, null, function* () { + const { vault } = window.app; + const { template, format, folder } = getMonthlyNoteSettings(); + const [templateContents, IFoldInfo] = yield getTemplateInfo(template); + const filename = date.format(format); + const normalizedPath = yield getNotePath(folder, filename); + try { + const createdFile = yield vault.create(normalizedPath, templateContents.replace(/{{\s*(date|time)\s*(([+-]\d+)([yqmwdhs]))?\s*(:.+?)?}}/gi, (_, _timeOrDate, calc, timeDelta, unit, momentFormat) => { + const now = window.moment(); + const currentDate = date.clone().set({ + hour: now.get("hour"), + minute: now.get("minute"), + second: now.get("second") + }); + if (calc) { + currentDate.add(parseInt(timeDelta, 10), unit); + } + if (momentFormat) { + return currentDate.format(momentFormat.substring(1).trim()); + } + return currentDate.format(format); + }).replace(/{{\s*date\s*}}/gi, filename).replace(/{{\s*time\s*}}/gi, window.moment().format("HH:mm")).replace(/{{\s*title\s*}}/gi, filename)); + window.app.foldManager.save(createdFile, IFoldInfo); + return createdFile; + } catch (err) { + console.error(`Failed to create file: '${normalizedPath}'`, err); + new obsidian.Notice("Unable to create new file."); + } + }); + } + function getMonthlyNote(date, monthlyNotes) { + var _a; + return (_a = monthlyNotes[getDateUID(date, "month")]) != null ? _a : null; + } + function getAllMonthlyNotes() { + const monthlyNotes = {}; + if (!appHasMonthlyNotesPluginLoaded()) { + return monthlyNotes; + } + const { vault } = window.app; + const { folder } = getMonthlyNoteSettings(); + const monthlyNotesFolder = vault.getAbstractFileByPath(obsidian.normalizePath(folder)); + if (!monthlyNotesFolder) { + throw new MonthlyNotesFolderMissingError("Failed to find monthly notes folder"); + } + obsidian.Vault.recurseChildren(monthlyNotesFolder, (note) => { + if (note instanceof obsidian.TFile) { + const date = getDateFromFile(note, "month"); + if (date) { + const dateString = getDateUID(date, "month"); + monthlyNotes[dateString] = note; + } + } + }); + return monthlyNotes; + } + var QuarterlyNotesFolderMissingError = class extends Error { + }; + function createQuarterlyNote(date) { + return __async(this, null, function* () { + const { vault } = window.app; + const { template, format, folder } = getQuarterlyNoteSettings(); + const [templateContents, IFoldInfo] = yield getTemplateInfo(template); + const filename = date.format(format); + const normalizedPath = yield getNotePath(folder, filename); + try { + const createdFile = yield vault.create(normalizedPath, templateContents.replace(/{{\s*(date|time)\s*(([+-]\d+)([yqmwdhs]))?\s*(:.+?)?}}/gi, (_, _timeOrDate, calc, timeDelta, unit, momentFormat) => { + const now = window.moment(); + const currentDate = date.clone().set({ + hour: now.get("hour"), + minute: now.get("minute"), + second: now.get("second") + }); + if (calc) { + currentDate.add(parseInt(timeDelta, 10), unit); + } + if (momentFormat) { + return currentDate.format(momentFormat.substring(1).trim()); + } + return currentDate.format(format); + }).replace(/{{\s*date\s*}}/gi, filename).replace(/{{\s*time\s*}}/gi, window.moment().format("HH:mm")).replace(/{{\s*title\s*}}/gi, filename)); + window.app.foldManager.save(createdFile, IFoldInfo); + return createdFile; + } catch (err) { + console.error(`Failed to create file: '${normalizedPath}'`, err); + new obsidian.Notice("Unable to create new file."); + } + }); + } + function getQuarterlyNote(date, quarterly) { + var _a; + return (_a = quarterly[getDateUID(date, "quarter")]) != null ? _a : null; + } + function getAllQuarterlyNotes() { + const quarterly = {}; + if (!appHasQuarterlyNotesPluginLoaded()) { + return quarterly; + } + const { vault } = window.app; + const { folder } = getQuarterlyNoteSettings(); + const quarterlyFolder = vault.getAbstractFileByPath(obsidian.normalizePath(folder)); + if (!quarterlyFolder) { + throw new QuarterlyNotesFolderMissingError("Failed to find quarterly notes folder"); + } + obsidian.Vault.recurseChildren(quarterlyFolder, (note) => { + if (note instanceof obsidian.TFile) { + const date = getDateFromFile(note, "quarter"); + if (date) { + const dateString = getDateUID(date, "quarter"); + quarterly[dateString] = note; + } + } + }); + return quarterly; + } + var YearlyNotesFolderMissingError = class extends Error { + }; + function createYearlyNote(date) { + return __async(this, null, function* () { + const { vault } = window.app; + const { template, format, folder } = getYearlyNoteSettings(); + const [templateContents, IFoldInfo] = yield getTemplateInfo(template); + const filename = date.format(format); + const normalizedPath = yield getNotePath(folder, filename); + try { + const createdFile = yield vault.create(normalizedPath, templateContents.replace(/{{\s*(date|time)\s*(([+-]\d+)([yqmwdhs]))?\s*(:.+?)?}}/gi, (_, _timeOrDate, calc, timeDelta, unit, momentFormat) => { + const now = window.moment(); + const currentDate = date.clone().set({ + hour: now.get("hour"), + minute: now.get("minute"), + second: now.get("second") + }); + if (calc) { + currentDate.add(parseInt(timeDelta, 10), unit); + } + if (momentFormat) { + return currentDate.format(momentFormat.substring(1).trim()); + } + return currentDate.format(format); + }).replace(/{{\s*date\s*}}/gi, filename).replace(/{{\s*time\s*}}/gi, window.moment().format("HH:mm")).replace(/{{\s*title\s*}}/gi, filename)); + window.app.foldManager.save(createdFile, IFoldInfo); + return createdFile; + } catch (err) { + console.error(`Failed to create file: '${normalizedPath}'`, err); + new obsidian.Notice("Unable to create new file."); + } + }); + } + function getYearlyNote(date, yearlyNotes) { + var _a; + return (_a = yearlyNotes[getDateUID(date, "year")]) != null ? _a : null; + } + function getAllYearlyNotes() { + const yearlyNotes = {}; + if (!appHasYearlyNotesPluginLoaded()) { + return yearlyNotes; + } + const { vault } = window.app; + const { folder } = getYearlyNoteSettings(); + const yearlyNotesFolder = vault.getAbstractFileByPath(obsidian.normalizePath(folder)); + if (!yearlyNotesFolder) { + throw new YearlyNotesFolderMissingError("Failed to find yearly notes folder"); + } + obsidian.Vault.recurseChildren(yearlyNotesFolder, (note) => { + if (note instanceof obsidian.TFile) { + const date = getDateFromFile(note, "year"); + if (date) { + const dateString = getDateUID(date, "year"); + yearlyNotes[dateString] = note; + } + } + }); + return yearlyNotes; + } + function appHasDailyNotesPluginLoaded() { + var _a, _b; + const { app } = window; + const dailyNotesPlugin = app.internalPlugins.plugins["daily-notes"]; + if (dailyNotesPlugin && dailyNotesPlugin.enabled) { + return true; + } + const periodicNotes2 = app.plugins.getPlugin("periodic-notes"); + return periodicNotes2 && ((_b = (_a = periodicNotes2.settings) == null ? void 0 : _a.daily) == null ? void 0 : _b.enabled); + } + function appHasWeeklyNotesPluginLoaded() { + var _a, _b; + const { app } = window; + if (app.plugins.getPlugin("calendar")) { + return true; + } + const periodicNotes2 = app.plugins.getPlugin("periodic-notes"); + return periodicNotes2 && ((_b = (_a = periodicNotes2.settings) == null ? void 0 : _a.weekly) == null ? void 0 : _b.enabled); + } + function appHasMonthlyNotesPluginLoaded() { + var _a, _b; + const { app } = window; + const periodicNotes2 = app.plugins.getPlugin("periodic-notes"); + return periodicNotes2 && ((_b = (_a = periodicNotes2.settings) == null ? void 0 : _a.monthly) == null ? void 0 : _b.enabled); + } + function appHasQuarterlyNotesPluginLoaded() { + var _a, _b; + const { app } = window; + const periodicNotes2 = app.plugins.getPlugin("periodic-notes"); + return periodicNotes2 && ((_b = (_a = periodicNotes2.settings) == null ? void 0 : _a.quarterly) == null ? void 0 : _b.enabled); + } + function appHasYearlyNotesPluginLoaded() { + var _a, _b; + const { app } = window; + const periodicNotes2 = app.plugins.getPlugin("periodic-notes"); + return periodicNotes2 && ((_b = (_a = periodicNotes2.settings) == null ? void 0 : _a.yearly) == null ? void 0 : _b.enabled); + } + function getPeriodicNoteSettings(granularity) { + const getSettings = { + day: getDailyNoteSettings, + week: getWeeklyNoteSettings, + month: getMonthlyNoteSettings, + quarter: getQuarterlyNoteSettings, + year: getYearlyNoteSettings + }[granularity]; + return getSettings(); + } + function createPeriodicNote(granularity, date) { + const createFn = { + day: createDailyNote, + month: createMonthlyNote, + week: createWeeklyNote + }; + return createFn[granularity](date); + } + exports2.DEFAULT_DAILY_NOTE_FORMAT = DEFAULT_DAILY_NOTE_FORMAT; + exports2.DEFAULT_MONTHLY_NOTE_FORMAT = DEFAULT_MONTHLY_NOTE_FORMAT; + exports2.DEFAULT_QUARTERLY_NOTE_FORMAT = DEFAULT_QUARTERLY_NOTE_FORMAT; + exports2.DEFAULT_WEEKLY_NOTE_FORMAT = DEFAULT_WEEKLY_NOTE_FORMAT; + exports2.DEFAULT_YEARLY_NOTE_FORMAT = DEFAULT_YEARLY_NOTE_FORMAT; + exports2.appHasDailyNotesPluginLoaded = appHasDailyNotesPluginLoaded; + exports2.appHasMonthlyNotesPluginLoaded = appHasMonthlyNotesPluginLoaded; + exports2.appHasQuarterlyNotesPluginLoaded = appHasQuarterlyNotesPluginLoaded; + exports2.appHasWeeklyNotesPluginLoaded = appHasWeeklyNotesPluginLoaded; + exports2.appHasYearlyNotesPluginLoaded = appHasYearlyNotesPluginLoaded; + exports2.createDailyNote = createDailyNote; + exports2.createMonthlyNote = createMonthlyNote; + exports2.createPeriodicNote = createPeriodicNote; + exports2.createQuarterlyNote = createQuarterlyNote; + exports2.createWeeklyNote = createWeeklyNote; + exports2.createYearlyNote = createYearlyNote; + exports2.getAllDailyNotes = getAllDailyNotes; + exports2.getAllMonthlyNotes = getAllMonthlyNotes; + exports2.getAllQuarterlyNotes = getAllQuarterlyNotes; + exports2.getAllWeeklyNotes = getAllWeeklyNotes; + exports2.getAllYearlyNotes = getAllYearlyNotes; + exports2.getDailyNote = getDailyNote; + exports2.getDailyNoteSettings = getDailyNoteSettings; + exports2.getDateFromFile = getDateFromFile; + exports2.getDateFromPath = getDateFromPath; + exports2.getDateUID = getDateUID; + exports2.getMonthlyNote = getMonthlyNote; + exports2.getMonthlyNoteSettings = getMonthlyNoteSettings; + exports2.getPeriodicNoteSettings = getPeriodicNoteSettings; + exports2.getQuarterlyNote = getQuarterlyNote; + exports2.getQuarterlyNoteSettings = getQuarterlyNoteSettings; + exports2.getTemplateInfo = getTemplateInfo; + exports2.getWeeklyNote = getWeeklyNote; + exports2.getWeeklyNoteSettings = getWeeklyNoteSettings; + exports2.getYearlyNote = getYearlyNote; + exports2.getYearlyNoteSettings = getYearlyNoteSettings; + } +}); + +// node_modules/obsidian-dataview/lib/index.js +var require_lib2 = __commonJS({ + "node_modules/obsidian-dataview/lib/index.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + require("obsidian"); + var LuxonError = class extends Error { + }; + var InvalidDateTimeError = class extends LuxonError { + constructor(reason) { + super(`Invalid DateTime: ${reason.toMessage()}`); + } + }; + var InvalidIntervalError = class extends LuxonError { + constructor(reason) { + super(`Invalid Interval: ${reason.toMessage()}`); + } + }; + var InvalidDurationError = class extends LuxonError { + constructor(reason) { + super(`Invalid Duration: ${reason.toMessage()}`); + } + }; + var ConflictingSpecificationError = class extends LuxonError { + }; + var InvalidUnitError = class extends LuxonError { + constructor(unit) { + super(`Invalid unit ${unit}`); + } + }; + var InvalidArgumentError = class extends LuxonError { + }; + var ZoneIsAbstractError = class extends LuxonError { + constructor() { + super("Zone is an abstract class"); + } + }; + var n = "numeric"; + var s = "short"; + var l = "long"; + var DATE_SHORT = { + year: n, + month: n, + day: n + }; + var DATE_MED = { + year: n, + month: s, + day: n + }; + var DATE_MED_WITH_WEEKDAY = { + year: n, + month: s, + day: n, + weekday: s + }; + var DATE_FULL = { + year: n, + month: l, + day: n + }; + var DATE_HUGE = { + year: n, + month: l, + day: n, + weekday: l + }; + var TIME_SIMPLE = { + hour: n, + minute: n + }; + var TIME_WITH_SECONDS = { + hour: n, + minute: n, + second: n + }; + var TIME_WITH_SHORT_OFFSET = { + hour: n, + minute: n, + second: n, + timeZoneName: s + }; + var TIME_WITH_LONG_OFFSET = { + hour: n, + minute: n, + second: n, + timeZoneName: l + }; + var TIME_24_SIMPLE = { + hour: n, + minute: n, + hourCycle: "h23" + }; + var TIME_24_WITH_SECONDS = { + hour: n, + minute: n, + second: n, + hourCycle: "h23" + }; + var TIME_24_WITH_SHORT_OFFSET = { + hour: n, + minute: n, + second: n, + hourCycle: "h23", + timeZoneName: s + }; + var TIME_24_WITH_LONG_OFFSET = { + hour: n, + minute: n, + second: n, + hourCycle: "h23", + timeZoneName: l + }; + var DATETIME_SHORT = { + year: n, + month: n, + day: n, + hour: n, + minute: n + }; + var DATETIME_SHORT_WITH_SECONDS = { + year: n, + month: n, + day: n, + hour: n, + minute: n, + second: n + }; + var DATETIME_MED = { + year: n, + month: s, + day: n, + hour: n, + minute: n + }; + var DATETIME_MED_WITH_SECONDS = { + year: n, + month: s, + day: n, + hour: n, + minute: n, + second: n + }; + var DATETIME_MED_WITH_WEEKDAY = { + year: n, + month: s, + day: n, + weekday: s, + hour: n, + minute: n + }; + var DATETIME_FULL = { + year: n, + month: l, + day: n, + hour: n, + minute: n, + timeZoneName: s + }; + var DATETIME_FULL_WITH_SECONDS = { + year: n, + month: l, + day: n, + hour: n, + minute: n, + second: n, + timeZoneName: s + }; + var DATETIME_HUGE = { + year: n, + month: l, + day: n, + weekday: l, + hour: n, + minute: n, + timeZoneName: l + }; + var DATETIME_HUGE_WITH_SECONDS = { + year: n, + month: l, + day: n, + weekday: l, + hour: n, + minute: n, + second: n, + timeZoneName: l + }; + var Zone = class { + get type() { + throw new ZoneIsAbstractError(); + } + get name() { + throw new ZoneIsAbstractError(); + } + get ianaName() { + return this.name; + } + get isUniversal() { + throw new ZoneIsAbstractError(); + } + offsetName(ts, opts) { + throw new ZoneIsAbstractError(); + } + formatOffset(ts, format) { + throw new ZoneIsAbstractError(); + } + offset(ts) { + throw new ZoneIsAbstractError(); + } + equals(otherZone) { + throw new ZoneIsAbstractError(); + } + get isValid() { + throw new ZoneIsAbstractError(); + } + }; + var singleton$1 = null; + var SystemZone = class extends Zone { + static get instance() { + if (singleton$1 === null) { + singleton$1 = new SystemZone(); + } + return singleton$1; + } + get type() { + return "system"; + } + get name() { + return new Intl.DateTimeFormat().resolvedOptions().timeZone; + } + get isUniversal() { + return false; + } + offsetName(ts, { format, locale }) { + return parseZoneInfo(ts, format, locale); + } + formatOffset(ts, format) { + return formatOffset(this.offset(ts), format); + } + offset(ts) { + return -new Date(ts).getTimezoneOffset(); + } + equals(otherZone) { + return otherZone.type === "system"; + } + get isValid() { + return true; + } + }; + var dtfCache = {}; + function makeDTF(zone) { + if (!dtfCache[zone]) { + dtfCache[zone] = new Intl.DateTimeFormat("en-US", { + hour12: false, + timeZone: zone, + year: "numeric", + month: "2-digit", + day: "2-digit", + hour: "2-digit", + minute: "2-digit", + second: "2-digit", + era: "short" + }); + } + return dtfCache[zone]; + } + var typeToPos = { + year: 0, + month: 1, + day: 2, + era: 3, + hour: 4, + minute: 5, + second: 6 + }; + function hackyOffset(dtf, date) { + const formatted = dtf.format(date).replace(/\u200E/g, ""), parsed = /(\d+)\/(\d+)\/(\d+) (AD|BC),? (\d+):(\d+):(\d+)/.exec(formatted), [, fMonth, fDay, fYear, fadOrBc, fHour, fMinute, fSecond] = parsed; + return [fYear, fMonth, fDay, fadOrBc, fHour, fMinute, fSecond]; + } + function partsOffset(dtf, date) { + const formatted = dtf.formatToParts(date); + const filled = []; + for (let i = 0; i < formatted.length; i++) { + const { type, value } = formatted[i]; + const pos = typeToPos[type]; + if (type === "era") { + filled[pos] = value; + } else if (!isUndefined(pos)) { + filled[pos] = parseInt(value, 10); + } + } + return filled; + } + var ianaZoneCache = {}; + var IANAZone = class extends Zone { + static create(name) { + if (!ianaZoneCache[name]) { + ianaZoneCache[name] = new IANAZone(name); + } + return ianaZoneCache[name]; + } + static resetCache() { + ianaZoneCache = {}; + dtfCache = {}; + } + static isValidSpecifier(s2) { + return this.isValidZone(s2); + } + static isValidZone(zone) { + if (!zone) { + return false; + } + try { + new Intl.DateTimeFormat("en-US", { timeZone: zone }).format(); + return true; + } catch (e) { + return false; + } + } + constructor(name) { + super(); + this.zoneName = name; + this.valid = IANAZone.isValidZone(name); + } + get type() { + return "iana"; + } + get name() { + return this.zoneName; + } + get isUniversal() { + return false; + } + offsetName(ts, { format, locale }) { + return parseZoneInfo(ts, format, locale, this.name); + } + formatOffset(ts, format) { + return formatOffset(this.offset(ts), format); + } + offset(ts) { + const date = new Date(ts); + if (isNaN(date)) + return NaN; + const dtf = makeDTF(this.name); + let [year, month, day, adOrBc, hour, minute, second] = dtf.formatToParts ? partsOffset(dtf, date) : hackyOffset(dtf, date); + if (adOrBc === "BC") { + year = -Math.abs(year) + 1; + } + const adjustedHour = hour === 24 ? 0 : hour; + const asUTC = objToLocalTS({ + year, + month, + day, + hour: adjustedHour, + minute, + second, + millisecond: 0 + }); + let asTS = +date; + const over = asTS % 1e3; + asTS -= over >= 0 ? over : 1e3 + over; + return (asUTC - asTS) / (60 * 1e3); + } + equals(otherZone) { + return otherZone.type === "iana" && otherZone.name === this.name; + } + get isValid() { + return this.valid; + } + }; + var intlLFCache = {}; + function getCachedLF(locString, opts = {}) { + const key = JSON.stringify([locString, opts]); + let dtf = intlLFCache[key]; + if (!dtf) { + dtf = new Intl.ListFormat(locString, opts); + intlLFCache[key] = dtf; + } + return dtf; + } + var intlDTCache = {}; + function getCachedDTF(locString, opts = {}) { + const key = JSON.stringify([locString, opts]); + let dtf = intlDTCache[key]; + if (!dtf) { + dtf = new Intl.DateTimeFormat(locString, opts); + intlDTCache[key] = dtf; + } + return dtf; + } + var intlNumCache = {}; + function getCachedINF(locString, opts = {}) { + const key = JSON.stringify([locString, opts]); + let inf = intlNumCache[key]; + if (!inf) { + inf = new Intl.NumberFormat(locString, opts); + intlNumCache[key] = inf; + } + return inf; + } + var intlRelCache = {}; + function getCachedRTF(locString, opts = {}) { + const _a = opts, { base } = _a, cacheKeyOpts = __objRest(_a, ["base"]); + const key = JSON.stringify([locString, cacheKeyOpts]); + let inf = intlRelCache[key]; + if (!inf) { + inf = new Intl.RelativeTimeFormat(locString, opts); + intlRelCache[key] = inf; + } + return inf; + } + var sysLocaleCache = null; + function systemLocale() { + if (sysLocaleCache) { + return sysLocaleCache; + } else { + sysLocaleCache = new Intl.DateTimeFormat().resolvedOptions().locale; + return sysLocaleCache; + } + } + function parseLocaleString(localeStr) { + const xIndex = localeStr.indexOf("-x-"); + if (xIndex !== -1) { + localeStr = localeStr.substring(0, xIndex); + } + const uIndex = localeStr.indexOf("-u-"); + if (uIndex === -1) { + return [localeStr]; + } else { + let options; + let selectedStr; + try { + options = getCachedDTF(localeStr).resolvedOptions(); + selectedStr = localeStr; + } catch (e) { + const smaller = localeStr.substring(0, uIndex); + options = getCachedDTF(smaller).resolvedOptions(); + selectedStr = smaller; + } + const { numberingSystem, calendar } = options; + return [selectedStr, numberingSystem, calendar]; + } + } + function intlConfigString(localeStr, numberingSystem, outputCalendar) { + if (outputCalendar || numberingSystem) { + if (!localeStr.includes("-u-")) { + localeStr += "-u"; + } + if (outputCalendar) { + localeStr += `-ca-${outputCalendar}`; + } + if (numberingSystem) { + localeStr += `-nu-${numberingSystem}`; + } + return localeStr; + } else { + return localeStr; + } + } + function mapMonths(f) { + const ms = []; + for (let i = 1; i <= 12; i++) { + const dt = DateTime.utc(2009, i, 1); + ms.push(f(dt)); + } + return ms; + } + function mapWeekdays(f) { + const ms = []; + for (let i = 1; i <= 7; i++) { + const dt = DateTime.utc(2016, 11, 13 + i); + ms.push(f(dt)); + } + return ms; + } + function listStuff(loc, length, englishFn, intlFn) { + const mode = loc.listingMode(); + if (mode === "error") { + return null; + } else if (mode === "en") { + return englishFn(length); + } else { + return intlFn(length); + } + } + function supportsFastNumbers(loc) { + if (loc.numberingSystem && loc.numberingSystem !== "latn") { + return false; + } else { + return loc.numberingSystem === "latn" || !loc.locale || loc.locale.startsWith("en") || new Intl.DateTimeFormat(loc.intl).resolvedOptions().numberingSystem === "latn"; + } + } + var PolyNumberFormatter = class { + constructor(intl, forceSimple, opts) { + this.padTo = opts.padTo || 0; + this.floor = opts.floor || false; + const _a = opts, { padTo, floor } = _a, otherOpts = __objRest(_a, ["padTo", "floor"]); + if (!forceSimple || Object.keys(otherOpts).length > 0) { + const intlOpts = __spreadValues({ useGrouping: false }, opts); + if (opts.padTo > 0) + intlOpts.minimumIntegerDigits = opts.padTo; + this.inf = getCachedINF(intl, intlOpts); + } + } + format(i) { + if (this.inf) { + const fixed = this.floor ? Math.floor(i) : i; + return this.inf.format(fixed); + } else { + const fixed = this.floor ? Math.floor(i) : roundTo(i, 3); + return padStart(fixed, this.padTo); + } + } + }; + var PolyDateFormatter = class { + constructor(dt, intl, opts) { + this.opts = opts; + this.originalZone = void 0; + let z = void 0; + if (this.opts.timeZone) { + this.dt = dt; + } else if (dt.zone.type === "fixed") { + const gmtOffset = -1 * (dt.offset / 60); + const offsetZ = gmtOffset >= 0 ? `Etc/GMT+${gmtOffset}` : `Etc/GMT${gmtOffset}`; + if (dt.offset !== 0 && IANAZone.create(offsetZ).valid) { + z = offsetZ; + this.dt = dt; + } else { + z = "UTC"; + this.dt = dt.offset === 0 ? dt : dt.setZone("UTC").plus({ minutes: dt.offset }); + this.originalZone = dt.zone; + } + } else if (dt.zone.type === "system") { + this.dt = dt; + } else if (dt.zone.type === "iana") { + this.dt = dt; + z = dt.zone.name; + } else { + z = "UTC"; + this.dt = dt.setZone("UTC").plus({ minutes: dt.offset }); + this.originalZone = dt.zone; + } + const intlOpts = __spreadValues({}, this.opts); + intlOpts.timeZone = intlOpts.timeZone || z; + this.dtf = getCachedDTF(intl, intlOpts); + } + format() { + if (this.originalZone) { + return this.formatToParts().map(({ value }) => value).join(""); + } + return this.dtf.format(this.dt.toJSDate()); + } + formatToParts() { + const parts = this.dtf.formatToParts(this.dt.toJSDate()); + if (this.originalZone) { + return parts.map((part) => { + if (part.type === "timeZoneName") { + const offsetName = this.originalZone.offsetName(this.dt.ts, { + locale: this.dt.locale, + format: this.opts.timeZoneName + }); + return __spreadProps(__spreadValues({}, part), { + value: offsetName + }); + } else { + return part; + } + }); + } + return parts; + } + resolvedOptions() { + return this.dtf.resolvedOptions(); + } + }; + var PolyRelFormatter = class { + constructor(intl, isEnglish, opts) { + this.opts = __spreadValues({ style: "long" }, opts); + if (!isEnglish && hasRelative()) { + this.rtf = getCachedRTF(intl, opts); + } + } + format(count, unit) { + if (this.rtf) { + return this.rtf.format(count, unit); + } else { + return formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== "long"); + } + } + formatToParts(count, unit) { + if (this.rtf) { + return this.rtf.formatToParts(count, unit); + } else { + return []; + } + } + }; + var Locale = class { + static fromOpts(opts) { + return Locale.create(opts.locale, opts.numberingSystem, opts.outputCalendar, opts.defaultToEN); + } + static create(locale, numberingSystem, outputCalendar, defaultToEN = false) { + const specifiedLocale = locale || Settings.defaultLocale; + const localeR = specifiedLocale || (defaultToEN ? "en-US" : systemLocale()); + const numberingSystemR = numberingSystem || Settings.defaultNumberingSystem; + const outputCalendarR = outputCalendar || Settings.defaultOutputCalendar; + return new Locale(localeR, numberingSystemR, outputCalendarR, specifiedLocale); + } + static resetCache() { + sysLocaleCache = null; + intlDTCache = {}; + intlNumCache = {}; + intlRelCache = {}; + } + static fromObject({ locale, numberingSystem, outputCalendar } = {}) { + return Locale.create(locale, numberingSystem, outputCalendar); + } + constructor(locale, numbering, outputCalendar, specifiedLocale) { + const [parsedLocale, parsedNumberingSystem, parsedOutputCalendar] = parseLocaleString(locale); + this.locale = parsedLocale; + this.numberingSystem = numbering || parsedNumberingSystem || null; + this.outputCalendar = outputCalendar || parsedOutputCalendar || null; + this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar); + this.weekdaysCache = { format: {}, standalone: {} }; + this.monthsCache = { format: {}, standalone: {} }; + this.meridiemCache = null; + this.eraCache = {}; + this.specifiedLocale = specifiedLocale; + this.fastNumbersCached = null; + } + get fastNumbers() { + if (this.fastNumbersCached == null) { + this.fastNumbersCached = supportsFastNumbers(this); + } + return this.fastNumbersCached; + } + listingMode() { + const isActuallyEn = this.isEnglish(); + const hasNoWeirdness = (this.numberingSystem === null || this.numberingSystem === "latn") && (this.outputCalendar === null || this.outputCalendar === "gregory"); + return isActuallyEn && hasNoWeirdness ? "en" : "intl"; + } + clone(alts) { + if (!alts || Object.getOwnPropertyNames(alts).length === 0) { + return this; + } else { + return Locale.create(alts.locale || this.specifiedLocale, alts.numberingSystem || this.numberingSystem, alts.outputCalendar || this.outputCalendar, alts.defaultToEN || false); + } + } + redefaultToEN(alts = {}) { + return this.clone(__spreadProps(__spreadValues({}, alts), { defaultToEN: true })); + } + redefaultToSystem(alts = {}) { + return this.clone(__spreadProps(__spreadValues({}, alts), { defaultToEN: false })); + } + months(length, format = false) { + return listStuff(this, length, months, () => { + const intl = format ? { month: length, day: "numeric" } : { month: length }, formatStr = format ? "format" : "standalone"; + if (!this.monthsCache[formatStr][length]) { + this.monthsCache[formatStr][length] = mapMonths((dt) => this.extract(dt, intl, "month")); + } + return this.monthsCache[formatStr][length]; + }); + } + weekdays(length, format = false) { + return listStuff(this, length, weekdays, () => { + const intl = format ? { weekday: length, year: "numeric", month: "long", day: "numeric" } : { weekday: length }, formatStr = format ? "format" : "standalone"; + if (!this.weekdaysCache[formatStr][length]) { + this.weekdaysCache[formatStr][length] = mapWeekdays((dt) => this.extract(dt, intl, "weekday")); + } + return this.weekdaysCache[formatStr][length]; + }); + } + meridiems() { + return listStuff(this, void 0, () => meridiems, () => { + if (!this.meridiemCache) { + const intl = { hour: "numeric", hourCycle: "h12" }; + this.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map((dt) => this.extract(dt, intl, "dayperiod")); + } + return this.meridiemCache; + }); + } + eras(length) { + return listStuff(this, length, eras, () => { + const intl = { era: length }; + if (!this.eraCache[length]) { + this.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map((dt) => this.extract(dt, intl, "era")); + } + return this.eraCache[length]; + }); + } + extract(dt, intlOpts, field) { + const df = this.dtFormatter(dt, intlOpts), results = df.formatToParts(), matching = results.find((m) => m.type.toLowerCase() === field); + return matching ? matching.value : null; + } + numberFormatter(opts = {}) { + return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts); + } + dtFormatter(dt, intlOpts = {}) { + return new PolyDateFormatter(dt, this.intl, intlOpts); + } + relFormatter(opts = {}) { + return new PolyRelFormatter(this.intl, this.isEnglish(), opts); + } + listFormatter(opts = {}) { + return getCachedLF(this.intl, opts); + } + isEnglish() { + return this.locale === "en" || this.locale.toLowerCase() === "en-us" || new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith("en-us"); + } + equals(other) { + return this.locale === other.locale && this.numberingSystem === other.numberingSystem && this.outputCalendar === other.outputCalendar; + } + }; + var singleton = null; + var FixedOffsetZone = class extends Zone { + static get utcInstance() { + if (singleton === null) { + singleton = new FixedOffsetZone(0); + } + return singleton; + } + static instance(offset2) { + return offset2 === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset2); + } + static parseSpecifier(s2) { + if (s2) { + const r = s2.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i); + if (r) { + return new FixedOffsetZone(signedOffset(r[1], r[2])); + } + } + return null; + } + constructor(offset2) { + super(); + this.fixed = offset2; + } + get type() { + return "fixed"; + } + get name() { + return this.fixed === 0 ? "UTC" : `UTC${formatOffset(this.fixed, "narrow")}`; + } + get ianaName() { + if (this.fixed === 0) { + return "Etc/UTC"; + } else { + return `Etc/GMT${formatOffset(-this.fixed, "narrow")}`; + } + } + offsetName() { + return this.name; + } + formatOffset(ts, format) { + return formatOffset(this.fixed, format); + } + get isUniversal() { + return true; + } + offset() { + return this.fixed; + } + equals(otherZone) { + return otherZone.type === "fixed" && otherZone.fixed === this.fixed; + } + get isValid() { + return true; + } + }; + var InvalidZone = class extends Zone { + constructor(zoneName) { + super(); + this.zoneName = zoneName; + } + get type() { + return "invalid"; + } + get name() { + return this.zoneName; + } + get isUniversal() { + return false; + } + offsetName() { + return null; + } + formatOffset() { + return ""; + } + offset() { + return NaN; + } + equals() { + return false; + } + get isValid() { + return false; + } + }; + function normalizeZone(input, defaultZone2) { + if (isUndefined(input) || input === null) { + return defaultZone2; + } else if (input instanceof Zone) { + return input; + } else if (isString(input)) { + const lowered = input.toLowerCase(); + if (lowered === "default") + return defaultZone2; + else if (lowered === "local" || lowered === "system") + return SystemZone.instance; + else if (lowered === "utc" || lowered === "gmt") + return FixedOffsetZone.utcInstance; + else + return FixedOffsetZone.parseSpecifier(lowered) || IANAZone.create(input); + } else if (isNumber(input)) { + return FixedOffsetZone.instance(input); + } else if (typeof input === "object" && "offset" in input && typeof input.offset === "function") { + return input; + } else { + return new InvalidZone(input); + } + } + var now = () => Date.now(); + var defaultZone = "system"; + var defaultLocale = null; + var defaultNumberingSystem = null; + var defaultOutputCalendar = null; + var twoDigitCutoffYear = 60; + var throwOnInvalid; + var Settings = class { + static get now() { + return now; + } + static set now(n2) { + now = n2; + } + static set defaultZone(zone) { + defaultZone = zone; + } + static get defaultZone() { + return normalizeZone(defaultZone, SystemZone.instance); + } + static get defaultLocale() { + return defaultLocale; + } + static set defaultLocale(locale) { + defaultLocale = locale; + } + static get defaultNumberingSystem() { + return defaultNumberingSystem; + } + static set defaultNumberingSystem(numberingSystem) { + defaultNumberingSystem = numberingSystem; + } + static get defaultOutputCalendar() { + return defaultOutputCalendar; + } + static set defaultOutputCalendar(outputCalendar) { + defaultOutputCalendar = outputCalendar; + } + static get twoDigitCutoffYear() { + return twoDigitCutoffYear; + } + static set twoDigitCutoffYear(cutoffYear) { + twoDigitCutoffYear = cutoffYear % 100; + } + static get throwOnInvalid() { + return throwOnInvalid; + } + static set throwOnInvalid(t) { + throwOnInvalid = t; + } + static resetCaches() { + Locale.resetCache(); + IANAZone.resetCache(); + } + }; + function isUndefined(o) { + return typeof o === "undefined"; + } + function isNumber(o) { + return typeof o === "number"; + } + function isInteger(o) { + return typeof o === "number" && o % 1 === 0; + } + function isString(o) { + return typeof o === "string"; + } + function isDate(o) { + return Object.prototype.toString.call(o) === "[object Date]"; + } + function hasRelative() { + try { + return typeof Intl !== "undefined" && !!Intl.RelativeTimeFormat; + } catch (e) { + return false; + } + } + function maybeArray(thing) { + return Array.isArray(thing) ? thing : [thing]; + } + function bestBy(arr, by, compare) { + if (arr.length === 0) { + return void 0; + } + return arr.reduce((best, next) => { + const pair = [by(next), next]; + if (!best) { + return pair; + } else if (compare(best[0], pair[0]) === best[0]) { + return best; + } else { + return pair; + } + }, null)[1]; + } + function pick(obj, keys) { + return keys.reduce((a, k) => { + a[k] = obj[k]; + return a; + }, {}); + } + function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); + } + function integerBetween(thing, bottom, top) { + return isInteger(thing) && thing >= bottom && thing <= top; + } + function floorMod(x, n2) { + return x - n2 * Math.floor(x / n2); + } + function padStart(input, n2 = 2) { + const isNeg = input < 0; + let padded; + if (isNeg) { + padded = "-" + ("" + -input).padStart(n2, "0"); + } else { + padded = ("" + input).padStart(n2, "0"); + } + return padded; + } + function parseInteger(string) { + if (isUndefined(string) || string === null || string === "") { + return void 0; + } else { + return parseInt(string, 10); + } + } + function parseFloating(string) { + if (isUndefined(string) || string === null || string === "") { + return void 0; + } else { + return parseFloat(string); + } + } + function parseMillis(fraction) { + if (isUndefined(fraction) || fraction === null || fraction === "") { + return void 0; + } else { + const f = parseFloat("0." + fraction) * 1e3; + return Math.floor(f); + } + } + function roundTo(number, digits, towardZero = false) { + const factor = __pow(10, digits), rounder = towardZero ? Math.trunc : Math.round; + return rounder(number * factor) / factor; + } + function isLeapYear(year) { + return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0); + } + function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; + } + function daysInMonth(year, month) { + const modMonth = floorMod(month - 1, 12) + 1, modYear = year + (month - modMonth) / 12; + if (modMonth === 2) { + return isLeapYear(modYear) ? 29 : 28; + } else { + return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1]; + } + } + function objToLocalTS(obj) { + let d = Date.UTC(obj.year, obj.month - 1, obj.day, obj.hour, obj.minute, obj.second, obj.millisecond); + if (obj.year < 100 && obj.year >= 0) { + d = new Date(d); + d.setUTCFullYear(obj.year, obj.month - 1, obj.day); + } + return +d; + } + function weeksInWeekYear(weekYear) { + const p1 = (weekYear + Math.floor(weekYear / 4) - Math.floor(weekYear / 100) + Math.floor(weekYear / 400)) % 7, last = weekYear - 1, p2 = (last + Math.floor(last / 4) - Math.floor(last / 100) + Math.floor(last / 400)) % 7; + return p1 === 4 || p2 === 3 ? 53 : 52; + } + function untruncateYear(year) { + if (year > 99) { + return year; + } else + return year > Settings.twoDigitCutoffYear ? 1900 + year : 2e3 + year; + } + function parseZoneInfo(ts, offsetFormat, locale, timeZone = null) { + const date = new Date(ts), intlOpts = { + hourCycle: "h23", + year: "numeric", + month: "2-digit", + day: "2-digit", + hour: "2-digit", + minute: "2-digit" + }; + if (timeZone) { + intlOpts.timeZone = timeZone; + } + const modified = __spreadValues({ timeZoneName: offsetFormat }, intlOpts); + const parsed = new Intl.DateTimeFormat(locale, modified).formatToParts(date).find((m) => m.type.toLowerCase() === "timezonename"); + return parsed ? parsed.value : null; + } + function signedOffset(offHourStr, offMinuteStr) { + let offHour = parseInt(offHourStr, 10); + if (Number.isNaN(offHour)) { + offHour = 0; + } + const offMin = parseInt(offMinuteStr, 10) || 0, offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin; + return offHour * 60 + offMinSigned; + } + function asNumber(value) { + const numericValue = Number(value); + if (typeof value === "boolean" || value === "" || Number.isNaN(numericValue)) + throw new InvalidArgumentError(`Invalid unit value ${value}`); + return numericValue; + } + function normalizeObject(obj, normalizer) { + const normalized = {}; + for (const u in obj) { + if (hasOwnProperty(obj, u)) { + const v = obj[u]; + if (v === void 0 || v === null) + continue; + normalized[normalizer(u)] = asNumber(v); + } + } + return normalized; + } + function formatOffset(offset2, format) { + const hours = Math.trunc(Math.abs(offset2 / 60)), minutes = Math.trunc(Math.abs(offset2 % 60)), sign = offset2 >= 0 ? "+" : "-"; + switch (format) { + case "short": + return `${sign}${padStart(hours, 2)}:${padStart(minutes, 2)}`; + case "narrow": + return `${sign}${hours}${minutes > 0 ? `:${minutes}` : ""}`; + case "techie": + return `${sign}${padStart(hours, 2)}${padStart(minutes, 2)}`; + default: + throw new RangeError(`Value format ${format} is out of range for property format`); + } + } + function timeObject(obj) { + return pick(obj, ["hour", "minute", "second", "millisecond"]); + } + var monthsLong = [ + "January", + "February", + "March", + "April", + "May", + "June", + "July", + "August", + "September", + "October", + "November", + "December" + ]; + var monthsShort = [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ]; + var monthsNarrow = ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"]; + function months(length) { + switch (length) { + case "narrow": + return [...monthsNarrow]; + case "short": + return [...monthsShort]; + case "long": + return [...monthsLong]; + case "numeric": + return ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"]; + case "2-digit": + return ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"]; + default: + return null; + } + } + var weekdaysLong = [ + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday", + "Sunday" + ]; + var weekdaysShort = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]; + var weekdaysNarrow = ["M", "T", "W", "T", "F", "S", "S"]; + function weekdays(length) { + switch (length) { + case "narrow": + return [...weekdaysNarrow]; + case "short": + return [...weekdaysShort]; + case "long": + return [...weekdaysLong]; + case "numeric": + return ["1", "2", "3", "4", "5", "6", "7"]; + default: + return null; + } + } + var meridiems = ["AM", "PM"]; + var erasLong = ["Before Christ", "Anno Domini"]; + var erasShort = ["BC", "AD"]; + var erasNarrow = ["B", "A"]; + function eras(length) { + switch (length) { + case "narrow": + return [...erasNarrow]; + case "short": + return [...erasShort]; + case "long": + return [...erasLong]; + default: + return null; + } + } + function meridiemForDateTime(dt) { + return meridiems[dt.hour < 12 ? 0 : 1]; + } + function weekdayForDateTime(dt, length) { + return weekdays(length)[dt.weekday - 1]; + } + function monthForDateTime(dt, length) { + return months(length)[dt.month - 1]; + } + function eraForDateTime(dt, length) { + return eras(length)[dt.year < 0 ? 0 : 1]; + } + function formatRelativeTime(unit, count, numeric = "always", narrow = false) { + const units = { + years: ["year", "yr."], + quarters: ["quarter", "qtr."], + months: ["month", "mo."], + weeks: ["week", "wk."], + days: ["day", "day", "days"], + hours: ["hour", "hr."], + minutes: ["minute", "min."], + seconds: ["second", "sec."] + }; + const lastable = ["hours", "minutes", "seconds"].indexOf(unit) === -1; + if (numeric === "auto" && lastable) { + const isDay = unit === "days"; + switch (count) { + case 1: + return isDay ? "tomorrow" : `next ${units[unit][0]}`; + case -1: + return isDay ? "yesterday" : `last ${units[unit][0]}`; + case 0: + return isDay ? "today" : `this ${units[unit][0]}`; + } + } + const isInPast = Object.is(count, -0) || count < 0, fmtValue = Math.abs(count), singular = fmtValue === 1, lilUnits = units[unit], fmtUnit = narrow ? singular ? lilUnits[1] : lilUnits[2] || lilUnits[1] : singular ? units[unit][0] : unit; + return isInPast ? `${fmtValue} ${fmtUnit} ago` : `in ${fmtValue} ${fmtUnit}`; + } + function stringifyTokens(splits, tokenToString) { + let s2 = ""; + for (const token of splits) { + if (token.literal) { + s2 += token.val; + } else { + s2 += tokenToString(token.val); + } + } + return s2; + } + var macroTokenToFormatOpts = { + D: DATE_SHORT, + DD: DATE_MED, + DDD: DATE_FULL, + DDDD: DATE_HUGE, + t: TIME_SIMPLE, + tt: TIME_WITH_SECONDS, + ttt: TIME_WITH_SHORT_OFFSET, + tttt: TIME_WITH_LONG_OFFSET, + T: TIME_24_SIMPLE, + TT: TIME_24_WITH_SECONDS, + TTT: TIME_24_WITH_SHORT_OFFSET, + TTTT: TIME_24_WITH_LONG_OFFSET, + f: DATETIME_SHORT, + ff: DATETIME_MED, + fff: DATETIME_FULL, + ffff: DATETIME_HUGE, + F: DATETIME_SHORT_WITH_SECONDS, + FF: DATETIME_MED_WITH_SECONDS, + FFF: DATETIME_FULL_WITH_SECONDS, + FFFF: DATETIME_HUGE_WITH_SECONDS + }; + var Formatter = class { + static create(locale, opts = {}) { + return new Formatter(locale, opts); + } + static parseFormat(fmt) { + let current = null, currentFull = "", bracketed = false; + const splits = []; + for (let i = 0; i < fmt.length; i++) { + const c = fmt.charAt(i); + if (c === "'") { + if (currentFull.length > 0) { + splits.push({ literal: bracketed || /^\s+$/.test(currentFull), val: currentFull }); + } + current = null; + currentFull = ""; + bracketed = !bracketed; + } else if (bracketed) { + currentFull += c; + } else if (c === current) { + currentFull += c; + } else { + if (currentFull.length > 0) { + splits.push({ literal: /^\s+$/.test(currentFull), val: currentFull }); + } + currentFull = c; + current = c; + } + } + if (currentFull.length > 0) { + splits.push({ literal: bracketed || /^\s+$/.test(currentFull), val: currentFull }); + } + return splits; + } + static macroTokenToFormatOpts(token) { + return macroTokenToFormatOpts[token]; + } + constructor(locale, formatOpts) { + this.opts = formatOpts; + this.loc = locale; + this.systemLoc = null; + } + formatWithSystemDefault(dt, opts) { + if (this.systemLoc === null) { + this.systemLoc = this.loc.redefaultToSystem(); + } + const df = this.systemLoc.dtFormatter(dt, __spreadValues(__spreadValues({}, this.opts), opts)); + return df.format(); + } + dtFormatter(dt, opts = {}) { + return this.loc.dtFormatter(dt, __spreadValues(__spreadValues({}, this.opts), opts)); + } + formatDateTime(dt, opts) { + return this.dtFormatter(dt, opts).format(); + } + formatDateTimeParts(dt, opts) { + return this.dtFormatter(dt, opts).formatToParts(); + } + formatInterval(interval, opts) { + const df = this.dtFormatter(interval.start, opts); + return df.dtf.formatRange(interval.start.toJSDate(), interval.end.toJSDate()); + } + resolvedOptions(dt, opts) { + return this.dtFormatter(dt, opts).resolvedOptions(); + } + num(n2, p = 0) { + if (this.opts.forceSimple) { + return padStart(n2, p); + } + const opts = __spreadValues({}, this.opts); + if (p > 0) { + opts.padTo = p; + } + return this.loc.numberFormatter(opts).format(n2); + } + formatDateTimeFromString(dt, fmt) { + const knownEnglish = this.loc.listingMode() === "en", useDateTimeFormatter = this.loc.outputCalendar && this.loc.outputCalendar !== "gregory", string = (opts, extract) => this.loc.extract(dt, opts, extract), formatOffset2 = (opts) => { + if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) { + return "Z"; + } + return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : ""; + }, meridiem = () => knownEnglish ? meridiemForDateTime(dt) : string({ hour: "numeric", hourCycle: "h12" }, "dayperiod"), month = (length, standalone) => knownEnglish ? monthForDateTime(dt, length) : string(standalone ? { month: length } : { month: length, day: "numeric" }, "month"), weekday = (length, standalone) => knownEnglish ? weekdayForDateTime(dt, length) : string(standalone ? { weekday: length } : { weekday: length, month: "long", day: "numeric" }, "weekday"), maybeMacro = (token) => { + const formatOpts = Formatter.macroTokenToFormatOpts(token); + if (formatOpts) { + return this.formatWithSystemDefault(dt, formatOpts); + } else { + return token; + } + }, era = (length) => knownEnglish ? eraForDateTime(dt, length) : string({ era: length }, "era"), tokenToString = (token) => { + switch (token) { + case "S": + return this.num(dt.millisecond); + case "u": + case "SSS": + return this.num(dt.millisecond, 3); + case "s": + return this.num(dt.second); + case "ss": + return this.num(dt.second, 2); + case "uu": + return this.num(Math.floor(dt.millisecond / 10), 2); + case "uuu": + return this.num(Math.floor(dt.millisecond / 100)); + case "m": + return this.num(dt.minute); + case "mm": + return this.num(dt.minute, 2); + case "h": + return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12); + case "hh": + return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2); + case "H": + return this.num(dt.hour); + case "HH": + return this.num(dt.hour, 2); + case "Z": + return formatOffset2({ format: "narrow", allowZ: this.opts.allowZ }); + case "ZZ": + return formatOffset2({ format: "short", allowZ: this.opts.allowZ }); + case "ZZZ": + return formatOffset2({ format: "techie", allowZ: this.opts.allowZ }); + case "ZZZZ": + return dt.zone.offsetName(dt.ts, { format: "short", locale: this.loc.locale }); + case "ZZZZZ": + return dt.zone.offsetName(dt.ts, { format: "long", locale: this.loc.locale }); + case "z": + return dt.zoneName; + case "a": + return meridiem(); + case "d": + return useDateTimeFormatter ? string({ day: "numeric" }, "day") : this.num(dt.day); + case "dd": + return useDateTimeFormatter ? string({ day: "2-digit" }, "day") : this.num(dt.day, 2); + case "c": + return this.num(dt.weekday); + case "ccc": + return weekday("short", true); + case "cccc": + return weekday("long", true); + case "ccccc": + return weekday("narrow", true); + case "E": + return this.num(dt.weekday); + case "EEE": + return weekday("short", false); + case "EEEE": + return weekday("long", false); + case "EEEEE": + return weekday("narrow", false); + case "L": + return useDateTimeFormatter ? string({ month: "numeric", day: "numeric" }, "month") : this.num(dt.month); + case "LL": + return useDateTimeFormatter ? string({ month: "2-digit", day: "numeric" }, "month") : this.num(dt.month, 2); + case "LLL": + return month("short", true); + case "LLLL": + return month("long", true); + case "LLLLL": + return month("narrow", true); + case "M": + return useDateTimeFormatter ? string({ month: "numeric" }, "month") : this.num(dt.month); + case "MM": + return useDateTimeFormatter ? string({ month: "2-digit" }, "month") : this.num(dt.month, 2); + case "MMM": + return month("short", false); + case "MMMM": + return month("long", false); + case "MMMMM": + return month("narrow", false); + case "y": + return useDateTimeFormatter ? string({ year: "numeric" }, "year") : this.num(dt.year); + case "yy": + return useDateTimeFormatter ? string({ year: "2-digit" }, "year") : this.num(dt.year.toString().slice(-2), 2); + case "yyyy": + return useDateTimeFormatter ? string({ year: "numeric" }, "year") : this.num(dt.year, 4); + case "yyyyyy": + return useDateTimeFormatter ? string({ year: "numeric" }, "year") : this.num(dt.year, 6); + case "G": + return era("short"); + case "GG": + return era("long"); + case "GGGGG": + return era("narrow"); + case "kk": + return this.num(dt.weekYear.toString().slice(-2), 2); + case "kkkk": + return this.num(dt.weekYear, 4); + case "W": + return this.num(dt.weekNumber); + case "WW": + return this.num(dt.weekNumber, 2); + case "o": + return this.num(dt.ordinal); + case "ooo": + return this.num(dt.ordinal, 3); + case "q": + return this.num(dt.quarter); + case "qq": + return this.num(dt.quarter, 2); + case "X": + return this.num(Math.floor(dt.ts / 1e3)); + case "x": + return this.num(dt.ts); + default: + return maybeMacro(token); + } + }; + return stringifyTokens(Formatter.parseFormat(fmt), tokenToString); + } + formatDurationFromString(dur, fmt) { + const tokenToField = (token) => { + switch (token[0]) { + case "S": + return "millisecond"; + case "s": + return "second"; + case "m": + return "minute"; + case "h": + return "hour"; + case "d": + return "day"; + case "w": + return "week"; + case "M": + return "month"; + case "y": + return "year"; + default: + return null; + } + }, tokenToString = (lildur) => (token) => { + const mapped = tokenToField(token); + if (mapped) { + return this.num(lildur.get(mapped), token.length); + } else { + return token; + } + }, tokens = Formatter.parseFormat(fmt), realTokens = tokens.reduce((found, { literal, val }) => literal ? found : found.concat(val), []), collapsed = dur.shiftTo(...realTokens.map(tokenToField).filter((t) => t)); + return stringifyTokens(tokens, tokenToString(collapsed)); + } + }; + var Invalid = class { + constructor(reason, explanation) { + this.reason = reason; + this.explanation = explanation; + } + toMessage() { + if (this.explanation) { + return `${this.reason}: ${this.explanation}`; + } else { + return this.reason; + } + } + }; + var ianaRegex = /[A-Za-z_+-]{1,256}(?::?\/[A-Za-z0-9_+-]{1,256}(?:\/[A-Za-z0-9_+-]{1,256})?)?/; + function combineRegexes(...regexes) { + const full = regexes.reduce((f, r) => f + r.source, ""); + return RegExp(`^${full}$`); + } + function combineExtractors(...extractors) { + return (m) => extractors.reduce(([mergedVals, mergedZone, cursor], ex) => { + const [val, zone, next] = ex(m, cursor); + return [__spreadValues(__spreadValues({}, mergedVals), val), zone || mergedZone, next]; + }, [{}, null, 1]).slice(0, 2); + } + function parse(s2, ...patterns) { + if (s2 == null) { + return [null, null]; + } + for (const [regex, extractor] of patterns) { + const m = regex.exec(s2); + if (m) { + return extractor(m); + } + } + return [null, null]; + } + function simpleParse(...keys) { + return (match2, cursor) => { + const ret = {}; + let i; + for (i = 0; i < keys.length; i++) { + ret[keys[i]] = parseInteger(match2[cursor + i]); + } + return [ret, null, cursor + i]; + }; + } + var offsetRegex = /(?:(Z)|([+-]\d\d)(?::?(\d\d))?)/; + var isoExtendedZone = `(?:${offsetRegex.source}?(?:\\[(${ianaRegex.source})\\])?)?`; + var isoTimeBaseRegex = /(\d\d)(?::?(\d\d)(?::?(\d\d)(?:[.,](\d{1,30}))?)?)?/; + var isoTimeRegex = RegExp(`${isoTimeBaseRegex.source}${isoExtendedZone}`); + var isoTimeExtensionRegex = RegExp(`(?:T${isoTimeRegex.source})?`); + var isoYmdRegex = /([+-]\d{6}|\d{4})(?:-?(\d\d)(?:-?(\d\d))?)?/; + var isoWeekRegex = /(\d{4})-?W(\d\d)(?:-?(\d))?/; + var isoOrdinalRegex = /(\d{4})-?(\d{3})/; + var extractISOWeekData = simpleParse("weekYear", "weekNumber", "weekDay"); + var extractISOOrdinalData = simpleParse("year", "ordinal"); + var sqlYmdRegex = /(\d{4})-(\d\d)-(\d\d)/; + var sqlTimeRegex = RegExp(`${isoTimeBaseRegex.source} ?(?:${offsetRegex.source}|(${ianaRegex.source}))?`); + var sqlTimeExtensionRegex = RegExp(`(?: ${sqlTimeRegex.source})?`); + function int(match2, pos, fallback) { + const m = match2[pos]; + return isUndefined(m) ? fallback : parseInteger(m); + } + function extractISOYmd(match2, cursor) { + const item = { + year: int(match2, cursor), + month: int(match2, cursor + 1, 1), + day: int(match2, cursor + 2, 1) + }; + return [item, null, cursor + 3]; + } + function extractISOTime(match2, cursor) { + const item = { + hours: int(match2, cursor, 0), + minutes: int(match2, cursor + 1, 0), + seconds: int(match2, cursor + 2, 0), + milliseconds: parseMillis(match2[cursor + 3]) + }; + return [item, null, cursor + 4]; + } + function extractISOOffset(match2, cursor) { + const local = !match2[cursor] && !match2[cursor + 1], fullOffset = signedOffset(match2[cursor + 1], match2[cursor + 2]), zone = local ? null : FixedOffsetZone.instance(fullOffset); + return [{}, zone, cursor + 3]; + } + function extractIANAZone(match2, cursor) { + const zone = match2[cursor] ? IANAZone.create(match2[cursor]) : null; + return [{}, zone, cursor + 1]; + } + var isoTimeOnly = RegExp(`^T?${isoTimeBaseRegex.source}$`); + var isoDuration = /^-?P(?:(?:(-?\d{1,20}(?:\.\d{1,20})?)Y)?(?:(-?\d{1,20}(?:\.\d{1,20})?)M)?(?:(-?\d{1,20}(?:\.\d{1,20})?)W)?(?:(-?\d{1,20}(?:\.\d{1,20})?)D)?(?:T(?:(-?\d{1,20}(?:\.\d{1,20})?)H)?(?:(-?\d{1,20}(?:\.\d{1,20})?)M)?(?:(-?\d{1,20})(?:[.,](-?\d{1,20}))?S)?)?)$/; + function extractISODuration(match2) { + const [s2, yearStr, monthStr, weekStr, dayStr, hourStr, minuteStr, secondStr, millisecondsStr] = match2; + const hasNegativePrefix = s2[0] === "-"; + const negativeSeconds = secondStr && secondStr[0] === "-"; + const maybeNegate = (num, force = false) => num !== void 0 && (force || num && hasNegativePrefix) ? -num : num; + return [ + { + years: maybeNegate(parseFloating(yearStr)), + months: maybeNegate(parseFloating(monthStr)), + weeks: maybeNegate(parseFloating(weekStr)), + days: maybeNegate(parseFloating(dayStr)), + hours: maybeNegate(parseFloating(hourStr)), + minutes: maybeNegate(parseFloating(minuteStr)), + seconds: maybeNegate(parseFloating(secondStr), secondStr === "-0"), + milliseconds: maybeNegate(parseMillis(millisecondsStr), negativeSeconds) + } + ]; + } + var obsOffsets = { + GMT: 0, + EDT: -4 * 60, + EST: -5 * 60, + CDT: -5 * 60, + CST: -6 * 60, + MDT: -6 * 60, + MST: -7 * 60, + PDT: -7 * 60, + PST: -8 * 60 + }; + function fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) { + const result = { + year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr), + month: monthsShort.indexOf(monthStr) + 1, + day: parseInteger(dayStr), + hour: parseInteger(hourStr), + minute: parseInteger(minuteStr) + }; + if (secondStr) + result.second = parseInteger(secondStr); + if (weekdayStr) { + result.weekday = weekdayStr.length > 3 ? weekdaysLong.indexOf(weekdayStr) + 1 : weekdaysShort.indexOf(weekdayStr) + 1; + } + return result; + } + var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/; + function extractRFC2822(match2) { + const [ + , + weekdayStr, + dayStr, + monthStr, + yearStr, + hourStr, + minuteStr, + secondStr, + obsOffset, + milOffset, + offHourStr, + offMinuteStr + ] = match2, result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); + let offset2; + if (obsOffset) { + offset2 = obsOffsets[obsOffset]; + } else if (milOffset) { + offset2 = 0; + } else { + offset2 = signedOffset(offHourStr, offMinuteStr); + } + return [result, new FixedOffsetZone(offset2)]; + } + function preprocessRFC2822(s2) { + return s2.replace(/\([^()]*\)|[\n\t]/g, " ").replace(/(\s\s+)/g, " ").trim(); + } + var rfc1123 = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/; + var rfc850 = /^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/; + var ascii = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/; + function extractRFC1123Or850(match2) { + const [, weekdayStr, dayStr, monthStr, yearStr, hourStr, minuteStr, secondStr] = match2, result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); + return [result, FixedOffsetZone.utcInstance]; + } + function extractASCII(match2) { + const [, weekdayStr, monthStr, dayStr, hourStr, minuteStr, secondStr, yearStr] = match2, result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); + return [result, FixedOffsetZone.utcInstance]; + } + var isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex); + var isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex); + var isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex); + var isoTimeCombinedRegex = combineRegexes(isoTimeRegex); + var extractISOYmdTimeAndOffset = combineExtractors(extractISOYmd, extractISOTime, extractISOOffset, extractIANAZone); + var extractISOWeekTimeAndOffset = combineExtractors(extractISOWeekData, extractISOTime, extractISOOffset, extractIANAZone); + var extractISOOrdinalDateAndTime = combineExtractors(extractISOOrdinalData, extractISOTime, extractISOOffset, extractIANAZone); + var extractISOTimeAndOffset = combineExtractors(extractISOTime, extractISOOffset, extractIANAZone); + function parseISODate(s2) { + return parse(s2, [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset], [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset], [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDateAndTime], [isoTimeCombinedRegex, extractISOTimeAndOffset]); + } + function parseRFC2822Date(s2) { + return parse(preprocessRFC2822(s2), [rfc2822, extractRFC2822]); + } + function parseHTTPDate(s2) { + return parse(s2, [rfc1123, extractRFC1123Or850], [rfc850, extractRFC1123Or850], [ascii, extractASCII]); + } + function parseISODuration(s2) { + return parse(s2, [isoDuration, extractISODuration]); + } + var extractISOTimeOnly = combineExtractors(extractISOTime); + function parseISOTimeOnly(s2) { + return parse(s2, [isoTimeOnly, extractISOTimeOnly]); + } + var sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex); + var sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex); + var extractISOTimeOffsetAndIANAZone = combineExtractors(extractISOTime, extractISOOffset, extractIANAZone); + function parseSQL(s2) { + return parse(s2, [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset], [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]); + } + var INVALID$2 = "Invalid Duration"; + var lowOrderMatrix = { + weeks: { + days: 7, + hours: 7 * 24, + minutes: 7 * 24 * 60, + seconds: 7 * 24 * 60 * 60, + milliseconds: 7 * 24 * 60 * 60 * 1e3 + }, + days: { + hours: 24, + minutes: 24 * 60, + seconds: 24 * 60 * 60, + milliseconds: 24 * 60 * 60 * 1e3 + }, + hours: { minutes: 60, seconds: 60 * 60, milliseconds: 60 * 60 * 1e3 }, + minutes: { seconds: 60, milliseconds: 60 * 1e3 }, + seconds: { milliseconds: 1e3 } + }; + var casualMatrix = __spreadValues({ + years: { + quarters: 4, + months: 12, + weeks: 52, + days: 365, + hours: 365 * 24, + minutes: 365 * 24 * 60, + seconds: 365 * 24 * 60 * 60, + milliseconds: 365 * 24 * 60 * 60 * 1e3 + }, + quarters: { + months: 3, + weeks: 13, + days: 91, + hours: 91 * 24, + minutes: 91 * 24 * 60, + seconds: 91 * 24 * 60 * 60, + milliseconds: 91 * 24 * 60 * 60 * 1e3 + }, + months: { + weeks: 4, + days: 30, + hours: 30 * 24, + minutes: 30 * 24 * 60, + seconds: 30 * 24 * 60 * 60, + milliseconds: 30 * 24 * 60 * 60 * 1e3 + } + }, lowOrderMatrix); + var daysInYearAccurate = 146097 / 400; + var daysInMonthAccurate = 146097 / 4800; + var accurateMatrix = __spreadValues({ + years: { + quarters: 4, + months: 12, + weeks: daysInYearAccurate / 7, + days: daysInYearAccurate, + hours: daysInYearAccurate * 24, + minutes: daysInYearAccurate * 24 * 60, + seconds: daysInYearAccurate * 24 * 60 * 60, + milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1e3 + }, + quarters: { + months: 3, + weeks: daysInYearAccurate / 28, + days: daysInYearAccurate / 4, + hours: daysInYearAccurate * 24 / 4, + minutes: daysInYearAccurate * 24 * 60 / 4, + seconds: daysInYearAccurate * 24 * 60 * 60 / 4, + milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1e3 / 4 + }, + months: { + weeks: daysInMonthAccurate / 7, + days: daysInMonthAccurate, + hours: daysInMonthAccurate * 24, + minutes: daysInMonthAccurate * 24 * 60, + seconds: daysInMonthAccurate * 24 * 60 * 60, + milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1e3 + } + }, lowOrderMatrix); + var orderedUnits$1 = [ + "years", + "quarters", + "months", + "weeks", + "days", + "hours", + "minutes", + "seconds", + "milliseconds" + ]; + var reverseUnits = orderedUnits$1.slice(0).reverse(); + function clone$1(dur, alts, clear = false) { + const conf = { + values: clear ? alts.values : __spreadValues(__spreadValues({}, dur.values), alts.values || {}), + loc: dur.loc.clone(alts.loc), + conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy, + matrix: alts.matrix || dur.matrix + }; + return new Duration(conf); + } + function durationToMillis(matrix, vals) { + var _a; + let sum = (_a = vals.milliseconds) != null ? _a : 0; + for (const unit of reverseUnits.slice(1)) { + if (vals[unit]) { + sum += vals[unit] * matrix[unit]["milliseconds"]; + } + } + return sum; + } + function normalizeValues(matrix, vals) { + const factor = durationToMillis(matrix, vals) < 0 ? -1 : 1; + orderedUnits$1.reduceRight((previous, current) => { + if (!isUndefined(vals[current])) { + if (previous) { + const previousVal = vals[previous] * factor; + const conv = matrix[current][previous]; + const rollUp = Math.floor(previousVal / conv); + vals[current] += rollUp * factor; + vals[previous] -= rollUp * conv * factor; + } + return current; + } else { + return previous; + } + }, null); + orderedUnits$1.reduce((previous, current) => { + if (!isUndefined(vals[current])) { + if (previous) { + const fraction = vals[previous] % 1; + vals[previous] -= fraction; + vals[current] += fraction * matrix[previous][current]; + } + return current; + } else { + return previous; + } + }, null); + } + function removeZeroes(vals) { + const newVals = {}; + for (const [key, value] of Object.entries(vals)) { + if (value !== 0) { + newVals[key] = value; + } + } + return newVals; + } + var Duration = class { + constructor(config) { + const accurate = config.conversionAccuracy === "longterm" || false; + let matrix = accurate ? accurateMatrix : casualMatrix; + if (config.matrix) { + matrix = config.matrix; + } + this.values = config.values; + this.loc = config.loc || Locale.create(); + this.conversionAccuracy = accurate ? "longterm" : "casual"; + this.invalid = config.invalid || null; + this.matrix = matrix; + this.isLuxonDuration = true; + } + static fromMillis(count, opts) { + return Duration.fromObject({ milliseconds: count }, opts); + } + static fromObject(obj, opts = {}) { + if (obj == null || typeof obj !== "object") { + throw new InvalidArgumentError(`Duration.fromObject: argument expected to be an object, got ${obj === null ? "null" : typeof obj}`); + } + return new Duration({ + values: normalizeObject(obj, Duration.normalizeUnit), + loc: Locale.fromObject(opts), + conversionAccuracy: opts.conversionAccuracy, + matrix: opts.matrix + }); + } + static fromDurationLike(durationLike) { + if (isNumber(durationLike)) { + return Duration.fromMillis(durationLike); + } else if (Duration.isDuration(durationLike)) { + return durationLike; + } else if (typeof durationLike === "object") { + return Duration.fromObject(durationLike); + } else { + throw new InvalidArgumentError(`Unknown duration argument ${durationLike} of type ${typeof durationLike}`); + } + } + static fromISO(text, opts) { + const [parsed] = parseISODuration(text); + if (parsed) { + return Duration.fromObject(parsed, opts); + } else { + return Duration.invalid("unparsable", `the input "${text}" can't be parsed as ISO 8601`); + } + } + static fromISOTime(text, opts) { + const [parsed] = parseISOTimeOnly(text); + if (parsed) { + return Duration.fromObject(parsed, opts); + } else { + return Duration.invalid("unparsable", `the input "${text}" can't be parsed as ISO 8601`); + } + } + static invalid(reason, explanation = null) { + if (!reason) { + throw new InvalidArgumentError("need to specify a reason the Duration is invalid"); + } + const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); + if (Settings.throwOnInvalid) { + throw new InvalidDurationError(invalid); + } else { + return new Duration({ invalid }); + } + } + static normalizeUnit(unit) { + const normalized = { + year: "years", + years: "years", + quarter: "quarters", + quarters: "quarters", + month: "months", + months: "months", + week: "weeks", + weeks: "weeks", + day: "days", + days: "days", + hour: "hours", + hours: "hours", + minute: "minutes", + minutes: "minutes", + second: "seconds", + seconds: "seconds", + millisecond: "milliseconds", + milliseconds: "milliseconds" + }[unit ? unit.toLowerCase() : unit]; + if (!normalized) + throw new InvalidUnitError(unit); + return normalized; + } + static isDuration(o) { + return o && o.isLuxonDuration || false; + } + get locale() { + return this.isValid ? this.loc.locale : null; + } + get numberingSystem() { + return this.isValid ? this.loc.numberingSystem : null; + } + toFormat(fmt, opts = {}) { + const fmtOpts = __spreadProps(__spreadValues({}, opts), { + floor: opts.round !== false && opts.floor !== false + }); + return this.isValid ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt) : INVALID$2; + } + toHuman(opts = {}) { + if (!this.isValid) + return INVALID$2; + const l2 = orderedUnits$1.map((unit) => { + const val = this.values[unit]; + if (isUndefined(val)) { + return null; + } + return this.loc.numberFormatter(__spreadProps(__spreadValues({ style: "unit", unitDisplay: "long" }, opts), { unit: unit.slice(0, -1) })).format(val); + }).filter((n2) => n2); + return this.loc.listFormatter(__spreadValues({ type: "conjunction", style: opts.listStyle || "narrow" }, opts)).format(l2); + } + toObject() { + if (!this.isValid) + return {}; + return __spreadValues({}, this.values); + } + toISO() { + if (!this.isValid) + return null; + let s2 = "P"; + if (this.years !== 0) + s2 += this.years + "Y"; + if (this.months !== 0 || this.quarters !== 0) + s2 += this.months + this.quarters * 3 + "M"; + if (this.weeks !== 0) + s2 += this.weeks + "W"; + if (this.days !== 0) + s2 += this.days + "D"; + if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0) + s2 += "T"; + if (this.hours !== 0) + s2 += this.hours + "H"; + if (this.minutes !== 0) + s2 += this.minutes + "M"; + if (this.seconds !== 0 || this.milliseconds !== 0) + s2 += roundTo(this.seconds + this.milliseconds / 1e3, 3) + "S"; + if (s2 === "P") + s2 += "T0S"; + return s2; + } + toISOTime(opts = {}) { + if (!this.isValid) + return null; + const millis = this.toMillis(); + if (millis < 0 || millis >= 864e5) + return null; + opts = __spreadProps(__spreadValues({ + suppressMilliseconds: false, + suppressSeconds: false, + includePrefix: false, + format: "extended" + }, opts), { + includeOffset: false + }); + const dateTime = DateTime.fromMillis(millis, { zone: "UTC" }); + return dateTime.toISOTime(opts); + } + toJSON() { + return this.toISO(); + } + toString() { + return this.toISO(); + } + toMillis() { + if (!this.isValid) + return NaN; + return durationToMillis(this.matrix, this.values); + } + valueOf() { + return this.toMillis(); + } + plus(duration) { + if (!this.isValid) + return this; + const dur = Duration.fromDurationLike(duration), result = {}; + for (const k of orderedUnits$1) { + if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) { + result[k] = dur.get(k) + this.get(k); + } + } + return clone$1(this, { values: result }, true); + } + minus(duration) { + if (!this.isValid) + return this; + const dur = Duration.fromDurationLike(duration); + return this.plus(dur.negate()); + } + mapUnits(fn2) { + if (!this.isValid) + return this; + const result = {}; + for (const k of Object.keys(this.values)) { + result[k] = asNumber(fn2(this.values[k], k)); + } + return clone$1(this, { values: result }, true); + } + get(unit) { + return this[Duration.normalizeUnit(unit)]; + } + set(values) { + if (!this.isValid) + return this; + const mixed = __spreadValues(__spreadValues({}, this.values), normalizeObject(values, Duration.normalizeUnit)); + return clone$1(this, { values: mixed }); + } + reconfigure({ locale, numberingSystem, conversionAccuracy, matrix } = {}) { + const loc = this.loc.clone({ locale, numberingSystem }); + const opts = { loc, matrix, conversionAccuracy }; + return clone$1(this, opts); + } + as(unit) { + return this.isValid ? this.shiftTo(unit).get(unit) : NaN; + } + normalize() { + if (!this.isValid) + return this; + const vals = this.toObject(); + normalizeValues(this.matrix, vals); + return clone$1(this, { values: vals }, true); + } + rescale() { + if (!this.isValid) + return this; + const vals = removeZeroes(this.normalize().shiftToAll().toObject()); + return clone$1(this, { values: vals }, true); + } + shiftTo(...units) { + if (!this.isValid) + return this; + if (units.length === 0) { + return this; + } + units = units.map((u) => Duration.normalizeUnit(u)); + const built = {}, accumulated = {}, vals = this.toObject(); + let lastUnit; + for (const k of orderedUnits$1) { + if (units.indexOf(k) >= 0) { + lastUnit = k; + let own = 0; + for (const ak in accumulated) { + own += this.matrix[ak][k] * accumulated[ak]; + accumulated[ak] = 0; + } + if (isNumber(vals[k])) { + own += vals[k]; + } + const i = Math.trunc(own); + built[k] = i; + accumulated[k] = (own * 1e3 - i * 1e3) / 1e3; + } else if (isNumber(vals[k])) { + accumulated[k] = vals[k]; + } + } + for (const key in accumulated) { + if (accumulated[key] !== 0) { + built[lastUnit] += key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key]; + } + } + normalizeValues(this.matrix, built); + return clone$1(this, { values: built }, true); + } + shiftToAll() { + if (!this.isValid) + return this; + return this.shiftTo("years", "months", "weeks", "days", "hours", "minutes", "seconds", "milliseconds"); + } + negate() { + if (!this.isValid) + return this; + const negated = {}; + for (const k of Object.keys(this.values)) { + negated[k] = this.values[k] === 0 ? 0 : -this.values[k]; + } + return clone$1(this, { values: negated }, true); + } + get years() { + return this.isValid ? this.values.years || 0 : NaN; + } + get quarters() { + return this.isValid ? this.values.quarters || 0 : NaN; + } + get months() { + return this.isValid ? this.values.months || 0 : NaN; + } + get weeks() { + return this.isValid ? this.values.weeks || 0 : NaN; + } + get days() { + return this.isValid ? this.values.days || 0 : NaN; + } + get hours() { + return this.isValid ? this.values.hours || 0 : NaN; + } + get minutes() { + return this.isValid ? this.values.minutes || 0 : NaN; + } + get seconds() { + return this.isValid ? this.values.seconds || 0 : NaN; + } + get milliseconds() { + return this.isValid ? this.values.milliseconds || 0 : NaN; + } + get isValid() { + return this.invalid === null; + } + get invalidReason() { + return this.invalid ? this.invalid.reason : null; + } + get invalidExplanation() { + return this.invalid ? this.invalid.explanation : null; + } + equals(other) { + if (!this.isValid || !other.isValid) { + return false; + } + if (!this.loc.equals(other.loc)) { + return false; + } + function eq(v1, v2) { + if (v1 === void 0 || v1 === 0) + return v2 === void 0 || v2 === 0; + return v1 === v2; + } + for (const u of orderedUnits$1) { + if (!eq(this.values[u], other.values[u])) { + return false; + } + } + return true; + } + }; + var INVALID$1 = "Invalid Interval"; + function validateStartEnd(start, end) { + if (!start || !start.isValid) { + return Interval.invalid("missing or invalid start"); + } else if (!end || !end.isValid) { + return Interval.invalid("missing or invalid end"); + } else if (end < start) { + return Interval.invalid("end before start", `The end of an interval must be after its start, but you had start=${start.toISO()} and end=${end.toISO()}`); + } else { + return null; + } + } + var Interval = class { + constructor(config) { + this.s = config.start; + this.e = config.end; + this.invalid = config.invalid || null; + this.isLuxonInterval = true; + } + static invalid(reason, explanation = null) { + if (!reason) { + throw new InvalidArgumentError("need to specify a reason the Interval is invalid"); + } + const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); + if (Settings.throwOnInvalid) { + throw new InvalidIntervalError(invalid); + } else { + return new Interval({ invalid }); + } + } + static fromDateTimes(start, end) { + const builtStart = friendlyDateTime(start), builtEnd = friendlyDateTime(end); + const validateError = validateStartEnd(builtStart, builtEnd); + if (validateError == null) { + return new Interval({ + start: builtStart, + end: builtEnd + }); + } else { + return validateError; + } + } + static after(start, duration) { + const dur = Duration.fromDurationLike(duration), dt = friendlyDateTime(start); + return Interval.fromDateTimes(dt, dt.plus(dur)); + } + static before(end, duration) { + const dur = Duration.fromDurationLike(duration), dt = friendlyDateTime(end); + return Interval.fromDateTimes(dt.minus(dur), dt); + } + static fromISO(text, opts) { + const [s2, e] = (text || "").split("/", 2); + if (s2 && e) { + let start, startIsValid; + try { + start = DateTime.fromISO(s2, opts); + startIsValid = start.isValid; + } catch (e2) { + startIsValid = false; + } + let end, endIsValid; + try { + end = DateTime.fromISO(e, opts); + endIsValid = end.isValid; + } catch (e2) { + endIsValid = false; + } + if (startIsValid && endIsValid) { + return Interval.fromDateTimes(start, end); + } + if (startIsValid) { + const dur = Duration.fromISO(e, opts); + if (dur.isValid) { + return Interval.after(start, dur); + } + } else if (endIsValid) { + const dur = Duration.fromISO(s2, opts); + if (dur.isValid) { + return Interval.before(end, dur); + } + } + } + return Interval.invalid("unparsable", `the input "${text}" can't be parsed as ISO 8601`); + } + static isInterval(o) { + return o && o.isLuxonInterval || false; + } + get start() { + return this.isValid ? this.s : null; + } + get end() { + return this.isValid ? this.e : null; + } + get isValid() { + return this.invalidReason === null; + } + get invalidReason() { + return this.invalid ? this.invalid.reason : null; + } + get invalidExplanation() { + return this.invalid ? this.invalid.explanation : null; + } + length(unit = "milliseconds") { + return this.isValid ? this.toDuration(...[unit]).get(unit) : NaN; + } + count(unit = "milliseconds") { + if (!this.isValid) + return NaN; + const start = this.start.startOf(unit), end = this.end.startOf(unit); + return Math.floor(end.diff(start, unit).get(unit)) + (end.valueOf() !== this.end.valueOf()); + } + hasSame(unit) { + return this.isValid ? this.isEmpty() || this.e.minus(1).hasSame(this.s, unit) : false; + } + isEmpty() { + return this.s.valueOf() === this.e.valueOf(); + } + isAfter(dateTime) { + if (!this.isValid) + return false; + return this.s > dateTime; + } + isBefore(dateTime) { + if (!this.isValid) + return false; + return this.e <= dateTime; + } + contains(dateTime) { + if (!this.isValid) + return false; + return this.s <= dateTime && this.e > dateTime; + } + set({ start, end } = {}) { + if (!this.isValid) + return this; + return Interval.fromDateTimes(start || this.s, end || this.e); + } + splitAt(...dateTimes) { + if (!this.isValid) + return []; + const sorted = dateTimes.map(friendlyDateTime).filter((d) => this.contains(d)).sort(), results = []; + let { s: s2 } = this, i = 0; + while (s2 < this.e) { + const added = sorted[i] || this.e, next = +added > +this.e ? this.e : added; + results.push(Interval.fromDateTimes(s2, next)); + s2 = next; + i += 1; + } + return results; + } + splitBy(duration) { + const dur = Duration.fromDurationLike(duration); + if (!this.isValid || !dur.isValid || dur.as("milliseconds") === 0) { + return []; + } + let { s: s2 } = this, idx = 1, next; + const results = []; + while (s2 < this.e) { + const added = this.start.plus(dur.mapUnits((x) => x * idx)); + next = +added > +this.e ? this.e : added; + results.push(Interval.fromDateTimes(s2, next)); + s2 = next; + idx += 1; + } + return results; + } + divideEqually(numberOfParts) { + if (!this.isValid) + return []; + return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts); + } + overlaps(other) { + return this.e > other.s && this.s < other.e; + } + abutsStart(other) { + if (!this.isValid) + return false; + return +this.e === +other.s; + } + abutsEnd(other) { + if (!this.isValid) + return false; + return +other.e === +this.s; + } + engulfs(other) { + if (!this.isValid) + return false; + return this.s <= other.s && this.e >= other.e; + } + equals(other) { + if (!this.isValid || !other.isValid) { + return false; + } + return this.s.equals(other.s) && this.e.equals(other.e); + } + intersection(other) { + if (!this.isValid) + return this; + const s2 = this.s > other.s ? this.s : other.s, e = this.e < other.e ? this.e : other.e; + if (s2 >= e) { + return null; + } else { + return Interval.fromDateTimes(s2, e); + } + } + union(other) { + if (!this.isValid) + return this; + const s2 = this.s < other.s ? this.s : other.s, e = this.e > other.e ? this.e : other.e; + return Interval.fromDateTimes(s2, e); + } + static merge(intervals) { + const [found, final] = intervals.sort((a, b) => a.s - b.s).reduce(([sofar, current], item) => { + if (!current) { + return [sofar, item]; + } else if (current.overlaps(item) || current.abutsStart(item)) { + return [sofar, current.union(item)]; + } else { + return [sofar.concat([current]), item]; + } + }, [[], null]); + if (final) { + found.push(final); + } + return found; + } + static xor(intervals) { + let start = null, currentCount = 0; + const results = [], ends = intervals.map((i) => [ + { time: i.s, type: "s" }, + { time: i.e, type: "e" } + ]), flattened = Array.prototype.concat(...ends), arr = flattened.sort((a, b) => a.time - b.time); + for (const i of arr) { + currentCount += i.type === "s" ? 1 : -1; + if (currentCount === 1) { + start = i.time; + } else { + if (start && +start !== +i.time) { + results.push(Interval.fromDateTimes(start, i.time)); + } + start = null; + } + } + return Interval.merge(results); + } + difference(...intervals) { + return Interval.xor([this].concat(intervals)).map((i) => this.intersection(i)).filter((i) => i && !i.isEmpty()); + } + toString() { + if (!this.isValid) + return INVALID$1; + return `[${this.s.toISO()} \u2013 ${this.e.toISO()})`; + } + toLocaleString(formatOpts = DATE_SHORT, opts = {}) { + return this.isValid ? Formatter.create(this.s.loc.clone(opts), formatOpts).formatInterval(this) : INVALID$1; + } + toISO(opts) { + if (!this.isValid) + return INVALID$1; + return `${this.s.toISO(opts)}/${this.e.toISO(opts)}`; + } + toISODate() { + if (!this.isValid) + return INVALID$1; + return `${this.s.toISODate()}/${this.e.toISODate()}`; + } + toISOTime(opts) { + if (!this.isValid) + return INVALID$1; + return `${this.s.toISOTime(opts)}/${this.e.toISOTime(opts)}`; + } + toFormat(dateFormat, { separator = " \u2013 " } = {}) { + if (!this.isValid) + return INVALID$1; + return `${this.s.toFormat(dateFormat)}${separator}${this.e.toFormat(dateFormat)}`; + } + toDuration(unit, opts) { + if (!this.isValid) { + return Duration.invalid(this.invalidReason); + } + return this.e.diff(this.s, unit, opts); + } + mapEndpoints(mapFn) { + return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e)); + } + }; + var Info = class { + static hasDST(zone = Settings.defaultZone) { + const proto = DateTime.now().setZone(zone).set({ month: 12 }); + return !zone.isUniversal && proto.offset !== proto.set({ month: 6 }).offset; + } + static isValidIANAZone(zone) { + return IANAZone.isValidZone(zone); + } + static normalizeZone(input) { + return normalizeZone(input, Settings.defaultZone); + } + static months(length = "long", { locale = null, numberingSystem = null, locObj = null, outputCalendar = "gregory" } = {}) { + return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length); + } + static monthsFormat(length = "long", { locale = null, numberingSystem = null, locObj = null, outputCalendar = "gregory" } = {}) { + return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length, true); + } + static weekdays(length = "long", { locale = null, numberingSystem = null, locObj = null } = {}) { + return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length); + } + static weekdaysFormat(length = "long", { locale = null, numberingSystem = null, locObj = null } = {}) { + return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length, true); + } + static meridiems({ locale = null } = {}) { + return Locale.create(locale).meridiems(); + } + static eras(length = "short", { locale = null } = {}) { + return Locale.create(locale, null, "gregory").eras(length); + } + static features() { + return { relative: hasRelative() }; + } + }; + function dayDiff(earlier, later) { + const utcDayStart = (dt) => dt.toUTC(0, { keepLocalTime: true }).startOf("day").valueOf(), ms = utcDayStart(later) - utcDayStart(earlier); + return Math.floor(Duration.fromMillis(ms).as("days")); + } + function highOrderDiffs(cursor, later, units) { + const differs = [ + ["years", (a, b) => b.year - a.year], + ["quarters", (a, b) => b.quarter - a.quarter + (b.year - a.year) * 4], + ["months", (a, b) => b.month - a.month + (b.year - a.year) * 12], + [ + "weeks", + (a, b) => { + const days = dayDiff(a, b); + return (days - days % 7) / 7; + } + ], + ["days", dayDiff] + ]; + const results = {}; + const earlier = cursor; + let lowestOrder, highWater; + for (const [unit, differ] of differs) { + if (units.indexOf(unit) >= 0) { + lowestOrder = unit; + results[unit] = differ(cursor, later); + highWater = earlier.plus(results); + if (highWater > later) { + results[unit]--; + cursor = earlier.plus(results); + if (cursor > later) { + highWater = cursor; + results[unit]--; + cursor = earlier.plus(results); + } + } else { + cursor = highWater; + } + } + } + return [cursor, results, highWater, lowestOrder]; + } + function diff(earlier, later, units, opts) { + let [cursor, results, highWater, lowestOrder] = highOrderDiffs(earlier, later, units); + const remainingMillis = later - cursor; + const lowerOrderUnits = units.filter((u) => ["hours", "minutes", "seconds", "milliseconds"].indexOf(u) >= 0); + if (lowerOrderUnits.length === 0) { + if (highWater < later) { + highWater = cursor.plus({ [lowestOrder]: 1 }); + } + if (highWater !== cursor) { + results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor); + } + } + const duration = Duration.fromObject(results, opts); + if (lowerOrderUnits.length > 0) { + return Duration.fromMillis(remainingMillis, opts).shiftTo(...lowerOrderUnits).plus(duration); + } else { + return duration; + } + } + var numberingSystems = { + arab: "[\u0660-\u0669]", + arabext: "[\u06F0-\u06F9]", + bali: "[\u1B50-\u1B59]", + beng: "[\u09E6-\u09EF]", + deva: "[\u0966-\u096F]", + fullwide: "[\uFF10-\uFF19]", + gujr: "[\u0AE6-\u0AEF]", + hanidec: "[\u3007|\u4E00|\u4E8C|\u4E09|\u56DB|\u4E94|\u516D|\u4E03|\u516B|\u4E5D]", + khmr: "[\u17E0-\u17E9]", + knda: "[\u0CE6-\u0CEF]", + laoo: "[\u0ED0-\u0ED9]", + limb: "[\u1946-\u194F]", + mlym: "[\u0D66-\u0D6F]", + mong: "[\u1810-\u1819]", + mymr: "[\u1040-\u1049]", + orya: "[\u0B66-\u0B6F]", + tamldec: "[\u0BE6-\u0BEF]", + telu: "[\u0C66-\u0C6F]", + thai: "[\u0E50-\u0E59]", + tibt: "[\u0F20-\u0F29]", + latn: "\\d" + }; + var numberingSystemsUTF16 = { + arab: [1632, 1641], + arabext: [1776, 1785], + bali: [6992, 7001], + beng: [2534, 2543], + deva: [2406, 2415], + fullwide: [65296, 65303], + gujr: [2790, 2799], + khmr: [6112, 6121], + knda: [3302, 3311], + laoo: [3792, 3801], + limb: [6470, 6479], + mlym: [3430, 3439], + mong: [6160, 6169], + mymr: [4160, 4169], + orya: [2918, 2927], + tamldec: [3046, 3055], + telu: [3174, 3183], + thai: [3664, 3673], + tibt: [3872, 3881] + }; + var hanidecChars = numberingSystems.hanidec.replace(/[\[|\]]/g, "").split(""); + function parseDigits(str) { + let value = parseInt(str, 10); + if (isNaN(value)) { + value = ""; + for (let i = 0; i < str.length; i++) { + const code = str.charCodeAt(i); + if (str[i].search(numberingSystems.hanidec) !== -1) { + value += hanidecChars.indexOf(str[i]); + } else { + for (const key in numberingSystemsUTF16) { + const [min, max] = numberingSystemsUTF16[key]; + if (code >= min && code <= max) { + value += code - min; + } + } + } + } + return parseInt(value, 10); + } else { + return value; + } + } + function digitRegex({ numberingSystem }, append = "") { + return new RegExp(`${numberingSystems[numberingSystem || "latn"]}${append}`); + } + var MISSING_FTP = "missing Intl.DateTimeFormat.formatToParts support"; + function intUnit(regex, post = (i) => i) { + return { regex, deser: ([s2]) => post(parseDigits(s2)) }; + } + var NBSP = String.fromCharCode(160); + var spaceOrNBSP = `[ ${NBSP}]`; + var spaceOrNBSPRegExp = new RegExp(spaceOrNBSP, "g"); + function fixListRegex(s2) { + return s2.replace(/\./g, "\\.?").replace(spaceOrNBSPRegExp, spaceOrNBSP); + } + function stripInsensitivities(s2) { + return s2.replace(/\./g, "").replace(spaceOrNBSPRegExp, " ").toLowerCase(); + } + function oneOf(strings, startIndex) { + if (strings === null) { + return null; + } else { + return { + regex: RegExp(strings.map(fixListRegex).join("|")), + deser: ([s2]) => strings.findIndex((i) => stripInsensitivities(s2) === stripInsensitivities(i)) + startIndex + }; + } + } + function offset(regex, groups) { + return { regex, deser: ([, h, m]) => signedOffset(h, m), groups }; + } + function simple(regex) { + return { regex, deser: ([s2]) => s2 }; + } + function escapeToken(value) { + return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&"); + } + function unitForToken(token, loc) { + const one = digitRegex(loc), two = digitRegex(loc, "{2}"), three = digitRegex(loc, "{3}"), four = digitRegex(loc, "{4}"), six = digitRegex(loc, "{6}"), oneOrTwo = digitRegex(loc, "{1,2}"), oneToThree = digitRegex(loc, "{1,3}"), oneToSix = digitRegex(loc, "{1,6}"), oneToNine = digitRegex(loc, "{1,9}"), twoToFour = digitRegex(loc, "{2,4}"), fourToSix = digitRegex(loc, "{4,6}"), literal = (t) => ({ regex: RegExp(escapeToken(t.val)), deser: ([s2]) => s2, literal: true }), unitate = (t) => { + if (token.literal) { + return literal(t); + } + switch (t.val) { + case "G": + return oneOf(loc.eras("short"), 0); + case "GG": + return oneOf(loc.eras("long"), 0); + case "y": + return intUnit(oneToSix); + case "yy": + return intUnit(twoToFour, untruncateYear); + case "yyyy": + return intUnit(four); + case "yyyyy": + return intUnit(fourToSix); + case "yyyyyy": + return intUnit(six); + case "M": + return intUnit(oneOrTwo); + case "MM": + return intUnit(two); + case "MMM": + return oneOf(loc.months("short", true), 1); + case "MMMM": + return oneOf(loc.months("long", true), 1); + case "L": + return intUnit(oneOrTwo); + case "LL": + return intUnit(two); + case "LLL": + return oneOf(loc.months("short", false), 1); + case "LLLL": + return oneOf(loc.months("long", false), 1); + case "d": + return intUnit(oneOrTwo); + case "dd": + return intUnit(two); + case "o": + return intUnit(oneToThree); + case "ooo": + return intUnit(three); + case "HH": + return intUnit(two); + case "H": + return intUnit(oneOrTwo); + case "hh": + return intUnit(two); + case "h": + return intUnit(oneOrTwo); + case "mm": + return intUnit(two); + case "m": + return intUnit(oneOrTwo); + case "q": + return intUnit(oneOrTwo); + case "qq": + return intUnit(two); + case "s": + return intUnit(oneOrTwo); + case "ss": + return intUnit(two); + case "S": + return intUnit(oneToThree); + case "SSS": + return intUnit(three); + case "u": + return simple(oneToNine); + case "uu": + return simple(oneOrTwo); + case "uuu": + return intUnit(one); + case "a": + return oneOf(loc.meridiems(), 0); + case "kkkk": + return intUnit(four); + case "kk": + return intUnit(twoToFour, untruncateYear); + case "W": + return intUnit(oneOrTwo); + case "WW": + return intUnit(two); + case "E": + case "c": + return intUnit(one); + case "EEE": + return oneOf(loc.weekdays("short", false), 1); + case "EEEE": + return oneOf(loc.weekdays("long", false), 1); + case "ccc": + return oneOf(loc.weekdays("short", true), 1); + case "cccc": + return oneOf(loc.weekdays("long", true), 1); + case "Z": + case "ZZ": + return offset(new RegExp(`([+-]${oneOrTwo.source})(?::(${two.source}))?`), 2); + case "ZZZ": + return offset(new RegExp(`([+-]${oneOrTwo.source})(${two.source})?`), 2); + case "z": + return simple(/[a-z_+-/]{1,256}?/i); + case " ": + return simple(/[^\S\n\r]/); + default: + return literal(t); + } + }; + const unit = unitate(token) || { + invalidReason: MISSING_FTP + }; + unit.token = token; + return unit; + } + var partTypeStyleToTokenVal = { + year: { + "2-digit": "yy", + numeric: "yyyyy" + }, + month: { + numeric: "M", + "2-digit": "MM", + short: "MMM", + long: "MMMM" + }, + day: { + numeric: "d", + "2-digit": "dd" + }, + weekday: { + short: "EEE", + long: "EEEE" + }, + dayperiod: "a", + dayPeriod: "a", + hour12: { + numeric: "h", + "2-digit": "hh" + }, + hour24: { + numeric: "H", + "2-digit": "HH" + }, + minute: { + numeric: "m", + "2-digit": "mm" + }, + second: { + numeric: "s", + "2-digit": "ss" + }, + timeZoneName: { + long: "ZZZZZ", + short: "ZZZ" + } + }; + function tokenForPart(part, formatOpts, resolvedOpts) { + const { type, value } = part; + if (type === "literal") { + const isSpace = /^\s+$/.test(value); + return { + literal: !isSpace, + val: isSpace ? " " : value + }; + } + const style = formatOpts[type]; + let actualType = type; + if (type === "hour") { + if (formatOpts.hour12 != null) { + actualType = formatOpts.hour12 ? "hour12" : "hour24"; + } else if (formatOpts.hourCycle != null) { + if (formatOpts.hourCycle === "h11" || formatOpts.hourCycle === "h12") { + actualType = "hour12"; + } else { + actualType = "hour24"; + } + } else { + actualType = resolvedOpts.hour12 ? "hour12" : "hour24"; + } + } + let val = partTypeStyleToTokenVal[actualType]; + if (typeof val === "object") { + val = val[style]; + } + if (val) { + return { + literal: false, + val + }; + } + return void 0; + } + function buildRegex(units) { + const re = units.map((u) => u.regex).reduce((f, r) => `${f}(${r.source})`, ""); + return [`^${re}$`, units]; + } + function match(input, regex, handlers) { + const matches = input.match(regex); + if (matches) { + const all = {}; + let matchIndex = 1; + for (const i in handlers) { + if (hasOwnProperty(handlers, i)) { + const h = handlers[i], groups = h.groups ? h.groups + 1 : 1; + if (!h.literal && h.token) { + all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups)); + } + matchIndex += groups; + } + } + return [matches, all]; + } else { + return [matches, {}]; + } + } + function dateTimeFromMatches(matches) { + const toField = (token) => { + switch (token) { + case "S": + return "millisecond"; + case "s": + return "second"; + case "m": + return "minute"; + case "h": + case "H": + return "hour"; + case "d": + return "day"; + case "o": + return "ordinal"; + case "L": + case "M": + return "month"; + case "y": + return "year"; + case "E": + case "c": + return "weekday"; + case "W": + return "weekNumber"; + case "k": + return "weekYear"; + case "q": + return "quarter"; + default: + return null; + } + }; + let zone = null; + let specificOffset; + if (!isUndefined(matches.z)) { + zone = IANAZone.create(matches.z); + } + if (!isUndefined(matches.Z)) { + if (!zone) { + zone = new FixedOffsetZone(matches.Z); + } + specificOffset = matches.Z; + } + if (!isUndefined(matches.q)) { + matches.M = (matches.q - 1) * 3 + 1; + } + if (!isUndefined(matches.h)) { + if (matches.h < 12 && matches.a === 1) { + matches.h += 12; + } else if (matches.h === 12 && matches.a === 0) { + matches.h = 0; + } + } + if (matches.G === 0 && matches.y) { + matches.y = -matches.y; + } + if (!isUndefined(matches.u)) { + matches.S = parseMillis(matches.u); + } + const vals = Object.keys(matches).reduce((r, k) => { + const f = toField(k); + if (f) { + r[f] = matches[k]; + } + return r; + }, {}); + return [vals, zone, specificOffset]; + } + var dummyDateTimeCache = null; + function getDummyDateTime() { + if (!dummyDateTimeCache) { + dummyDateTimeCache = DateTime.fromMillis(1555555555555); + } + return dummyDateTimeCache; + } + function maybeExpandMacroToken(token, locale) { + if (token.literal) { + return token; + } + const formatOpts = Formatter.macroTokenToFormatOpts(token.val); + const tokens = formatOptsToTokens(formatOpts, locale); + if (tokens == null || tokens.includes(void 0)) { + return token; + } + return tokens; + } + function expandMacroTokens(tokens, locale) { + return Array.prototype.concat(...tokens.map((t) => maybeExpandMacroToken(t, locale))); + } + function explainFromTokens(locale, input, format) { + const tokens = expandMacroTokens(Formatter.parseFormat(format), locale), units = tokens.map((t) => unitForToken(t, locale)), disqualifyingUnit = units.find((t) => t.invalidReason); + if (disqualifyingUnit) { + return { input, tokens, invalidReason: disqualifyingUnit.invalidReason }; + } else { + const [regexString, handlers] = buildRegex(units), regex = RegExp(regexString, "i"), [rawMatches, matches] = match(input, regex, handlers), [result, zone, specificOffset] = matches ? dateTimeFromMatches(matches) : [null, null, void 0]; + if (hasOwnProperty(matches, "a") && hasOwnProperty(matches, "H")) { + throw new ConflictingSpecificationError("Can't include meridiem when specifying 24-hour format"); + } + return { input, tokens, regex, rawMatches, matches, result, zone, specificOffset }; + } + } + function parseFromTokens(locale, input, format) { + const { result, zone, specificOffset, invalidReason } = explainFromTokens(locale, input, format); + return [result, zone, specificOffset, invalidReason]; + } + function formatOptsToTokens(formatOpts, locale) { + if (!formatOpts) { + return null; + } + const formatter = Formatter.create(locale, formatOpts); + const df = formatter.dtFormatter(getDummyDateTime()); + const parts = df.formatToParts(); + const resolvedOpts = df.resolvedOptions(); + return parts.map((p) => tokenForPart(p, formatOpts, resolvedOpts)); + } + var nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]; + var leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335]; + function unitOutOfRange(unit, value) { + return new Invalid("unit out of range", `you specified ${value} (of type ${typeof value}) as a ${unit}, which is invalid`); + } + function dayOfWeek(year, month, day) { + const d = new Date(Date.UTC(year, month - 1, day)); + if (year < 100 && year >= 0) { + d.setUTCFullYear(d.getUTCFullYear() - 1900); + } + const js = d.getUTCDay(); + return js === 0 ? 7 : js; + } + function computeOrdinal(year, month, day) { + return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1]; + } + function uncomputeOrdinal(year, ordinal) { + const table = isLeapYear(year) ? leapLadder : nonLeapLadder, month0 = table.findIndex((i) => i < ordinal), day = ordinal - table[month0]; + return { month: month0 + 1, day }; + } + function gregorianToWeek(gregObj) { + const { year, month, day } = gregObj, ordinal = computeOrdinal(year, month, day), weekday = dayOfWeek(year, month, day); + let weekNumber = Math.floor((ordinal - weekday + 10) / 7), weekYear; + if (weekNumber < 1) { + weekYear = year - 1; + weekNumber = weeksInWeekYear(weekYear); + } else if (weekNumber > weeksInWeekYear(year)) { + weekYear = year + 1; + weekNumber = 1; + } else { + weekYear = year; + } + return __spreadValues({ weekYear, weekNumber, weekday }, timeObject(gregObj)); + } + function weekToGregorian(weekData) { + const { weekYear, weekNumber, weekday } = weekData, weekdayOfJan4 = dayOfWeek(weekYear, 1, 4), yearInDays = daysInYear(weekYear); + let ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 3, year; + if (ordinal < 1) { + year = weekYear - 1; + ordinal += daysInYear(year); + } else if (ordinal > yearInDays) { + year = weekYear + 1; + ordinal -= daysInYear(weekYear); + } else { + year = weekYear; + } + const { month, day } = uncomputeOrdinal(year, ordinal); + return __spreadValues({ year, month, day }, timeObject(weekData)); + } + function gregorianToOrdinal(gregData) { + const { year, month, day } = gregData; + const ordinal = computeOrdinal(year, month, day); + return __spreadValues({ year, ordinal }, timeObject(gregData)); + } + function ordinalToGregorian(ordinalData) { + const { year, ordinal } = ordinalData; + const { month, day } = uncomputeOrdinal(year, ordinal); + return __spreadValues({ year, month, day }, timeObject(ordinalData)); + } + function hasInvalidWeekData(obj) { + const validYear = isInteger(obj.weekYear), validWeek = integerBetween(obj.weekNumber, 1, weeksInWeekYear(obj.weekYear)), validWeekday = integerBetween(obj.weekday, 1, 7); + if (!validYear) { + return unitOutOfRange("weekYear", obj.weekYear); + } else if (!validWeek) { + return unitOutOfRange("week", obj.week); + } else if (!validWeekday) { + return unitOutOfRange("weekday", obj.weekday); + } else + return false; + } + function hasInvalidOrdinalData(obj) { + const validYear = isInteger(obj.year), validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year)); + if (!validYear) { + return unitOutOfRange("year", obj.year); + } else if (!validOrdinal) { + return unitOutOfRange("ordinal", obj.ordinal); + } else + return false; + } + function hasInvalidGregorianData(obj) { + const validYear = isInteger(obj.year), validMonth = integerBetween(obj.month, 1, 12), validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month)); + if (!validYear) { + return unitOutOfRange("year", obj.year); + } else if (!validMonth) { + return unitOutOfRange("month", obj.month); + } else if (!validDay) { + return unitOutOfRange("day", obj.day); + } else + return false; + } + function hasInvalidTimeData(obj) { + const { hour, minute, second, millisecond } = obj; + const validHour = integerBetween(hour, 0, 23) || hour === 24 && minute === 0 && second === 0 && millisecond === 0, validMinute = integerBetween(minute, 0, 59), validSecond = integerBetween(second, 0, 59), validMillisecond = integerBetween(millisecond, 0, 999); + if (!validHour) { + return unitOutOfRange("hour", hour); + } else if (!validMinute) { + return unitOutOfRange("minute", minute); + } else if (!validSecond) { + return unitOutOfRange("second", second); + } else if (!validMillisecond) { + return unitOutOfRange("millisecond", millisecond); + } else + return false; + } + var INVALID = "Invalid DateTime"; + var MAX_DATE = 864e13; + function unsupportedZone(zone) { + return new Invalid("unsupported zone", `the zone "${zone.name}" is not supported`); + } + function possiblyCachedWeekData(dt) { + if (dt.weekData === null) { + dt.weekData = gregorianToWeek(dt.c); + } + return dt.weekData; + } + function clone(inst, alts) { + const current = { + ts: inst.ts, + zone: inst.zone, + c: inst.c, + o: inst.o, + loc: inst.loc, + invalid: inst.invalid + }; + return new DateTime(__spreadProps(__spreadValues(__spreadValues({}, current), alts), { old: current })); + } + function fixOffset(localTS, o, tz) { + let utcGuess = localTS - o * 60 * 1e3; + const o2 = tz.offset(utcGuess); + if (o === o2) { + return [utcGuess, o]; + } + utcGuess -= (o2 - o) * 60 * 1e3; + const o3 = tz.offset(utcGuess); + if (o2 === o3) { + return [utcGuess, o2]; + } + return [localTS - Math.min(o2, o3) * 60 * 1e3, Math.max(o2, o3)]; + } + function tsToObj(ts, offset2) { + ts += offset2 * 60 * 1e3; + const d = new Date(ts); + return { + year: d.getUTCFullYear(), + month: d.getUTCMonth() + 1, + day: d.getUTCDate(), + hour: d.getUTCHours(), + minute: d.getUTCMinutes(), + second: d.getUTCSeconds(), + millisecond: d.getUTCMilliseconds() + }; + } + function objToTS(obj, offset2, zone) { + return fixOffset(objToLocalTS(obj), offset2, zone); + } + function adjustTime(inst, dur) { + const oPre = inst.o, year = inst.c.year + Math.trunc(dur.years), month = inst.c.month + Math.trunc(dur.months) + Math.trunc(dur.quarters) * 3, c = __spreadProps(__spreadValues({}, inst.c), { + year, + month, + day: Math.min(inst.c.day, daysInMonth(year, month)) + Math.trunc(dur.days) + Math.trunc(dur.weeks) * 7 + }), millisToAdd = Duration.fromObject({ + years: dur.years - Math.trunc(dur.years), + quarters: dur.quarters - Math.trunc(dur.quarters), + months: dur.months - Math.trunc(dur.months), + weeks: dur.weeks - Math.trunc(dur.weeks), + days: dur.days - Math.trunc(dur.days), + hours: dur.hours, + minutes: dur.minutes, + seconds: dur.seconds, + milliseconds: dur.milliseconds + }).as("milliseconds"), localTS = objToLocalTS(c); + let [ts, o] = fixOffset(localTS, oPre, inst.zone); + if (millisToAdd !== 0) { + ts += millisToAdd; + o = inst.zone.offset(ts); + } + return { ts, o }; + } + function parseDataToDateTime(parsed, parsedZone, opts, format, text, specificOffset) { + const { setZone, zone } = opts; + if (parsed && Object.keys(parsed).length !== 0 || parsedZone) { + const interpretationZone = parsedZone || zone, inst = DateTime.fromObject(parsed, __spreadProps(__spreadValues({}, opts), { + zone: interpretationZone, + specificOffset + })); + return setZone ? inst : inst.setZone(zone); + } else { + return DateTime.invalid(new Invalid("unparsable", `the input "${text}" can't be parsed as ${format}`)); + } + } + function toTechFormat(dt, format, allowZ = true) { + return dt.isValid ? Formatter.create(Locale.create("en-US"), { + allowZ, + forceSimple: true + }).formatDateTimeFromString(dt, format) : null; + } + function toISODate(o, extended) { + const longFormat = o.c.year > 9999 || o.c.year < 0; + let c = ""; + if (longFormat && o.c.year >= 0) + c += "+"; + c += padStart(o.c.year, longFormat ? 6 : 4); + if (extended) { + c += "-"; + c += padStart(o.c.month); + c += "-"; + c += padStart(o.c.day); + } else { + c += padStart(o.c.month); + c += padStart(o.c.day); + } + return c; + } + function toISOTime(o, extended, suppressSeconds, suppressMilliseconds, includeOffset, extendedZone) { + let c = padStart(o.c.hour); + if (extended) { + c += ":"; + c += padStart(o.c.minute); + if (o.c.millisecond !== 0 || o.c.second !== 0 || !suppressSeconds) { + c += ":"; + } + } else { + c += padStart(o.c.minute); + } + if (o.c.millisecond !== 0 || o.c.second !== 0 || !suppressSeconds) { + c += padStart(o.c.second); + if (o.c.millisecond !== 0 || !suppressMilliseconds) { + c += "."; + c += padStart(o.c.millisecond, 3); + } + } + if (includeOffset) { + if (o.isOffsetFixed && o.offset === 0 && !extendedZone) { + c += "Z"; + } else if (o.o < 0) { + c += "-"; + c += padStart(Math.trunc(-o.o / 60)); + c += ":"; + c += padStart(Math.trunc(-o.o % 60)); + } else { + c += "+"; + c += padStart(Math.trunc(o.o / 60)); + c += ":"; + c += padStart(Math.trunc(o.o % 60)); + } + } + if (extendedZone) { + c += "[" + o.zone.ianaName + "]"; + } + return c; + } + var defaultUnitValues = { + month: 1, + day: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + }; + var defaultWeekUnitValues = { + weekNumber: 1, + weekday: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + }; + var defaultOrdinalUnitValues = { + ordinal: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + }; + var orderedUnits = ["year", "month", "day", "hour", "minute", "second", "millisecond"]; + var orderedWeekUnits = [ + "weekYear", + "weekNumber", + "weekday", + "hour", + "minute", + "second", + "millisecond" + ]; + var orderedOrdinalUnits = ["year", "ordinal", "hour", "minute", "second", "millisecond"]; + function normalizeUnit(unit) { + const normalized = { + year: "year", + years: "year", + month: "month", + months: "month", + day: "day", + days: "day", + hour: "hour", + hours: "hour", + minute: "minute", + minutes: "minute", + quarter: "quarter", + quarters: "quarter", + second: "second", + seconds: "second", + millisecond: "millisecond", + milliseconds: "millisecond", + weekday: "weekday", + weekdays: "weekday", + weeknumber: "weekNumber", + weeksnumber: "weekNumber", + weeknumbers: "weekNumber", + weekyear: "weekYear", + weekyears: "weekYear", + ordinal: "ordinal" + }[unit.toLowerCase()]; + if (!normalized) + throw new InvalidUnitError(unit); + return normalized; + } + function quickDT(obj, opts) { + const zone = normalizeZone(opts.zone, Settings.defaultZone), loc = Locale.fromObject(opts), tsNow = Settings.now(); + let ts, o; + if (!isUndefined(obj.year)) { + for (const u of orderedUnits) { + if (isUndefined(obj[u])) { + obj[u] = defaultUnitValues[u]; + } + } + const invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj); + if (invalid) { + return DateTime.invalid(invalid); + } + const offsetProvis = zone.offset(tsNow); + [ts, o] = objToTS(obj, offsetProvis, zone); + } else { + ts = tsNow; + } + return new DateTime({ ts, zone, loc, o }); + } + function diffRelative(start, end, opts) { + const round = isUndefined(opts.round) ? true : opts.round, format = (c, unit) => { + c = roundTo(c, round || opts.calendary ? 0 : 2, true); + const formatter = end.loc.clone(opts).relFormatter(opts); + return formatter.format(c, unit); + }, differ = (unit) => { + if (opts.calendary) { + if (!end.hasSame(start, unit)) { + return end.startOf(unit).diff(start.startOf(unit), unit).get(unit); + } else + return 0; + } else { + return end.diff(start, unit).get(unit); + } + }; + if (opts.unit) { + return format(differ(opts.unit), opts.unit); + } + for (const unit of opts.units) { + const count = differ(unit); + if (Math.abs(count) >= 1) { + return format(count, unit); + } + } + return format(start > end ? -0 : 0, opts.units[opts.units.length - 1]); + } + function lastOpts(argList) { + let opts = {}, args2; + if (argList.length > 0 && typeof argList[argList.length - 1] === "object") { + opts = argList[argList.length - 1]; + args2 = Array.from(argList).slice(0, argList.length - 1); + } else { + args2 = Array.from(argList); + } + return [opts, args2]; + } + var DateTime = class { + constructor(config) { + const zone = config.zone || Settings.defaultZone; + let invalid = config.invalid || (Number.isNaN(config.ts) ? new Invalid("invalid input") : null) || (!zone.isValid ? unsupportedZone(zone) : null); + this.ts = isUndefined(config.ts) ? Settings.now() : config.ts; + let c = null, o = null; + if (!invalid) { + const unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone); + if (unchanged) { + [c, o] = [config.old.c, config.old.o]; + } else { + const ot = zone.offset(this.ts); + c = tsToObj(this.ts, ot); + invalid = Number.isNaN(c.year) ? new Invalid("invalid input") : null; + c = invalid ? null : c; + o = invalid ? null : ot; + } + } + this._zone = zone; + this.loc = config.loc || Locale.create(); + this.invalid = invalid; + this.weekData = null; + this.c = c; + this.o = o; + this.isLuxonDateTime = true; + } + static now() { + return new DateTime({}); + } + static local() { + const [opts, args2] = lastOpts(arguments), [year, month, day, hour, minute, second, millisecond] = args2; + return quickDT({ year, month, day, hour, minute, second, millisecond }, opts); + } + static utc() { + const [opts, args2] = lastOpts(arguments), [year, month, day, hour, minute, second, millisecond] = args2; + opts.zone = FixedOffsetZone.utcInstance; + return quickDT({ year, month, day, hour, minute, second, millisecond }, opts); + } + static fromJSDate(date, options = {}) { + const ts = isDate(date) ? date.valueOf() : NaN; + if (Number.isNaN(ts)) { + return DateTime.invalid("invalid input"); + } + const zoneToUse = normalizeZone(options.zone, Settings.defaultZone); + if (!zoneToUse.isValid) { + return DateTime.invalid(unsupportedZone(zoneToUse)); + } + return new DateTime({ + ts, + zone: zoneToUse, + loc: Locale.fromObject(options) + }); + } + static fromMillis(milliseconds, options = {}) { + if (!isNumber(milliseconds)) { + throw new InvalidArgumentError(`fromMillis requires a numerical input, but received a ${typeof milliseconds} with value ${milliseconds}`); + } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) { + return DateTime.invalid("Timestamp out of range"); + } else { + return new DateTime({ + ts: milliseconds, + zone: normalizeZone(options.zone, Settings.defaultZone), + loc: Locale.fromObject(options) + }); + } + } + static fromSeconds(seconds, options = {}) { + if (!isNumber(seconds)) { + throw new InvalidArgumentError("fromSeconds requires a numerical input"); + } else { + return new DateTime({ + ts: seconds * 1e3, + zone: normalizeZone(options.zone, Settings.defaultZone), + loc: Locale.fromObject(options) + }); + } + } + static fromObject(obj, opts = {}) { + obj = obj || {}; + const zoneToUse = normalizeZone(opts.zone, Settings.defaultZone); + if (!zoneToUse.isValid) { + return DateTime.invalid(unsupportedZone(zoneToUse)); + } + const tsNow = Settings.now(), offsetProvis = !isUndefined(opts.specificOffset) ? opts.specificOffset : zoneToUse.offset(tsNow), normalized = normalizeObject(obj, normalizeUnit), containsOrdinal = !isUndefined(normalized.ordinal), containsGregorYear = !isUndefined(normalized.year), containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day), containsGregor = containsGregorYear || containsGregorMD, definiteWeekDef = normalized.weekYear || normalized.weekNumber, loc = Locale.fromObject(opts); + if ((containsGregor || containsOrdinal) && definiteWeekDef) { + throw new ConflictingSpecificationError("Can't mix weekYear/weekNumber units with year/month/day or ordinals"); + } + if (containsGregorMD && containsOrdinal) { + throw new ConflictingSpecificationError("Can't mix ordinal dates with month/day"); + } + const useWeekData = definiteWeekDef || normalized.weekday && !containsGregor; + let units, defaultValues, objNow = tsToObj(tsNow, offsetProvis); + if (useWeekData) { + units = orderedWeekUnits; + defaultValues = defaultWeekUnitValues; + objNow = gregorianToWeek(objNow); + } else if (containsOrdinal) { + units = orderedOrdinalUnits; + defaultValues = defaultOrdinalUnitValues; + objNow = gregorianToOrdinal(objNow); + } else { + units = orderedUnits; + defaultValues = defaultUnitValues; + } + let foundFirst = false; + for (const u of units) { + const v = normalized[u]; + if (!isUndefined(v)) { + foundFirst = true; + } else if (foundFirst) { + normalized[u] = defaultValues[u]; + } else { + normalized[u] = objNow[u]; + } + } + const higherOrderInvalid = useWeekData ? hasInvalidWeekData(normalized) : containsOrdinal ? hasInvalidOrdinalData(normalized) : hasInvalidGregorianData(normalized), invalid = higherOrderInvalid || hasInvalidTimeData(normalized); + if (invalid) { + return DateTime.invalid(invalid); + } + const gregorian = useWeekData ? weekToGregorian(normalized) : containsOrdinal ? ordinalToGregorian(normalized) : normalized, [tsFinal, offsetFinal] = objToTS(gregorian, offsetProvis, zoneToUse), inst = new DateTime({ + ts: tsFinal, + zone: zoneToUse, + o: offsetFinal, + loc + }); + if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) { + return DateTime.invalid("mismatched weekday", `you can't specify both a weekday of ${normalized.weekday} and a date of ${inst.toISO()}`); + } + return inst; + } + static fromISO(text, opts = {}) { + const [vals, parsedZone] = parseISODate(text); + return parseDataToDateTime(vals, parsedZone, opts, "ISO 8601", text); + } + static fromRFC2822(text, opts = {}) { + const [vals, parsedZone] = parseRFC2822Date(text); + return parseDataToDateTime(vals, parsedZone, opts, "RFC 2822", text); + } + static fromHTTP(text, opts = {}) { + const [vals, parsedZone] = parseHTTPDate(text); + return parseDataToDateTime(vals, parsedZone, opts, "HTTP", opts); + } + static fromFormat(text, fmt, opts = {}) { + if (isUndefined(text) || isUndefined(fmt)) { + throw new InvalidArgumentError("fromFormat requires an input string and a format"); + } + const { locale = null, numberingSystem = null } = opts, localeToUse = Locale.fromOpts({ + locale, + numberingSystem, + defaultToEN: true + }), [vals, parsedZone, specificOffset, invalid] = parseFromTokens(localeToUse, text, fmt); + if (invalid) { + return DateTime.invalid(invalid); + } else { + return parseDataToDateTime(vals, parsedZone, opts, `format ${fmt}`, text, specificOffset); + } + } + static fromString(text, fmt, opts = {}) { + return DateTime.fromFormat(text, fmt, opts); + } + static fromSQL(text, opts = {}) { + const [vals, parsedZone] = parseSQL(text); + return parseDataToDateTime(vals, parsedZone, opts, "SQL", text); + } + static invalid(reason, explanation = null) { + if (!reason) { + throw new InvalidArgumentError("need to specify a reason the DateTime is invalid"); + } + const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); + if (Settings.throwOnInvalid) { + throw new InvalidDateTimeError(invalid); + } else { + return new DateTime({ invalid }); + } + } + static isDateTime(o) { + return o && o.isLuxonDateTime || false; + } + static parseFormatForOpts(formatOpts, localeOpts = {}) { + const tokenList = formatOptsToTokens(formatOpts, Locale.fromObject(localeOpts)); + return !tokenList ? null : tokenList.map((t) => t ? t.val : null).join(""); + } + static expandFormat(fmt, localeOpts = {}) { + const expanded = expandMacroTokens(Formatter.parseFormat(fmt), Locale.fromObject(localeOpts)); + return expanded.map((t) => t.val).join(""); + } + get(unit) { + return this[unit]; + } + get isValid() { + return this.invalid === null; + } + get invalidReason() { + return this.invalid ? this.invalid.reason : null; + } + get invalidExplanation() { + return this.invalid ? this.invalid.explanation : null; + } + get locale() { + return this.isValid ? this.loc.locale : null; + } + get numberingSystem() { + return this.isValid ? this.loc.numberingSystem : null; + } + get outputCalendar() { + return this.isValid ? this.loc.outputCalendar : null; + } + get zone() { + return this._zone; + } + get zoneName() { + return this.isValid ? this.zone.name : null; + } + get year() { + return this.isValid ? this.c.year : NaN; + } + get quarter() { + return this.isValid ? Math.ceil(this.c.month / 3) : NaN; + } + get month() { + return this.isValid ? this.c.month : NaN; + } + get day() { + return this.isValid ? this.c.day : NaN; + } + get hour() { + return this.isValid ? this.c.hour : NaN; + } + get minute() { + return this.isValid ? this.c.minute : NaN; + } + get second() { + return this.isValid ? this.c.second : NaN; + } + get millisecond() { + return this.isValid ? this.c.millisecond : NaN; + } + get weekYear() { + return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN; + } + get weekNumber() { + return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN; + } + get weekday() { + return this.isValid ? possiblyCachedWeekData(this).weekday : NaN; + } + get ordinal() { + return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN; + } + get monthShort() { + return this.isValid ? Info.months("short", { locObj: this.loc })[this.month - 1] : null; + } + get monthLong() { + return this.isValid ? Info.months("long", { locObj: this.loc })[this.month - 1] : null; + } + get weekdayShort() { + return this.isValid ? Info.weekdays("short", { locObj: this.loc })[this.weekday - 1] : null; + } + get weekdayLong() { + return this.isValid ? Info.weekdays("long", { locObj: this.loc })[this.weekday - 1] : null; + } + get offset() { + return this.isValid ? +this.o : NaN; + } + get offsetNameShort() { + if (this.isValid) { + return this.zone.offsetName(this.ts, { + format: "short", + locale: this.locale + }); + } else { + return null; + } + } + get offsetNameLong() { + if (this.isValid) { + return this.zone.offsetName(this.ts, { + format: "long", + locale: this.locale + }); + } else { + return null; + } + } + get isOffsetFixed() { + return this.isValid ? this.zone.isUniversal : null; + } + get isInDST() { + if (this.isOffsetFixed) { + return false; + } else { + return this.offset > this.set({ month: 1, day: 1 }).offset || this.offset > this.set({ month: 5 }).offset; + } + } + getPossibleOffsets() { + if (!this.isValid || this.isOffsetFixed) { + return [this]; + } + const dayMs = 864e5; + const minuteMs = 6e4; + const localTS = objToLocalTS(this.c); + const oEarlier = this.zone.offset(localTS - dayMs); + const oLater = this.zone.offset(localTS + dayMs); + const o1 = this.zone.offset(localTS - oEarlier * minuteMs); + const o2 = this.zone.offset(localTS - oLater * minuteMs); + if (o1 === o2) { + return [this]; + } + const ts1 = localTS - o1 * minuteMs; + const ts2 = localTS - o2 * minuteMs; + const c1 = tsToObj(ts1, o1); + const c2 = tsToObj(ts2, o2); + if (c1.hour === c2.hour && c1.minute === c2.minute && c1.second === c2.second && c1.millisecond === c2.millisecond) { + return [clone(this, { ts: ts1 }), clone(this, { ts: ts2 })]; + } + return [this]; + } + get isInLeapYear() { + return isLeapYear(this.year); + } + get daysInMonth() { + return daysInMonth(this.year, this.month); + } + get daysInYear() { + return this.isValid ? daysInYear(this.year) : NaN; + } + get weeksInWeekYear() { + return this.isValid ? weeksInWeekYear(this.weekYear) : NaN; + } + resolvedLocaleOptions(opts = {}) { + const { locale, numberingSystem, calendar } = Formatter.create(this.loc.clone(opts), opts).resolvedOptions(this); + return { locale, numberingSystem, outputCalendar: calendar }; + } + toUTC(offset2 = 0, opts = {}) { + return this.setZone(FixedOffsetZone.instance(offset2), opts); + } + toLocal() { + return this.setZone(Settings.defaultZone); + } + setZone(zone, { keepLocalTime = false, keepCalendarTime = false } = {}) { + zone = normalizeZone(zone, Settings.defaultZone); + if (zone.equals(this.zone)) { + return this; + } else if (!zone.isValid) { + return DateTime.invalid(unsupportedZone(zone)); + } else { + let newTS = this.ts; + if (keepLocalTime || keepCalendarTime) { + const offsetGuess = zone.offset(this.ts); + const asObj = this.toObject(); + [newTS] = objToTS(asObj, offsetGuess, zone); + } + return clone(this, { ts: newTS, zone }); + } + } + reconfigure({ locale, numberingSystem, outputCalendar } = {}) { + const loc = this.loc.clone({ locale, numberingSystem, outputCalendar }); + return clone(this, { loc }); + } + setLocale(locale) { + return this.reconfigure({ locale }); + } + set(values) { + if (!this.isValid) + return this; + const normalized = normalizeObject(values, normalizeUnit), settingWeekStuff = !isUndefined(normalized.weekYear) || !isUndefined(normalized.weekNumber) || !isUndefined(normalized.weekday), containsOrdinal = !isUndefined(normalized.ordinal), containsGregorYear = !isUndefined(normalized.year), containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day), containsGregor = containsGregorYear || containsGregorMD, definiteWeekDef = normalized.weekYear || normalized.weekNumber; + if ((containsGregor || containsOrdinal) && definiteWeekDef) { + throw new ConflictingSpecificationError("Can't mix weekYear/weekNumber units with year/month/day or ordinals"); + } + if (containsGregorMD && containsOrdinal) { + throw new ConflictingSpecificationError("Can't mix ordinal dates with month/day"); + } + let mixed; + if (settingWeekStuff) { + mixed = weekToGregorian(__spreadValues(__spreadValues({}, gregorianToWeek(this.c)), normalized)); + } else if (!isUndefined(normalized.ordinal)) { + mixed = ordinalToGregorian(__spreadValues(__spreadValues({}, gregorianToOrdinal(this.c)), normalized)); + } else { + mixed = __spreadValues(__spreadValues({}, this.toObject()), normalized); + if (isUndefined(normalized.day)) { + mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day); + } + } + const [ts, o] = objToTS(mixed, this.o, this.zone); + return clone(this, { ts, o }); + } + plus(duration) { + if (!this.isValid) + return this; + const dur = Duration.fromDurationLike(duration); + return clone(this, adjustTime(this, dur)); + } + minus(duration) { + if (!this.isValid) + return this; + const dur = Duration.fromDurationLike(duration).negate(); + return clone(this, adjustTime(this, dur)); + } + startOf(unit) { + if (!this.isValid) + return this; + const o = {}, normalizedUnit = Duration.normalizeUnit(unit); + switch (normalizedUnit) { + case "years": + o.month = 1; + case "quarters": + case "months": + o.day = 1; + case "weeks": + case "days": + o.hour = 0; + case "hours": + o.minute = 0; + case "minutes": + o.second = 0; + case "seconds": + o.millisecond = 0; + break; + } + if (normalizedUnit === "weeks") { + o.weekday = 1; + } + if (normalizedUnit === "quarters") { + const q = Math.ceil(this.month / 3); + o.month = (q - 1) * 3 + 1; + } + return this.set(o); + } + endOf(unit) { + return this.isValid ? this.plus({ [unit]: 1 }).startOf(unit).minus(1) : this; + } + toFormat(fmt, opts = {}) { + return this.isValid ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt) : INVALID; + } + toLocaleString(formatOpts = DATE_SHORT, opts = {}) { + return this.isValid ? Formatter.create(this.loc.clone(opts), formatOpts).formatDateTime(this) : INVALID; + } + toLocaleParts(opts = {}) { + return this.isValid ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this) : []; + } + toISO({ + format = "extended", + suppressSeconds = false, + suppressMilliseconds = false, + includeOffset = true, + extendedZone = false + } = {}) { + if (!this.isValid) { + return null; + } + const ext = format === "extended"; + let c = toISODate(this, ext); + c += "T"; + c += toISOTime(this, ext, suppressSeconds, suppressMilliseconds, includeOffset, extendedZone); + return c; + } + toISODate({ format = "extended" } = {}) { + if (!this.isValid) { + return null; + } + return toISODate(this, format === "extended"); + } + toISOWeekDate() { + return toTechFormat(this, "kkkk-'W'WW-c"); + } + toISOTime({ + suppressMilliseconds = false, + suppressSeconds = false, + includeOffset = true, + includePrefix = false, + extendedZone = false, + format = "extended" + } = {}) { + if (!this.isValid) { + return null; + } + let c = includePrefix ? "T" : ""; + return c + toISOTime(this, format === "extended", suppressSeconds, suppressMilliseconds, includeOffset, extendedZone); + } + toRFC2822() { + return toTechFormat(this, "EEE, dd LLL yyyy HH:mm:ss ZZZ", false); + } + toHTTP() { + return toTechFormat(this.toUTC(), "EEE, dd LLL yyyy HH:mm:ss 'GMT'"); + } + toSQLDate() { + if (!this.isValid) { + return null; + } + return toISODate(this, true); + } + toSQLTime({ includeOffset = true, includeZone = false, includeOffsetSpace = true } = {}) { + let fmt = "HH:mm:ss.SSS"; + if (includeZone || includeOffset) { + if (includeOffsetSpace) { + fmt += " "; + } + if (includeZone) { + fmt += "z"; + } else if (includeOffset) { + fmt += "ZZ"; + } + } + return toTechFormat(this, fmt, true); + } + toSQL(opts = {}) { + if (!this.isValid) { + return null; + } + return `${this.toSQLDate()} ${this.toSQLTime(opts)}`; + } + toString() { + return this.isValid ? this.toISO() : INVALID; + } + valueOf() { + return this.toMillis(); + } + toMillis() { + return this.isValid ? this.ts : NaN; + } + toSeconds() { + return this.isValid ? this.ts / 1e3 : NaN; + } + toUnixInteger() { + return this.isValid ? Math.floor(this.ts / 1e3) : NaN; + } + toJSON() { + return this.toISO(); + } + toBSON() { + return this.toJSDate(); + } + toObject(opts = {}) { + if (!this.isValid) + return {}; + const base = __spreadValues({}, this.c); + if (opts.includeConfig) { + base.outputCalendar = this.outputCalendar; + base.numberingSystem = this.loc.numberingSystem; + base.locale = this.loc.locale; + } + return base; + } + toJSDate() { + return new Date(this.isValid ? this.ts : NaN); + } + diff(otherDateTime, unit = "milliseconds", opts = {}) { + if (!this.isValid || !otherDateTime.isValid) { + return Duration.invalid("created by diffing an invalid DateTime"); + } + const durOpts = __spreadValues({ locale: this.locale, numberingSystem: this.numberingSystem }, opts); + const units = maybeArray(unit).map(Duration.normalizeUnit), otherIsLater = otherDateTime.valueOf() > this.valueOf(), earlier = otherIsLater ? this : otherDateTime, later = otherIsLater ? otherDateTime : this, diffed = diff(earlier, later, units, durOpts); + return otherIsLater ? diffed.negate() : diffed; + } + diffNow(unit = "milliseconds", opts = {}) { + return this.diff(DateTime.now(), unit, opts); + } + until(otherDateTime) { + return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this; + } + hasSame(otherDateTime, unit) { + if (!this.isValid) + return false; + const inputMs = otherDateTime.valueOf(); + const adjustedToZone = this.setZone(otherDateTime.zone, { keepLocalTime: true }); + return adjustedToZone.startOf(unit) <= inputMs && inputMs <= adjustedToZone.endOf(unit); + } + equals(other) { + return this.isValid && other.isValid && this.valueOf() === other.valueOf() && this.zone.equals(other.zone) && this.loc.equals(other.loc); + } + toRelative(options = {}) { + if (!this.isValid) + return null; + const base = options.base || DateTime.fromObject({}, { zone: this.zone }), padding = options.padding ? this < base ? -options.padding : options.padding : 0; + let units = ["years", "months", "days", "hours", "minutes", "seconds"]; + let unit = options.unit; + if (Array.isArray(options.unit)) { + units = options.unit; + unit = void 0; + } + return diffRelative(base, this.plus(padding), __spreadProps(__spreadValues({}, options), { + numeric: "always", + units, + unit + })); + } + toRelativeCalendar(options = {}) { + if (!this.isValid) + return null; + return diffRelative(options.base || DateTime.fromObject({}, { zone: this.zone }), this, __spreadProps(__spreadValues({}, options), { + numeric: "auto", + units: ["years", "months", "days"], + calendary: true + })); + } + static min(...dateTimes) { + if (!dateTimes.every(DateTime.isDateTime)) { + throw new InvalidArgumentError("min requires all arguments be DateTimes"); + } + return bestBy(dateTimes, (i) => i.valueOf(), Math.min); + } + static max(...dateTimes) { + if (!dateTimes.every(DateTime.isDateTime)) { + throw new InvalidArgumentError("max requires all arguments be DateTimes"); + } + return bestBy(dateTimes, (i) => i.valueOf(), Math.max); + } + static fromFormatExplain(text, fmt, options = {}) { + const { locale = null, numberingSystem = null } = options, localeToUse = Locale.fromOpts({ + locale, + numberingSystem, + defaultToEN: true + }); + return explainFromTokens(localeToUse, text, fmt); + } + static fromStringExplain(text, fmt, options = {}) { + return DateTime.fromFormatExplain(text, fmt, options); + } + static get DATE_SHORT() { + return DATE_SHORT; + } + static get DATE_MED() { + return DATE_MED; + } + static get DATE_MED_WITH_WEEKDAY() { + return DATE_MED_WITH_WEEKDAY; + } + static get DATE_FULL() { + return DATE_FULL; + } + static get DATE_HUGE() { + return DATE_HUGE; + } + static get TIME_SIMPLE() { + return TIME_SIMPLE; + } + static get TIME_WITH_SECONDS() { + return TIME_WITH_SECONDS; + } + static get TIME_WITH_SHORT_OFFSET() { + return TIME_WITH_SHORT_OFFSET; + } + static get TIME_WITH_LONG_OFFSET() { + return TIME_WITH_LONG_OFFSET; + } + static get TIME_24_SIMPLE() { + return TIME_24_SIMPLE; + } + static get TIME_24_WITH_SECONDS() { + return TIME_24_WITH_SECONDS; + } + static get TIME_24_WITH_SHORT_OFFSET() { + return TIME_24_WITH_SHORT_OFFSET; + } + static get TIME_24_WITH_LONG_OFFSET() { + return TIME_24_WITH_LONG_OFFSET; + } + static get DATETIME_SHORT() { + return DATETIME_SHORT; + } + static get DATETIME_SHORT_WITH_SECONDS() { + return DATETIME_SHORT_WITH_SECONDS; + } + static get DATETIME_MED() { + return DATETIME_MED; + } + static get DATETIME_MED_WITH_SECONDS() { + return DATETIME_MED_WITH_SECONDS; + } + static get DATETIME_MED_WITH_WEEKDAY() { + return DATETIME_MED_WITH_WEEKDAY; + } + static get DATETIME_FULL() { + return DATETIME_FULL; + } + static get DATETIME_FULL_WITH_SECONDS() { + return DATETIME_FULL_WITH_SECONDS; + } + static get DATETIME_HUGE() { + return DATETIME_HUGE; + } + static get DATETIME_HUGE_WITH_SECONDS() { + return DATETIME_HUGE_WITH_SECONDS; + } + }; + function friendlyDateTime(dateTimeish) { + if (DateTime.isDateTime(dateTimeish)) { + return dateTimeish; + } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) { + return DateTime.fromJSDate(dateTimeish); + } else if (dateTimeish && typeof dateTimeish === "object") { + return DateTime.fromObject(dateTimeish); + } else { + throw new InvalidArgumentError(`Unknown datetime argument: ${dateTimeish}, of type ${typeof dateTimeish}`); + } + } + var DEFAULT_QUERY_SETTINGS = { + renderNullAs: "\\-", + taskCompletionTracking: false, + taskCompletionUseEmojiShorthand: false, + taskCompletionText: "completion", + taskCompletionDateFormat: "yyyy-MM-dd", + recursiveSubTaskCompletion: false, + warnOnEmptyResult: true, + refreshEnabled: true, + refreshInterval: 2500, + defaultDateFormat: "MMMM dd, yyyy", + defaultDateTimeFormat: "h:mm a - MMMM dd, yyyy", + maxRecursiveRenderDepth: 4, + tableIdColumnName: "File", + tableGroupColumnName: "Group", + showResultCount: true + }; + var DEFAULT_EXPORT_SETTINGS = { + allowHtml: true + }; + __spreadValues(__spreadValues(__spreadValues({}, DEFAULT_QUERY_SETTINGS), DEFAULT_EXPORT_SETTINGS), { + inlineQueryPrefix: "=", + inlineJsQueryPrefix: "$=", + inlineQueriesInCodeblocks: true, + enableInlineDataview: true, + enableDataviewJs: false, + enableInlineDataviewJs: false, + prettyRenderInlineFields: true, + prettyRenderInlineFieldsInLivePreview: true, + dataviewJsKeyword: "dataviewjs" + }); + var Success = class { + constructor(value) { + this.value = value; + this.successful = true; + } + map(f) { + return new Success(f(this.value)); + } + flatMap(f) { + return f(this.value); + } + mapErr(f) { + return this; + } + bimap(succ, _fail) { + return this.map(succ); + } + orElse(_value) { + return this.value; + } + cast() { + return this; + } + orElseThrow(_message) { + return this.value; + } + }; + var Failure = class { + constructor(error) { + this.error = error; + this.successful = false; + } + map(_f) { + return this; + } + flatMap(_f) { + return this; + } + mapErr(f) { + return new Failure(f(this.error)); + } + bimap(_succ, fail) { + return this.mapErr(fail); + } + orElse(value) { + return value; + } + cast() { + return this; + } + orElseThrow(message2) { + if (message2) + throw new Error(message2(this.error)); + else + throw new Error("" + this.error); + } + }; + var Result; + (function(Result2) { + function success(value) { + return new Success(value); + } + Result2.success = success; + function failure(error) { + return new Failure(error); + } + Result2.failure = failure; + function flatMap2(first, second, f) { + if (first.successful) { + if (second.successful) + return f(first.value, second.value); + else + return failure(second.error); + } else { + return failure(first.error); + } + } + Result2.flatMap2 = flatMap2; + function map2(first, second, f) { + return flatMap2(first, second, (a, b) => success(f(a, b))); + } + Result2.map2 = map2; + })(Result || (Result = {})); + var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {}; + var parsimmon_umd_min = { exports: {} }; + parsimmon_umd_min.exports; + (function(module3, exports3) { + !function(n2, t) { + module3.exports = t(); + }(typeof self != "undefined" ? self : commonjsGlobal, function() { + return function(n2) { + var t = {}; + function r(e) { + if (t[e]) + return t[e].exports; + var u = t[e] = { i: e, l: false, exports: {} }; + return n2[e].call(u.exports, u, u.exports, r), u.l = true, u.exports; + } + return r.m = n2, r.c = t, r.d = function(n3, t2, e) { + r.o(n3, t2) || Object.defineProperty(n3, t2, { configurable: false, enumerable: true, get: e }); + }, r.r = function(n3) { + Object.defineProperty(n3, "__esModule", { value: true }); + }, r.n = function(n3) { + var t2 = n3 && n3.__esModule ? function() { + return n3.default; + } : function() { + return n3; + }; + return r.d(t2, "a", t2), t2; + }, r.o = function(n3, t2) { + return Object.prototype.hasOwnProperty.call(n3, t2); + }, r.p = "", r(r.s = 0); + }([function(n2, t, r) { + function e(n3) { + if (!(this instanceof e)) + return new e(n3); + this._ = n3; + } + var u = e.prototype; + function o(n3, t2) { + for (var r2 = 0; r2 < n3; r2++) + t2(r2); + } + function i(n3, t2, r2) { + return function(n4, t3) { + o(t3.length, function(r3) { + n4(t3[r3], r3, t3); + }); + }(function(r3, e2, u2) { + t2 = n3(t2, r3, e2, u2); + }, r2), t2; + } + function a(n3, t2) { + return i(function(t3, r2, e2, u2) { + return t3.concat([n3(r2, e2, u2)]); + }, [], t2); + } + function f(n3, t2) { + var r2 = { v: 0, buf: t2 }; + return o(n3, function() { + var n4; + r2 = { v: r2.v << 1 | (n4 = r2.buf, n4[0] >> 7), buf: function(n5) { + var t3 = i(function(n6, t4, r3, e2) { + return n6.concat(r3 === e2.length - 1 ? Buffer.from([t4, 0]).readUInt16BE(0) : e2.readUInt16BE(r3)); + }, [], n5); + return Buffer.from(a(function(n6) { + return (n6 << 1 & 65535) >> 8; + }, t3)); + }(r2.buf) }; + }), r2; + } + function c() { + return typeof Buffer != "undefined"; + } + function s2() { + if (!c()) + throw new Error("Buffer global does not exist; please use webpack if you need to parse Buffers in the browser."); + } + function l2(n3) { + s2(); + var t2 = i(function(n4, t3) { + return n4 + t3; + }, 0, n3); + if (t2 % 8 != 0) + throw new Error("The bits [" + n3.join(", ") + "] add up to " + t2 + " which is not an even number of bytes; the total should be divisible by 8"); + var r2, u2 = t2 / 8, o2 = (r2 = function(n4) { + return n4 > 48; + }, i(function(n4, t3) { + return n4 || (r2(t3) ? t3 : n4); + }, null, n3)); + if (o2) + throw new Error(o2 + " bit range requested exceeds 48 bit (6 byte) Number max."); + return new e(function(t3, r3) { + var e2 = u2 + r3; + return e2 > t3.length ? x(r3, u2.toString() + " bytes") : b(e2, i(function(n4, t4) { + var r4 = f(t4, n4.buf); + return { coll: n4.coll.concat(r4.v), buf: r4.buf }; + }, { coll: [], buf: t3.slice(r3, e2) }, n3).coll); + }); + } + function h(n3, t2) { + return new e(function(r2, e2) { + return s2(), e2 + t2 > r2.length ? x(e2, t2 + " bytes for " + n3) : b(e2 + t2, r2.slice(e2, e2 + t2)); + }); + } + function p(n3, t2) { + if (typeof (r2 = t2) != "number" || Math.floor(r2) !== r2 || t2 < 0 || t2 > 6) + throw new Error(n3 + " requires integer length in range [0, 6]."); + var r2; + } + function d(n3) { + return p("uintBE", n3), h("uintBE(" + n3 + ")", n3).map(function(t2) { + return t2.readUIntBE(0, n3); + }); + } + function v(n3) { + return p("uintLE", n3), h("uintLE(" + n3 + ")", n3).map(function(t2) { + return t2.readUIntLE(0, n3); + }); + } + function g(n3) { + return p("intBE", n3), h("intBE(" + n3 + ")", n3).map(function(t2) { + return t2.readIntBE(0, n3); + }); + } + function m(n3) { + return p("intLE", n3), h("intLE(" + n3 + ")", n3).map(function(t2) { + return t2.readIntLE(0, n3); + }); + } + function y(n3) { + return n3 instanceof e; + } + function E(n3) { + return {}.toString.call(n3) === "[object Array]"; + } + function w(n3) { + return c() && Buffer.isBuffer(n3); + } + function b(n3, t2) { + return { status: true, index: n3, value: t2, furthest: -1, expected: [] }; + } + function x(n3, t2) { + return E(t2) || (t2 = [t2]), { status: false, index: -1, value: null, furthest: n3, expected: t2 }; + } + function B(n3, t2) { + if (!t2) + return n3; + if (n3.furthest > t2.furthest) + return n3; + var r2 = n3.furthest === t2.furthest ? function(n4, t3) { + if (function() { + if (e._supportsSet !== void 0) + return e._supportsSet; + var n5 = typeof Set != "undefined"; + return e._supportsSet = n5, n5; + }() && Array.from) { + for (var r3 = new Set(n4), u2 = 0; u2 < t3.length; u2++) + r3.add(t3[u2]); + var o2 = Array.from(r3); + return o2.sort(), o2; + } + for (var i2 = {}, a2 = 0; a2 < n4.length; a2++) + i2[n4[a2]] = true; + for (var f2 = 0; f2 < t3.length; f2++) + i2[t3[f2]] = true; + var c2 = []; + for (var s3 in i2) + ({}).hasOwnProperty.call(i2, s3) && c2.push(s3); + return c2.sort(), c2; + }(n3.expected, t2.expected) : t2.expected; + return { status: n3.status, index: n3.index, value: n3.value, furthest: t2.furthest, expected: r2 }; + } + var j = {}; + function S(n3, t2) { + if (w(n3)) + return { offset: t2, line: -1, column: -1 }; + n3 in j || (j[n3] = {}); + for (var r2 = j[n3], e2 = 0, u2 = 0, o2 = 0, i2 = t2; i2 >= 0; ) { + if (i2 in r2) { + e2 = r2[i2].line, o2 === 0 && (o2 = r2[i2].lineStart); + break; + } + (n3.charAt(i2) === "\n" || n3.charAt(i2) === "\r" && n3.charAt(i2 + 1) !== "\n") && (u2++, o2 === 0 && (o2 = i2 + 1)), i2--; + } + var a2 = e2 + u2, f2 = t2 - o2; + return r2[t2] = { line: a2, lineStart: o2 }, { offset: t2, line: a2 + 1, column: f2 + 1 }; + } + function _(n3) { + if (!y(n3)) + throw new Error("not a parser: " + n3); + } + function L(n3, t2) { + return typeof n3 == "string" ? n3.charAt(t2) : n3[t2]; + } + function O(n3) { + if (typeof n3 != "number") + throw new Error("not a number: " + n3); + } + function k(n3) { + if (typeof n3 != "function") + throw new Error("not a function: " + n3); + } + function P(n3) { + if (typeof n3 != "string") + throw new Error("not a string: " + n3); + } + var q = 2, A = 3, I = 8, F = 5 * I, M = 4 * I, z = " "; + function R(n3, t2) { + return new Array(t2 + 1).join(n3); + } + function U(n3, t2, r2) { + var e2 = t2 - n3.length; + return e2 <= 0 ? n3 : R(r2, e2) + n3; + } + function W(n3, t2, r2, e2) { + return { from: n3 - t2 > 0 ? n3 - t2 : 0, to: n3 + r2 > e2 ? e2 : n3 + r2 }; + } + function D(n3, t2) { + var r2, e2, u2, o2, f2, c2 = t2.index, s3 = c2.offset, l3 = 1; + if (s3 === n3.length) + return "Got the end of the input"; + if (w(n3)) { + var h2 = s3 - s3 % I, p2 = s3 - h2, d2 = W(h2, F, M + I, n3.length), v2 = a(function(n4) { + return a(function(n5) { + return U(n5.toString(16), 2, "0"); + }, n4); + }, function(n4, t3) { + var r3 = n4.length, e3 = [], u3 = 0; + if (r3 <= t3) + return [n4.slice()]; + for (var o3 = 0; o3 < r3; o3++) + e3[u3] || e3.push([]), e3[u3].push(n4[o3]), (o3 + 1) % t3 == 0 && u3++; + return e3; + }(n3.slice(d2.from, d2.to).toJSON().data, I)); + o2 = function(n4) { + return n4.from === 0 && n4.to === 1 ? { from: n4.from, to: n4.to } : { from: n4.from / I, to: Math.floor(n4.to / I) }; + }(d2), e2 = h2 / I, r2 = 3 * p2, p2 >= 4 && (r2 += 1), l3 = 2, u2 = a(function(n4) { + return n4.length <= 4 ? n4.join(" ") : n4.slice(0, 4).join(" ") + " " + n4.slice(4).join(" "); + }, v2), (f2 = (8 * (o2.to > 0 ? o2.to - 1 : o2.to)).toString(16).length) < 2 && (f2 = 2); + } else { + var g2 = n3.split(/\r\n|[\n\r\u2028\u2029]/); + r2 = c2.column - 1, e2 = c2.line - 1, o2 = W(e2, q, A, g2.length), u2 = g2.slice(o2.from, o2.to), f2 = o2.to.toString().length; + } + var m2 = e2 - o2.from; + return w(n3) && (f2 = (8 * (o2.to > 0 ? o2.to - 1 : o2.to)).toString(16).length) < 2 && (f2 = 2), i(function(t3, e3, u3) { + var i2, a2 = u3 === m2, c3 = a2 ? "> " : z; + return i2 = w(n3) ? U((8 * (o2.from + u3)).toString(16), f2, "0") : U((o2.from + u3 + 1).toString(), f2, " "), [].concat(t3, [c3 + i2 + " | " + e3], a2 ? [z + R(" ", f2) + " | " + U("", r2, " ") + R("^", l3)] : []); + }, [], u2).join("\n"); + } + function N(n3, t2) { + return ["\n", "-- PARSING FAILED " + R("-", 50), "\n\n", D(n3, t2), "\n\n", (r2 = t2.expected, r2.length === 1 ? "Expected:\n\n" + r2[0] : "Expected one of the following: \n\n" + r2.join(", ")), "\n"].join(""); + var r2; + } + function G(n3) { + return n3.flags !== void 0 ? n3.flags : [n3.global ? "g" : "", n3.ignoreCase ? "i" : "", n3.multiline ? "m" : "", n3.unicode ? "u" : "", n3.sticky ? "y" : ""].join(""); + } + function C() { + for (var n3 = [].slice.call(arguments), t2 = n3.length, r2 = 0; r2 < t2; r2 += 1) + _(n3[r2]); + return e(function(r3, e2) { + for (var u2, o2 = new Array(t2), i2 = 0; i2 < t2; i2 += 1) { + if (!(u2 = B(n3[i2]._(r3, e2), u2)).status) + return u2; + o2[i2] = u2.value, e2 = u2.index; + } + return B(b(e2, o2), u2); + }); + } + function J() { + var n3 = [].slice.call(arguments); + if (n3.length === 0) + throw new Error("seqMap needs at least one argument"); + var t2 = n3.pop(); + return k(t2), C.apply(null, n3).map(function(n4) { + return t2.apply(null, n4); + }); + } + function T() { + var n3 = [].slice.call(arguments), t2 = n3.length; + if (t2 === 0) + return Y("zero alternates"); + for (var r2 = 0; r2 < t2; r2 += 1) + _(n3[r2]); + return e(function(t3, r3) { + for (var e2, u2 = 0; u2 < n3.length; u2 += 1) + if ((e2 = B(n3[u2]._(t3, r3), e2)).status) + return e2; + return e2; + }); + } + function V(n3, t2) { + return H(n3, t2).or(X([])); + } + function H(n3, t2) { + return _(n3), _(t2), J(n3, t2.then(n3).many(), function(n4, t3) { + return [n4].concat(t3); + }); + } + function K(n3) { + P(n3); + var t2 = "'" + n3 + "'"; + return e(function(r2, e2) { + var u2 = e2 + n3.length, o2 = r2.slice(e2, u2); + return o2 === n3 ? b(u2, o2) : x(e2, t2); + }); + } + function Q(n3, t2) { + !function(n4) { + if (!(n4 instanceof RegExp)) + throw new Error("not a regexp: " + n4); + for (var t3 = G(n4), r3 = 0; r3 < t3.length; r3++) { + var e2 = t3.charAt(r3); + if (e2 !== "i" && e2 !== "m" && e2 !== "u" && e2 !== "s") + throw new Error('unsupported regexp flag "' + e2 + '": ' + n4); + } + }(n3), arguments.length >= 2 ? O(t2) : t2 = 0; + var r2 = function(n4) { + return RegExp("^(?:" + n4.source + ")", G(n4)); + }(n3), u2 = "" + n3; + return e(function(n4, e2) { + var o2 = r2.exec(n4.slice(e2)); + if (o2) { + if (0 <= t2 && t2 <= o2.length) { + var i2 = o2[0], a2 = o2[t2]; + return b(e2 + i2.length, a2); + } + return x(e2, "valid match group (0 to " + o2.length + ") in " + u2); + } + return x(e2, u2); + }); + } + function X(n3) { + return e(function(t2, r2) { + return b(r2, n3); + }); + } + function Y(n3) { + return e(function(t2, r2) { + return x(r2, n3); + }); + } + function Z(n3) { + if (y(n3)) + return e(function(t2, r2) { + var e2 = n3._(t2, r2); + return e2.index = r2, e2.value = "", e2; + }); + if (typeof n3 == "string") + return Z(K(n3)); + if (n3 instanceof RegExp) + return Z(Q(n3)); + throw new Error("not a string, regexp, or parser: " + n3); + } + function $(n3) { + return _(n3), e(function(t2, r2) { + var e2 = n3._(t2, r2), u2 = t2.slice(r2, e2.index); + return e2.status ? x(r2, 'not "' + u2 + '"') : b(r2, null); + }); + } + function nn(n3) { + return k(n3), e(function(t2, r2) { + var e2 = L(t2, r2); + return r2 < t2.length && n3(e2) ? b(r2 + 1, e2) : x(r2, "a character/byte matching " + n3); + }); + } + function tn(n3, t2) { + arguments.length < 2 && (t2 = n3, n3 = void 0); + var r2 = e(function(n4, e2) { + return r2._ = t2()._, r2._(n4, e2); + }); + return n3 ? r2.desc(n3) : r2; + } + function rn() { + return Y("fantasy-land/empty"); + } + u.parse = function(n3) { + if (typeof n3 != "string" && !w(n3)) + throw new Error(".parse must be called with a string or Buffer as its argument"); + var t2, r2 = this.skip(an)._(n3, 0); + return t2 = r2.status ? { status: true, value: r2.value } : { status: false, index: S(n3, r2.furthest), expected: r2.expected }, delete j[n3], t2; + }, u.tryParse = function(n3) { + var t2 = this.parse(n3); + if (t2.status) + return t2.value; + var r2 = N(n3, t2), e2 = new Error(r2); + throw e2.type = "ParsimmonError", e2.result = t2, e2; + }, u.assert = function(n3, t2) { + return this.chain(function(r2) { + return n3(r2) ? X(r2) : Y(t2); + }); + }, u.or = function(n3) { + return T(this, n3); + }, u.trim = function(n3) { + return this.wrap(n3, n3); + }, u.wrap = function(n3, t2) { + return J(n3, this, t2, function(n4, t3) { + return t3; + }); + }, u.thru = function(n3) { + return n3(this); + }, u.then = function(n3) { + return _(n3), C(this, n3).map(function(n4) { + return n4[1]; + }); + }, u.many = function() { + var n3 = this; + return e(function(t2, r2) { + for (var e2 = [], u2 = void 0; ; ) { + if (!(u2 = B(n3._(t2, r2), u2)).status) + return B(b(r2, e2), u2); + if (r2 === u2.index) + throw new Error("infinite loop detected in .many() parser --- calling .many() on a parser which can accept zero characters is usually the cause"); + r2 = u2.index, e2.push(u2.value); + } + }); + }, u.tieWith = function(n3) { + return P(n3), this.map(function(t2) { + if (function(n4) { + if (!E(n4)) + throw new Error("not an array: " + n4); + }(t2), t2.length) { + P(t2[0]); + for (var r2 = t2[0], e2 = 1; e2 < t2.length; e2++) + P(t2[e2]), r2 += n3 + t2[e2]; + return r2; + } + return ""; + }); + }, u.tie = function() { + return this.tieWith(""); + }, u.times = function(n3, t2) { + var r2 = this; + return arguments.length < 2 && (t2 = n3), O(n3), O(t2), e(function(e2, u2) { + for (var o2 = [], i2 = void 0, a2 = void 0, f2 = 0; f2 < n3; f2 += 1) { + if (a2 = B(i2 = r2._(e2, u2), a2), !i2.status) + return a2; + u2 = i2.index, o2.push(i2.value); + } + for (; f2 < t2 && (a2 = B(i2 = r2._(e2, u2), a2), i2.status); f2 += 1) + u2 = i2.index, o2.push(i2.value); + return B(b(u2, o2), a2); + }); + }, u.result = function(n3) { + return this.map(function() { + return n3; + }); + }, u.atMost = function(n3) { + return this.times(0, n3); + }, u.atLeast = function(n3) { + return J(this.times(n3), this.many(), function(n4, t2) { + return n4.concat(t2); + }); + }, u.map = function(n3) { + k(n3); + var t2 = this; + return e(function(r2, e2) { + var u2 = t2._(r2, e2); + return u2.status ? B(b(u2.index, n3(u2.value)), u2) : u2; + }); + }, u.contramap = function(n3) { + k(n3); + var t2 = this; + return e(function(r2, e2) { + var u2 = t2.parse(n3(r2.slice(e2))); + return u2.status ? b(e2 + r2.length, u2.value) : u2; + }); + }, u.promap = function(n3, t2) { + return k(n3), k(t2), this.contramap(n3).map(t2); + }, u.skip = function(n3) { + return C(this, n3).map(function(n4) { + return n4[0]; + }); + }, u.mark = function() { + return J(en, this, en, function(n3, t2, r2) { + return { start: n3, value: t2, end: r2 }; + }); + }, u.node = function(n3) { + return J(en, this, en, function(t2, r2, e2) { + return { name: n3, value: r2, start: t2, end: e2 }; + }); + }, u.sepBy = function(n3) { + return V(this, n3); + }, u.sepBy1 = function(n3) { + return H(this, n3); + }, u.lookahead = function(n3) { + return this.skip(Z(n3)); + }, u.notFollowedBy = function(n3) { + return this.skip($(n3)); + }, u.desc = function(n3) { + E(n3) || (n3 = [n3]); + var t2 = this; + return e(function(r2, e2) { + var u2 = t2._(r2, e2); + return u2.status || (u2.expected = n3), u2; + }); + }, u.fallback = function(n3) { + return this.or(X(n3)); + }, u.ap = function(n3) { + return J(n3, this, function(n4, t2) { + return n4(t2); + }); + }, u.chain = function(n3) { + var t2 = this; + return e(function(r2, e2) { + var u2 = t2._(r2, e2); + return u2.status ? B(n3(u2.value)._(r2, u2.index), u2) : u2; + }); + }, u.concat = u.or, u.empty = rn, u.of = X, u["fantasy-land/ap"] = u.ap, u["fantasy-land/chain"] = u.chain, u["fantasy-land/concat"] = u.concat, u["fantasy-land/empty"] = u.empty, u["fantasy-land/of"] = u.of, u["fantasy-land/map"] = u.map; + var en = e(function(n3, t2) { + return b(t2, S(n3, t2)); + }), un = e(function(n3, t2) { + return t2 >= n3.length ? x(t2, "any character/byte") : b(t2 + 1, L(n3, t2)); + }), on = e(function(n3, t2) { + return b(n3.length, n3.slice(t2)); + }), an = e(function(n3, t2) { + return t2 < n3.length ? x(t2, "EOF") : b(t2, null); + }), fn2 = Q(/[0-9]/).desc("a digit"), cn = Q(/[0-9]*/).desc("optional digits"), sn = Q(/[a-z]/i).desc("a letter"), ln = Q(/[a-z]*/i).desc("optional letters"), hn = Q(/\s*/).desc("optional whitespace"), pn = Q(/\s+/).desc("whitespace"), dn = K("\r"), vn = K("\n"), gn = K("\r\n"), mn = T(gn, vn, dn).desc("newline"), yn = T(mn, an); + e.all = on, e.alt = T, e.any = un, e.cr = dn, e.createLanguage = function(n3) { + var t2 = {}; + for (var r2 in n3) + ({}).hasOwnProperty.call(n3, r2) && function(r3) { + t2[r3] = tn(function() { + return n3[r3](t2); + }); + }(r2); + return t2; + }, e.crlf = gn, e.custom = function(n3) { + return e(n3(b, x)); + }, e.digit = fn2, e.digits = cn, e.empty = rn, e.end = yn, e.eof = an, e.fail = Y, e.formatError = N, e.index = en, e.isParser = y, e.lazy = tn, e.letter = sn, e.letters = ln, e.lf = vn, e.lookahead = Z, e.makeFailure = x, e.makeSuccess = b, e.newline = mn, e.noneOf = function(n3) { + return nn(function(t2) { + return n3.indexOf(t2) < 0; + }).desc("none of '" + n3 + "'"); + }, e.notFollowedBy = $, e.of = X, e.oneOf = function(n3) { + for (var t2 = n3.split(""), r2 = 0; r2 < t2.length; r2++) + t2[r2] = "'" + t2[r2] + "'"; + return nn(function(t3) { + return n3.indexOf(t3) >= 0; + }).desc(t2); + }, e.optWhitespace = hn, e.Parser = e, e.range = function(n3, t2) { + return nn(function(r2) { + return n3 <= r2 && r2 <= t2; + }).desc(n3 + "-" + t2); + }, e.regex = Q, e.regexp = Q, e.sepBy = V, e.sepBy1 = H, e.seq = C, e.seqMap = J, e.seqObj = function() { + for (var n3, t2 = {}, r2 = 0, u2 = (n3 = arguments, Array.prototype.slice.call(n3)), o2 = u2.length, i2 = 0; i2 < o2; i2 += 1) { + var a2 = u2[i2]; + if (!y(a2)) { + if (E(a2) && a2.length === 2 && typeof a2[0] == "string" && y(a2[1])) { + var f2 = a2[0]; + if (Object.prototype.hasOwnProperty.call(t2, f2)) + throw new Error("seqObj: duplicate key " + f2); + t2[f2] = true, r2++; + continue; + } + throw new Error("seqObj arguments must be parsers or [string, parser] array pairs."); + } + } + if (r2 === 0) + throw new Error("seqObj expects at least one named parser, found zero"); + return e(function(n4, t3) { + for (var r3, e2 = {}, i3 = 0; i3 < o2; i3 += 1) { + var a3, f3; + if (E(u2[i3]) ? (a3 = u2[i3][0], f3 = u2[i3][1]) : (a3 = null, f3 = u2[i3]), !(r3 = B(f3._(n4, t3), r3)).status) + return r3; + a3 && (e2[a3] = r3.value), t3 = r3.index; + } + return B(b(t3, e2), r3); + }); + }, e.string = K, e.succeed = X, e.takeWhile = function(n3) { + return k(n3), e(function(t2, r2) { + for (var e2 = r2; e2 < t2.length && n3(L(t2, e2)); ) + e2++; + return b(e2, t2.slice(r2, e2)); + }); + }, e.test = nn, e.whitespace = pn, e["fantasy-land/empty"] = rn, e["fantasy-land/of"] = X, e.Binary = { bitSeq: l2, bitSeqObj: function(n3) { + s2(); + var t2 = {}, r2 = 0, e2 = a(function(n4) { + if (E(n4)) { + var e3 = n4; + if (e3.length !== 2) + throw new Error("[" + e3.join(", ") + "] should be length 2, got length " + e3.length); + if (P(e3[0]), O(e3[1]), Object.prototype.hasOwnProperty.call(t2, e3[0])) + throw new Error("duplicate key in bitSeqObj: " + e3[0]); + return t2[e3[0]] = true, r2++, e3; + } + return O(n4), [null, n4]; + }, n3); + if (r2 < 1) + throw new Error("bitSeqObj expects at least one named pair, got [" + n3.join(", ") + "]"); + var u2 = a(function(n4) { + return n4[0]; + }, e2); + return l2(a(function(n4) { + return n4[1]; + }, e2)).map(function(n4) { + return i(function(n5, t3) { + return t3[0] !== null && (n5[t3[0]] = t3[1]), n5; + }, {}, a(function(t3, r3) { + return [t3, n4[r3]]; + }, u2)); + }); + }, byte: function(n3) { + if (s2(), O(n3), n3 > 255) + throw new Error("Value specified to byte constructor (" + n3 + "=0x" + n3.toString(16) + ") is larger in value than a single byte."); + var t2 = (n3 > 15 ? "0x" : "0x0") + n3.toString(16); + return e(function(r2, e2) { + var u2 = L(r2, e2); + return u2 === n3 ? b(e2 + 1, u2) : x(e2, t2); + }); + }, buffer: function(n3) { + return h("buffer", n3).map(function(n4) { + return Buffer.from(n4); + }); + }, encodedString: function(n3, t2) { + return h("string", t2).map(function(t3) { + return t3.toString(n3); + }); + }, uintBE: d, uint8BE: d(1), uint16BE: d(2), uint32BE: d(4), uintLE: v, uint8LE: v(1), uint16LE: v(2), uint32LE: v(4), intBE: g, int8BE: g(1), int16BE: g(2), int32BE: g(4), intLE: m, int8LE: m(1), int16LE: m(2), int32LE: m(4), floatBE: h("floatBE", 4).map(function(n3) { + return n3.readFloatBE(0); + }), floatLE: h("floatLE", 4).map(function(n3) { + return n3.readFloatLE(0); + }), doubleBE: h("doubleBE", 8).map(function(n3) { + return n3.readDoubleBE(0); + }), doubleLE: h("doubleLE", 8).map(function(n3) { + return n3.readDoubleLE(0); + }) }, n2.exports = e; + }]); + }); + })(parsimmon_umd_min, parsimmon_umd_min.exports); + var parsimmon_umd_minExports = parsimmon_umd_min.exports; + var emojiRegex = () => { + return /[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26F9(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC3\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC08\uDC26](?:\u200D\u2B1B)?|[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC2\uDECE-\uDEDB\uDEE0-\uDEE8]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g; + }; + function normalizeDuration(dur) { + if (dur === void 0 || dur === null) + return dur; + return dur.shiftToAll().normalize(); + } + function getFileTitle(path2) { + if (path2.includes("/")) + path2 = path2.substring(path2.lastIndexOf("/") + 1); + if (path2.endsWith(".md")) + path2 = path2.substring(0, path2.length - 3); + return path2; + } + parsimmon_umd_minExports.alt(parsimmon_umd_minExports.regex(new RegExp(emojiRegex(), "")), parsimmon_umd_minExports.regex(/[0-9\p{Letter}_-]+/u).map((str) => str.toLocaleLowerCase()), parsimmon_umd_minExports.whitespace.map((_) => "-"), parsimmon_umd_minExports.any.map((_) => "")).many().map((result) => result.join("")); + var HEADER_CANONICALIZER = parsimmon_umd_minExports.alt(parsimmon_umd_minExports.regex(new RegExp(emojiRegex(), "")), parsimmon_umd_minExports.regex(/[0-9\p{Letter}_-]+/u), parsimmon_umd_minExports.whitespace.map((_) => " "), parsimmon_umd_minExports.any.map((_) => " ")).many().map((result) => { + return result.join("").split(/\s+/).join(" ").trim(); + }); + function normalizeHeaderForLink(header) { + return HEADER_CANONICALIZER.tryParse(header); + } + function renderMinimalDuration(dur) { + dur = normalizeDuration(dur); + dur = Duration.fromObject(Object.fromEntries(Object.entries(dur.toObject()).filter(([, quantity]) => quantity != 0))); + return dur.toHuman(); + } + var Values; + (function(Values2) { + function toString(field, setting = DEFAULT_QUERY_SETTINGS, recursive = false) { + let wrapped = wrapValue(field); + if (!wrapped) + return setting.renderNullAs; + switch (wrapped.type) { + case "null": + return setting.renderNullAs; + case "string": + return wrapped.value; + case "number": + case "boolean": + return "" + wrapped.value; + case "html": + return wrapped.value.outerHTML; + case "widget": + return wrapped.value.markdown(); + case "link": + return wrapped.value.markdown(); + case "function": + return ""; + case "array": + let result = ""; + if (recursive) + result += "["; + result += wrapped.value.map((f) => toString(f, setting, true)).join(", "); + if (recursive) + result += "]"; + return result; + case "object": + return "{ " + Object.entries(wrapped.value).map((e) => e[0] + ": " + toString(e[1], setting, true)).join(", ") + " }"; + case "date": + if (wrapped.value.second == 0 && wrapped.value.hour == 0 && wrapped.value.minute == 0) { + return wrapped.value.toFormat(setting.defaultDateFormat); + } + return wrapped.value.toFormat(setting.defaultDateTimeFormat); + case "duration": + return renderMinimalDuration(wrapped.value); + } + } + Values2.toString = toString; + function wrapValue(val) { + if (isNull(val)) + return { type: "null", value: val }; + else if (isNumber2(val)) + return { type: "number", value: val }; + else if (isString2(val)) + return { type: "string", value: val }; + else if (isBoolean(val)) + return { type: "boolean", value: val }; + else if (isDuration(val)) + return { type: "duration", value: val }; + else if (isDate2(val)) + return { type: "date", value: val }; + else if (isWidget(val)) + return { type: "widget", value: val }; + else if (isArray(val)) + return { type: "array", value: val }; + else if (isLink(val)) + return { type: "link", value: val }; + else if (isFunction(val)) + return { type: "function", value: val }; + else if (isHtml(val)) + return { type: "html", value: val }; + else if (isObject(val)) + return { type: "object", value: val }; + else + return void 0; + } + Values2.wrapValue = wrapValue; + function mapLeaves(val, func) { + if (isObject(val)) { + let result = {}; + for (let [key, value] of Object.entries(val)) + result[key] = mapLeaves(value, func); + return result; + } else if (isArray(val)) { + let result = []; + for (let value of val) + result.push(mapLeaves(value, func)); + return result; + } else { + return func(val); + } + } + Values2.mapLeaves = mapLeaves; + function compareValue(val1, val2, linkNormalizer) { + var _a, _b; + if (val1 === void 0) + val1 = null; + if (val2 === void 0) + val2 = null; + if (val1 === null && val2 === null) + return 0; + else if (val1 === null) + return -1; + else if (val2 === null) + return 1; + let wrap1 = wrapValue(val1); + let wrap2 = wrapValue(val2); + if (wrap1 === void 0 && wrap2 === void 0) + return 0; + else if (wrap1 === void 0) + return -1; + else if (wrap2 === void 0) + return 1; + if (wrap1.type != wrap2.type) + return wrap1.type.localeCompare(wrap2.type); + if (wrap1.value === wrap2.value) + return 0; + switch (wrap1.type) { + case "string": + return wrap1.value.localeCompare(wrap2.value); + case "number": + if (wrap1.value < wrap2.value) + return -1; + else if (wrap1.value == wrap2.value) + return 0; + return 1; + case "null": + return 0; + case "boolean": + if (wrap1.value == wrap2.value) + return 0; + else + return wrap1.value ? 1 : -1; + case "link": + let link1 = wrap1.value; + let link2 = wrap2.value; + let normalize = linkNormalizer !== null && linkNormalizer !== void 0 ? linkNormalizer : (x) => x; + let pathCompare = normalize(link1.path).localeCompare(normalize(link2.path)); + if (pathCompare != 0) + return pathCompare; + let typeCompare = link1.type.localeCompare(link2.type); + if (typeCompare != 0) + return typeCompare; + if (link1.subpath && !link2.subpath) + return 1; + if (!link1.subpath && link2.subpath) + return -1; + if (!link1.subpath && !link2.subpath) + return 0; + return ((_a = link1.subpath) !== null && _a !== void 0 ? _a : "").localeCompare((_b = link2.subpath) !== null && _b !== void 0 ? _b : ""); + case "date": + return wrap1.value < wrap2.value ? -1 : wrap1.value.equals(wrap2.value) ? 0 : 1; + case "duration": + return wrap1.value < wrap2.value ? -1 : wrap1.value.equals(wrap2.value) ? 0 : 1; + case "array": + let f1 = wrap1.value; + let f2 = wrap2.value; + for (let index = 0; index < Math.min(f1.length, f2.length); index++) { + let comp = compareValue(f1[index], f2[index]); + if (comp != 0) + return comp; + } + return f1.length - f2.length; + case "object": + let o1 = wrap1.value; + let o2 = wrap2.value; + let k1 = Array.from(Object.keys(o1)); + let k2 = Array.from(Object.keys(o2)); + k1.sort(); + k2.sort(); + let keyCompare = compareValue(k1, k2); + if (keyCompare != 0) + return keyCompare; + for (let key of k1) { + let comp = compareValue(o1[key], o2[key]); + if (comp != 0) + return comp; + } + return 0; + case "widget": + case "html": + case "function": + return 0; + } + } + Values2.compareValue = compareValue; + function typeOf(val) { + var _a; + return (_a = wrapValue(val)) === null || _a === void 0 ? void 0 : _a.type; + } + Values2.typeOf = typeOf; + function isTruthy(field) { + let wrapped = wrapValue(field); + if (!wrapped) + return false; + switch (wrapped.type) { + case "number": + return wrapped.value != 0; + case "string": + return wrapped.value.length > 0; + case "boolean": + return wrapped.value; + case "link": + return !!wrapped.value.path; + case "date": + return wrapped.value.toMillis() != 0; + case "duration": + return wrapped.value.as("seconds") != 0; + case "object": + return Object.keys(wrapped.value).length > 0; + case "array": + return wrapped.value.length > 0; + case "null": + return false; + case "html": + case "widget": + case "function": + return true; + } + } + Values2.isTruthy = isTruthy; + function deepCopy(field) { + if (field === null || field === void 0) + return field; + if (Values2.isArray(field)) { + return [].concat(field.map((v) => deepCopy(v))); + } else if (Values2.isObject(field)) { + let result = {}; + for (let [key, value] of Object.entries(field)) + result[key] = deepCopy(value); + return result; + } else { + return field; + } + } + Values2.deepCopy = deepCopy; + function isString2(val) { + return typeof val == "string"; + } + Values2.isString = isString2; + function isNumber2(val) { + return typeof val == "number"; + } + Values2.isNumber = isNumber2; + function isDate2(val) { + return val instanceof DateTime; + } + Values2.isDate = isDate2; + function isDuration(val) { + return val instanceof Duration; + } + Values2.isDuration = isDuration; + function isNull(val) { + return val === null || val === void 0; + } + Values2.isNull = isNull; + function isArray(val) { + return Array.isArray(val); + } + Values2.isArray = isArray; + function isBoolean(val) { + return typeof val === "boolean"; + } + Values2.isBoolean = isBoolean; + function isLink(val) { + return val instanceof Link; + } + Values2.isLink = isLink; + function isWidget(val) { + return val instanceof Widget; + } + Values2.isWidget = isWidget; + function isHtml(val) { + if (typeof HTMLElement !== "undefined") { + return val instanceof HTMLElement; + } else { + return false; + } + } + Values2.isHtml = isHtml; + function isObject(val) { + return typeof val == "object" && !isHtml(val) && !isWidget(val) && !isArray(val) && !isDuration(val) && !isDate2(val) && !isLink(val) && val !== void 0 && !isNull(val); + } + Values2.isObject = isObject; + function isFunction(val) { + return typeof val == "function"; + } + Values2.isFunction = isFunction; + })(Values || (Values = {})); + var Groupings; + (function(Groupings2) { + function isElementGroup(entry) { + return Values.isObject(entry) && Object.keys(entry).length == 2 && "key" in entry && "rows" in entry; + } + Groupings2.isElementGroup = isElementGroup; + function isGrouping(entry) { + for (let element of entry) + if (!isElementGroup(element)) + return false; + return true; + } + Groupings2.isGrouping = isGrouping; + function count(elements) { + if (isGrouping(elements)) { + let result = 0; + for (let subgroup of elements) + result += count(subgroup.rows); + return result; + } else { + return elements.length; + } + } + Groupings2.count = count; + })(Groupings || (Groupings = {})); + var Link = class { + static file(path2, embed = false, display) { + return new Link({ + path: path2, + embed, + display, + subpath: void 0, + type: "file" + }); + } + static infer(linkpath, embed = false, display) { + if (linkpath.includes("#^")) { + let split = linkpath.split("#^"); + return Link.block(split[0], split[1], embed, display); + } else if (linkpath.includes("#")) { + let split = linkpath.split("#"); + return Link.header(split[0], split[1], embed, display); + } else + return Link.file(linkpath, embed, display); + } + static header(path2, header, embed, display) { + return new Link({ + path: path2, + embed, + display, + subpath: normalizeHeaderForLink(header), + type: "header" + }); + } + static block(path2, blockId, embed, display) { + return new Link({ + path: path2, + embed, + display, + subpath: blockId, + type: "block" + }); + } + static fromObject(object) { + return new Link(object); + } + constructor(fields) { + Object.assign(this, fields); + } + equals(other) { + if (other == void 0 || other == null) + return false; + return this.path == other.path && this.type == other.type && this.subpath == other.subpath; + } + toString() { + return this.markdown(); + } + toObject() { + return { path: this.path, type: this.type, subpath: this.subpath, display: this.display, embed: this.embed }; + } + withPath(path2) { + return new Link(Object.assign({}, this, { path: path2 })); + } + withDisplay(display) { + return new Link(Object.assign({}, this, { display })); + } + withHeader(header) { + return Link.header(this.path, header, this.embed, this.display); + } + toFile() { + return Link.file(this.path, this.embed, this.display); + } + toEmbed() { + if (this.embed) { + return this; + } else { + let link = new Link(this); + link.embed = true; + return link; + } + } + fromEmbed() { + if (!this.embed) { + return this; + } else { + let link = new Link(this); + link.embed = false; + return link; + } + } + markdown() { + let result = (this.embed ? "!" : "") + "[[" + this.obsidianLink(); + if (this.display) { + result += "|" + this.display; + } else { + result += "|" + getFileTitle(this.path); + if (this.type == "header" || this.type == "block") + result += " > " + this.subpath; + } + result += "]]"; + return result; + } + obsidianLink() { + var _a, _b; + const escaped = this.path.replace("|", "\\|"); + if (this.type == "header") + return escaped + "#" + ((_a = this.subpath) === null || _a === void 0 ? void 0 : _a.replace("|", "\\|")); + if (this.type == "block") + return escaped + "#^" + ((_b = this.subpath) === null || _b === void 0 ? void 0 : _b.replace("|", "\\|")); + else + return escaped; + } + fileName() { + return getFileTitle(this.path).replace(".md", ""); + } + }; + var Widget = class { + constructor($widget) { + this.$widget = $widget; + } + }; + var ListPairWidget = class extends Widget { + constructor(key, value) { + super("dataview:list-pair"); + this.key = key; + this.value = value; + } + markdown() { + return `${Values.toString(this.key)}: ${Values.toString(this.value)}`; + } + }; + var ExternalLinkWidget = class extends Widget { + constructor(url, display) { + super("dataview:external-link"); + this.url = url; + this.display = display; + } + markdown() { + var _a; + return `[${(_a = this.display) !== null && _a !== void 0 ? _a : this.url}](${this.url})`; + } + }; + var Widgets; + (function(Widgets2) { + function listPair(key, value) { + return new ListPairWidget(key, value); + } + Widgets2.listPair = listPair; + function externalLink(url, display) { + return new ExternalLinkWidget(url, display); + } + Widgets2.externalLink = externalLink; + function isListPair(widget) { + return widget.$widget === "dataview:list-pair"; + } + Widgets2.isListPair = isListPair; + function isExternalLink(widget) { + return widget.$widget === "dataview:external-link"; + } + Widgets2.isExternalLink = isExternalLink; + function isBuiltin(widget) { + return isListPair(widget) || isExternalLink(widget); + } + Widgets2.isBuiltin = isBuiltin; + })(Widgets || (Widgets = {})); + var Fields; + (function(Fields2) { + function variable(name) { + return { type: "variable", name }; + } + Fields2.variable = variable; + function literal(value) { + return { type: "literal", value }; + } + Fields2.literal = literal; + function binaryOp(left, op, right) { + return { type: "binaryop", left, op, right }; + } + Fields2.binaryOp = binaryOp; + function index(obj, index2) { + return { type: "index", object: obj, index: index2 }; + } + Fields2.index = index; + function indexVariable(name) { + let parts = name.split("."); + let result = Fields2.variable(parts[0]); + for (let index2 = 1; index2 < parts.length; index2++) { + result = Fields2.index(result, Fields2.literal(parts[index2])); + } + return result; + } + Fields2.indexVariable = indexVariable; + function lambda(args2, value) { + return { type: "lambda", arguments: args2, value }; + } + Fields2.lambda = lambda; + function func(func2, args2) { + return { type: "function", func: func2, arguments: args2 }; + } + Fields2.func = func; + function list(values) { + return { type: "list", values }; + } + Fields2.list = list; + function object(values) { + return { type: "object", values }; + } + Fields2.object = object; + function negate(child) { + return { type: "negated", child }; + } + Fields2.negate = negate; + function isCompareOp(op) { + return op == "<=" || op == "<" || op == ">" || op == ">=" || op == "!=" || op == "="; + } + Fields2.isCompareOp = isCompareOp; + Fields2.NULL = Fields2.literal(null); + })(Fields || (Fields = {})); + var Sources; + (function(Sources2) { + function tag(tag2) { + return { type: "tag", tag: tag2 }; + } + Sources2.tag = tag; + function csv(path2) { + return { type: "csv", path: path2 }; + } + Sources2.csv = csv; + function folder(prefix) { + return { type: "folder", folder: prefix }; + } + Sources2.folder = folder; + function link(file, incoming) { + return { type: "link", file, direction: incoming ? "incoming" : "outgoing" }; + } + Sources2.link = link; + function binaryOp(left, op, right) { + return { type: "binaryop", left, op, right }; + } + Sources2.binaryOp = binaryOp; + function and(left, right) { + return { type: "binaryop", left, op: "&", right }; + } + Sources2.and = and; + function or(left, right) { + return { type: "binaryop", left, op: "|", right }; + } + Sources2.or = or; + function negate(child) { + return { type: "negate", child }; + } + Sources2.negate = negate; + function empty() { + return { type: "empty" }; + } + Sources2.empty = empty; + })(Sources || (Sources = {})); + var EMOJI_REGEX = new RegExp(emojiRegex(), ""); + var DURATION_TYPES = { + year: Duration.fromObject({ years: 1 }), + years: Duration.fromObject({ years: 1 }), + yr: Duration.fromObject({ years: 1 }), + yrs: Duration.fromObject({ years: 1 }), + month: Duration.fromObject({ months: 1 }), + months: Duration.fromObject({ months: 1 }), + mo: Duration.fromObject({ months: 1 }), + mos: Duration.fromObject({ months: 1 }), + week: Duration.fromObject({ weeks: 1 }), + weeks: Duration.fromObject({ weeks: 1 }), + wk: Duration.fromObject({ weeks: 1 }), + wks: Duration.fromObject({ weeks: 1 }), + w: Duration.fromObject({ weeks: 1 }), + day: Duration.fromObject({ days: 1 }), + days: Duration.fromObject({ days: 1 }), + d: Duration.fromObject({ days: 1 }), + hour: Duration.fromObject({ hours: 1 }), + hours: Duration.fromObject({ hours: 1 }), + hr: Duration.fromObject({ hours: 1 }), + hrs: Duration.fromObject({ hours: 1 }), + h: Duration.fromObject({ hours: 1 }), + minute: Duration.fromObject({ minutes: 1 }), + minutes: Duration.fromObject({ minutes: 1 }), + min: Duration.fromObject({ minutes: 1 }), + mins: Duration.fromObject({ minutes: 1 }), + m: Duration.fromObject({ minutes: 1 }), + second: Duration.fromObject({ seconds: 1 }), + seconds: Duration.fromObject({ seconds: 1 }), + sec: Duration.fromObject({ seconds: 1 }), + secs: Duration.fromObject({ seconds: 1 }), + s: Duration.fromObject({ seconds: 1 }) + }; + var DATE_SHORTHANDS = { + now: () => DateTime.local(), + today: () => DateTime.local().startOf("day"), + yesterday: () => DateTime.local().startOf("day").minus(Duration.fromObject({ days: 1 })), + tomorrow: () => DateTime.local().startOf("day").plus(Duration.fromObject({ days: 1 })), + sow: () => DateTime.local().startOf("week"), + "start-of-week": () => DateTime.local().startOf("week"), + eow: () => DateTime.local().endOf("week"), + "end-of-week": () => DateTime.local().endOf("week"), + soy: () => DateTime.local().startOf("year"), + "start-of-year": () => DateTime.local().startOf("year"), + eoy: () => DateTime.local().endOf("year"), + "end-of-year": () => DateTime.local().endOf("year"), + som: () => DateTime.local().startOf("month"), + "start-of-month": () => DateTime.local().startOf("month"), + eom: () => DateTime.local().endOf("month"), + "end-of-month": () => DateTime.local().endOf("month") + }; + var KEYWORDS = ["FROM", "WHERE", "LIMIT", "GROUP", "FLATTEN"]; + function splitOnUnescapedPipe(link) { + let pipe = -1; + while ((pipe = link.indexOf("|", pipe + 1)) >= 0) { + if (pipe > 0 && link[pipe - 1] == "\\") + continue; + return [link.substring(0, pipe).replace(/\\\|/g, "|"), link.substring(pipe + 1)]; + } + return [link.replace(/\\\|/g, "|"), void 0]; + } + function parseInnerLink(rawlink) { + let [link, display] = splitOnUnescapedPipe(rawlink); + return Link.infer(link, false, display); + } + function createBinaryParser(child, sep, combine) { + return parsimmon_umd_minExports.seqMap(child, parsimmon_umd_minExports.seq(parsimmon_umd_minExports.optWhitespace, sep, parsimmon_umd_minExports.optWhitespace, child).many(), (first, rest) => { + if (rest.length == 0) + return first; + let node = combine(first, rest[0][1], rest[0][3]); + for (let index = 1; index < rest.length; index++) { + node = combine(node, rest[index][1], rest[index][3]); + } + return node; + }); + } + function chainOpt(base, ...funcs) { + return parsimmon_umd_minExports.custom((success, failure) => { + return (input, i) => { + let result = base._(input, i); + if (!result.status) + return result; + for (let func of funcs) { + let next = func(result.value)._(input, result.index); + if (!next.status) + return result; + result = next; + } + return result; + }; + }); + } + var EXPRESSION = parsimmon_umd_minExports.createLanguage({ + number: (q) => parsimmon_umd_minExports.regexp(/-?[0-9]+(\.[0-9]+)?/).map((str) => Number.parseFloat(str)).desc("number"), + string: (q) => parsimmon_umd_minExports.string('"').then(parsimmon_umd_minExports.alt(q.escapeCharacter, parsimmon_umd_minExports.noneOf('"\\')).atLeast(0).map((chars) => chars.join(""))).skip(parsimmon_umd_minExports.string('"')).desc("string"), + escapeCharacter: (_) => parsimmon_umd_minExports.string("\\").then(parsimmon_umd_minExports.any).map((escaped) => { + if (escaped === '"') + return '"'; + if (escaped === "\\") + return "\\"; + else + return "\\" + escaped; + }), + bool: (_) => parsimmon_umd_minExports.regexp(/true|false|True|False/).map((str) => str.toLowerCase() == "true").desc("boolean ('true' or 'false')"), + tag: (_) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("#"), parsimmon_umd_minExports.alt(parsimmon_umd_minExports.regexp(/[^\u2000-\u206F\u2E00-\u2E7F'!"#$%&()*+,.:;<=>?@^`{|}~\[\]\\\s]/).desc("text")).many(), (start, rest) => start + rest.join("")).desc("tag ('#hello/stuff')"), + identifier: (_) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.alt(parsimmon_umd_minExports.regexp(/\p{Letter}/u), parsimmon_umd_minExports.regexp(EMOJI_REGEX).desc("text")), parsimmon_umd_minExports.alt(parsimmon_umd_minExports.regexp(/[0-9\p{Letter}_-]/u), parsimmon_umd_minExports.regexp(EMOJI_REGEX).desc("text")).many(), (first, rest) => first + rest.join("")).desc("variable identifier"), + link: (_) => parsimmon_umd_minExports.regexp(/\[\[([^\[\]]*?)\]\]/u, 1).map((linkInner) => parseInnerLink(linkInner)).desc("file link"), + embedLink: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("!").atMost(1), q.link, (p, l2) => { + if (p.length > 0) + l2.embed = true; + return l2; + }).desc("file link"), + binaryPlusMinus: (_) => parsimmon_umd_minExports.regexp(/\+|-/).map((str) => str).desc("'+' or '-'"), + binaryMulDiv: (_) => parsimmon_umd_minExports.regexp(/\*|\/|%/).map((str) => str).desc("'*' or '/' or '%'"), + binaryCompareOp: (_) => parsimmon_umd_minExports.regexp(/>=|<=|!=|>|<|=/).map((str) => str).desc("'>=' or '<=' or '!=' or '=' or '>' or '<'"), + binaryBooleanOp: (_) => parsimmon_umd_minExports.regexp(/and|or|&|\|/i).map((str) => { + if (str.toLowerCase() == "and") + return "&"; + else if (str.toLowerCase() == "or") + return "|"; + else + return str; + }).desc("'and' or 'or'"), + rootDate: (_) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.regexp(/\d{4}/), parsimmon_umd_minExports.string("-"), parsimmon_umd_minExports.regexp(/\d{2}/), (year, _2, month) => { + return DateTime.fromObject({ year: Number.parseInt(year), month: Number.parseInt(month) }); + }).desc("date in format YYYY-MM[-DDTHH-MM-SS.MS]"), + dateShorthand: (_) => parsimmon_umd_minExports.alt(...Object.keys(DATE_SHORTHANDS).sort((a, b) => b.length - a.length).map(parsimmon_umd_minExports.string)), + date: (q) => chainOpt(q.rootDate, (ym) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("-"), parsimmon_umd_minExports.regexp(/\d{2}/), (_, day) => ym.set({ day: Number.parseInt(day) })), (ymd) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("T"), parsimmon_umd_minExports.regexp(/\d{2}/), (_, hour) => ymd.set({ hour: Number.parseInt(hour) })), (ymdh) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string(":"), parsimmon_umd_minExports.regexp(/\d{2}/), (_, minute) => ymdh.set({ minute: Number.parseInt(minute) })), (ymdhm) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string(":"), parsimmon_umd_minExports.regexp(/\d{2}/), (_, second) => ymdhm.set({ second: Number.parseInt(second) })), (ymdhms) => parsimmon_umd_minExports.alt(parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("."), parsimmon_umd_minExports.regexp(/\d{3}/), (_, millisecond) => ymdhms.set({ millisecond: Number.parseInt(millisecond) })), parsimmon_umd_minExports.succeed(ymdhms)), (dt) => parsimmon_umd_minExports.alt(parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("+").or(parsimmon_umd_minExports.string("-")), parsimmon_umd_minExports.regexp(/\d{1,2}(:\d{2})?/), (pm, hr) => dt.setZone("UTC" + pm + hr, { keepLocalTime: true })), parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("Z"), () => dt.setZone("utc", { keepLocalTime: true })), parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("["), parsimmon_umd_minExports.regexp(/[0-9A-Za-z+-\/]+/u), parsimmon_umd_minExports.string("]"), (_a, zone, _b) => dt.setZone(zone, { keepLocalTime: true })))).assert((dt) => dt.isValid, "valid date").desc("date in format YYYY-MM[-DDTHH-MM-SS.MS]"), + datePlus: (q) => parsimmon_umd_minExports.alt(q.dateShorthand.map((d) => DATE_SHORTHANDS[d]()), q.date).desc("date in format YYYY-MM[-DDTHH-MM-SS.MS] or in shorthand"), + durationType: (_) => parsimmon_umd_minExports.alt(...Object.keys(DURATION_TYPES).sort((a, b) => b.length - a.length).map(parsimmon_umd_minExports.string)), + duration: (q) => parsimmon_umd_minExports.seqMap(q.number, parsimmon_umd_minExports.optWhitespace, q.durationType, (count, _, t) => DURATION_TYPES[t].mapUnits((x) => x * count)).sepBy1(parsimmon_umd_minExports.string(",").trim(parsimmon_umd_minExports.optWhitespace).or(parsimmon_umd_minExports.optWhitespace)).map((durations) => durations.reduce((p, c) => p.plus(c))).desc("duration like 4hr2min"), + rawNull: (_) => parsimmon_umd_minExports.string("null"), + tagSource: (q) => q.tag.map((tag) => Sources.tag(tag)), + csvSource: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("csv(").skip(parsimmon_umd_minExports.optWhitespace), q.string, parsimmon_umd_minExports.string(")"), (_1, path2, _2) => Sources.csv(path2)), + linkIncomingSource: (q) => q.link.map((link) => Sources.link(link.path, true)), + linkOutgoingSource: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("outgoing(").skip(parsimmon_umd_minExports.optWhitespace), q.link, parsimmon_umd_minExports.string(")"), (_1, link, _2) => Sources.link(link.path, false)), + folderSource: (q) => q.string.map((str) => Sources.folder(str)), + parensSource: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("("), parsimmon_umd_minExports.optWhitespace, q.source, parsimmon_umd_minExports.optWhitespace, parsimmon_umd_minExports.string(")"), (_1, _2, field, _3, _4) => field), + negateSource: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.alt(parsimmon_umd_minExports.string("-"), parsimmon_umd_minExports.string("!")), q.atomSource, (_, source) => Sources.negate(source)), + atomSource: (q) => parsimmon_umd_minExports.alt(q.parensSource, q.negateSource, q.linkOutgoingSource, q.linkIncomingSource, q.folderSource, q.tagSource, q.csvSource), + binaryOpSource: (q) => createBinaryParser(q.atomSource, q.binaryBooleanOp.map((s2) => s2), Sources.binaryOp), + source: (q) => q.binaryOpSource, + variableField: (q) => q.identifier.chain((r) => { + if (KEYWORDS.includes(r.toUpperCase())) { + return parsimmon_umd_minExports.fail("Variable fields cannot be a keyword (" + KEYWORDS.join(" or ") + ")"); + } else { + return parsimmon_umd_minExports.succeed(Fields.variable(r)); + } + }).desc("variable"), + numberField: (q) => q.number.map((val) => Fields.literal(val)).desc("number"), + stringField: (q) => q.string.map((val) => Fields.literal(val)).desc("string"), + boolField: (q) => q.bool.map((val) => Fields.literal(val)).desc("boolean"), + dateField: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("date("), parsimmon_umd_minExports.optWhitespace, q.datePlus, parsimmon_umd_minExports.optWhitespace, parsimmon_umd_minExports.string(")"), (prefix, _1, date, _2, postfix) => Fields.literal(date)).desc("date"), + durationField: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("dur("), parsimmon_umd_minExports.optWhitespace, q.duration, parsimmon_umd_minExports.optWhitespace, parsimmon_umd_minExports.string(")"), (prefix, _1, dur, _2, postfix) => Fields.literal(dur)).desc("duration"), + nullField: (q) => q.rawNull.map((_) => Fields.NULL), + linkField: (q) => q.link.map((f) => Fields.literal(f)), + listField: (q) => q.field.sepBy(parsimmon_umd_minExports.string(",").trim(parsimmon_umd_minExports.optWhitespace)).wrap(parsimmon_umd_minExports.string("[").skip(parsimmon_umd_minExports.optWhitespace), parsimmon_umd_minExports.optWhitespace.then(parsimmon_umd_minExports.string("]"))).map((l2) => Fields.list(l2)).desc("list ('[1, 2, 3]')"), + objectField: (q) => parsimmon_umd_minExports.seqMap(q.identifier.or(q.string), parsimmon_umd_minExports.string(":").trim(parsimmon_umd_minExports.optWhitespace), q.field, (name, _sep, value) => { + return { name, value }; + }).sepBy(parsimmon_umd_minExports.string(",").trim(parsimmon_umd_minExports.optWhitespace)).wrap(parsimmon_umd_minExports.string("{").skip(parsimmon_umd_minExports.optWhitespace), parsimmon_umd_minExports.optWhitespace.then(parsimmon_umd_minExports.string("}"))).map((vals) => { + let res = {}; + for (let entry of vals) + res[entry.name] = entry.value; + return Fields.object(res); + }).desc("object ('{ a: 1, b: 2 }')"), + atomInlineField: (q) => parsimmon_umd_minExports.alt(q.date, q.duration.map((d) => normalizeDuration(d)), q.string, q.tag, q.embedLink, q.bool, q.number, q.rawNull), + inlineFieldList: (q) => q.atomInlineField.sepBy(parsimmon_umd_minExports.string(",").trim(parsimmon_umd_minExports.optWhitespace).lookahead(q.atomInlineField)), + inlineField: (q) => parsimmon_umd_minExports.alt(parsimmon_umd_minExports.seqMap(q.atomInlineField, parsimmon_umd_minExports.string(",").trim(parsimmon_umd_minExports.optWhitespace), q.inlineFieldList, (f, _s, l2) => [f].concat(l2)), q.atomInlineField), + atomField: (q) => parsimmon_umd_minExports.alt(q.embedLink.map((l2) => Fields.literal(l2)), q.negatedField, q.linkField, q.listField, q.objectField, q.lambdaField, q.parensField, q.boolField, q.numberField, q.stringField, q.dateField, q.durationField, q.nullField, q.variableField), + indexField: (q) => parsimmon_umd_minExports.seqMap(q.atomField, parsimmon_umd_minExports.alt(q.dotPostfix, q.indexPostfix, q.functionPostfix).many(), (obj, postfixes) => { + let result = obj; + for (let post of postfixes) { + switch (post.type) { + case "dot": + result = Fields.index(result, Fields.literal(post.field)); + break; + case "index": + result = Fields.index(result, post.field); + break; + case "function": + result = Fields.func(result, post.fields); + break; + } + } + return result; + }), + negatedField: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("!"), q.indexField, (_, field) => Fields.negate(field)).desc("negated field"), + parensField: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("("), parsimmon_umd_minExports.optWhitespace, q.field, parsimmon_umd_minExports.optWhitespace, parsimmon_umd_minExports.string(")"), (_1, _2, field, _3, _4) => field), + lambdaField: (q) => parsimmon_umd_minExports.seqMap(q.identifier.sepBy(parsimmon_umd_minExports.string(",").trim(parsimmon_umd_minExports.optWhitespace)).wrap(parsimmon_umd_minExports.string("(").trim(parsimmon_umd_minExports.optWhitespace), parsimmon_umd_minExports.string(")").trim(parsimmon_umd_minExports.optWhitespace)), parsimmon_umd_minExports.string("=>").trim(parsimmon_umd_minExports.optWhitespace), q.field, (ident, _ignore, value) => { + return { type: "lambda", arguments: ident, value }; + }), + dotPostfix: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("."), q.identifier, (_, field) => { + return { type: "dot", field }; + }), + indexPostfix: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("["), parsimmon_umd_minExports.optWhitespace, q.field, parsimmon_umd_minExports.optWhitespace, parsimmon_umd_minExports.string("]"), (_, _2, field, _3, _4) => { + return { type: "index", field }; + }), + functionPostfix: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.string("("), parsimmon_umd_minExports.optWhitespace, q.field.sepBy(parsimmon_umd_minExports.string(",").trim(parsimmon_umd_minExports.optWhitespace)), parsimmon_umd_minExports.optWhitespace, parsimmon_umd_minExports.string(")"), (_, _1, fields, _2, _3) => { + return { type: "function", fields }; + }), + binaryMulDivField: (q) => createBinaryParser(q.indexField, q.binaryMulDiv, Fields.binaryOp), + binaryPlusMinusField: (q) => createBinaryParser(q.binaryMulDivField, q.binaryPlusMinus, Fields.binaryOp), + binaryCompareField: (q) => createBinaryParser(q.binaryPlusMinusField, q.binaryCompareOp, Fields.binaryOp), + binaryBooleanField: (q) => createBinaryParser(q.binaryCompareField, q.binaryBooleanOp, Fields.binaryOp), + binaryOpField: (q) => q.binaryBooleanField, + field: (q) => q.binaryOpField + }); + function parseField(text) { + try { + return Result.success(EXPRESSION.field.tryParse(text)); + } catch (error) { + return Result.failure("" + error); + } + } + var QueryFields; + (function(QueryFields2) { + function named(name, field) { + return { name, field }; + } + QueryFields2.named = named; + function sortBy(field, dir) { + return { field, direction: dir }; + } + QueryFields2.sortBy = sortBy; + })(QueryFields || (QueryFields = {})); + function captureRaw(base) { + return parsimmon_umd_minExports.custom((success, failure) => { + return (input, i) => { + let result = base._(input, i); + if (!result.status) + return result; + return Object.assign({}, result, { value: [result.value, input.substring(i, result.index)] }); + }; + }); + } + function stripNewlines(text) { + return text.split(/[\r\n]+/).map((t) => t.trim()).join(""); + } + function precededByWhitespaceIfNotEof(if_eof, parser) { + return parsimmon_umd_minExports.eof.map(if_eof).or(parsimmon_umd_minExports.whitespace.then(parser)); + } + var QUERY_LANGUAGE = parsimmon_umd_minExports.createLanguage({ + queryType: (q) => parsimmon_umd_minExports.alt(parsimmon_umd_minExports.regexp(/TABLE|LIST|TASK|CALENDAR/i)).map((str) => str.toLowerCase()).desc("query type ('TABLE', 'LIST', 'TASK', or 'CALENDAR')"), + explicitNamedField: (q) => parsimmon_umd_minExports.seqMap(EXPRESSION.field.skip(parsimmon_umd_minExports.whitespace), parsimmon_umd_minExports.regexp(/AS/i).skip(parsimmon_umd_minExports.whitespace), EXPRESSION.identifier.or(EXPRESSION.string), (field, _as, ident) => QueryFields.named(ident, field)), + namedField: (q) => parsimmon_umd_minExports.alt(q.explicitNamedField, captureRaw(EXPRESSION.field).map(([value, text]) => QueryFields.named(stripNewlines(text), value))), + sortField: (q) => parsimmon_umd_minExports.seqMap(EXPRESSION.field.skip(parsimmon_umd_minExports.optWhitespace), parsimmon_umd_minExports.regexp(/ASCENDING|DESCENDING|ASC|DESC/i).atMost(1), (field, dir) => { + let direction = dir.length == 0 ? "ascending" : dir[0].toLowerCase(); + if (direction == "desc") + direction = "descending"; + if (direction == "asc") + direction = "ascending"; + return { + field, + direction + }; + }), + headerClause: (q) => q.queryType.chain((type) => { + switch (type) { + case "table": { + return precededByWhitespaceIfNotEof(() => ({ type, fields: [], showId: true }), parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.regexp(/WITHOUT\s+ID/i).skip(parsimmon_umd_minExports.optWhitespace).atMost(1), parsimmon_umd_minExports.sepBy(q.namedField, parsimmon_umd_minExports.string(",").trim(parsimmon_umd_minExports.optWhitespace)), (withoutId, fields) => { + return { type, fields, showId: withoutId.length == 0 }; + })); + } + case "list": + return precededByWhitespaceIfNotEof(() => ({ type, format: void 0, showId: true }), parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.regexp(/WITHOUT\s+ID/i).skip(parsimmon_umd_minExports.optWhitespace).atMost(1), EXPRESSION.field.atMost(1), (withoutId, format) => { + return { + type, + format: format.length == 1 ? format[0] : void 0, + showId: withoutId.length == 0 + }; + })); + case "task": + return parsimmon_umd_minExports.succeed({ type }); + case "calendar": + return parsimmon_umd_minExports.whitespace.then(parsimmon_umd_minExports.seqMap(q.namedField, (field) => { + return { + type, + showId: true, + field + }; + })); + default: + return parsimmon_umd_minExports.fail(`Unrecognized query type '${type}'`); + } + }).desc("TABLE or LIST or TASK or CALENDAR"), + fromClause: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.regexp(/FROM/i), parsimmon_umd_minExports.whitespace, EXPRESSION.source, (_1, _2, source) => source), + whereClause: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.regexp(/WHERE/i), parsimmon_umd_minExports.whitespace, EXPRESSION.field, (where, _, field) => { + return { type: "where", clause: field }; + }).desc("WHERE "), + sortByClause: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.regexp(/SORT/i), parsimmon_umd_minExports.whitespace, q.sortField.sepBy1(parsimmon_umd_minExports.string(",").trim(parsimmon_umd_minExports.optWhitespace)), (sort, _1, fields) => { + return { type: "sort", fields }; + }).desc("SORT field [ASC/DESC]"), + limitClause: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.regexp(/LIMIT/i), parsimmon_umd_minExports.whitespace, EXPRESSION.field, (limit, _1, field) => { + return { type: "limit", amount: field }; + }).desc("LIMIT "), + flattenClause: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.regexp(/FLATTEN/i).skip(parsimmon_umd_minExports.whitespace), q.namedField, (_, field) => { + return { type: "flatten", field }; + }).desc("FLATTEN [AS ]"), + groupByClause: (q) => parsimmon_umd_minExports.seqMap(parsimmon_umd_minExports.regexp(/GROUP BY/i).skip(parsimmon_umd_minExports.whitespace), q.namedField, (_, field) => { + return { type: "group", field }; + }).desc("GROUP BY [AS ]"), + clause: (q) => parsimmon_umd_minExports.alt(q.fromClause, q.whereClause, q.sortByClause, q.limitClause, q.groupByClause, q.flattenClause), + query: (q) => parsimmon_umd_minExports.seqMap(q.headerClause.trim(parsimmon_umd_minExports.optWhitespace), q.fromClause.trim(parsimmon_umd_minExports.optWhitespace).atMost(1), q.clause.trim(parsimmon_umd_minExports.optWhitespace).many(), (header, from, clauses) => { + return { + header, + source: from.length == 0 ? Sources.folder("") : from[0], + operations: clauses, + settings: DEFAULT_QUERY_SETTINGS + }; + }) + }); + var getAPI = (app) => { + var _a; + if (app) + return (_a = app.plugins.plugins.dataview) === null || _a === void 0 ? void 0 : _a.api; + else + return window.DataviewAPI; + }; + var isPluginEnabled = (app) => app.plugins.enabledPlugins.has("dataview"); + exports2.DATE_SHORTHANDS = DATE_SHORTHANDS; + exports2.DURATION_TYPES = DURATION_TYPES; + exports2.EXPRESSION = EXPRESSION; + exports2.KEYWORDS = KEYWORDS; + exports2.QUERY_LANGUAGE = QUERY_LANGUAGE; + exports2.getAPI = getAPI; + exports2.isPluginEnabled = isPluginEnabled; + exports2.parseField = parseField; + } +}); + +// node_modules/depd/lib/compat/callsite-tostring.js +var require_callsite_tostring = __commonJS({ + "node_modules/depd/lib/compat/callsite-tostring.js"(exports2, module2) { + "use strict"; + module2.exports = callSiteToString2; + function callSiteFileLocation(callSite) { + var fileName; + var fileLocation = ""; + if (callSite.isNative()) { + fileLocation = "native"; + } else if (callSite.isEval()) { + fileName = callSite.getScriptNameOrSourceURL(); + if (!fileName) { + fileLocation = callSite.getEvalOrigin(); + } + } else { + fileName = callSite.getFileName(); + } + if (fileName) { + fileLocation += fileName; + var lineNumber = callSite.getLineNumber(); + if (lineNumber != null) { + fileLocation += ":" + lineNumber; + var columnNumber = callSite.getColumnNumber(); + if (columnNumber) { + fileLocation += ":" + columnNumber; + } + } + } + return fileLocation || "unknown source"; + } + function callSiteToString2(callSite) { + var addSuffix = true; + var fileLocation = callSiteFileLocation(callSite); + var functionName = callSite.getFunctionName(); + var isConstructor = callSite.isConstructor(); + var isMethodCall = !(callSite.isToplevel() || isConstructor); + var line = ""; + if (isMethodCall) { + var methodName = callSite.getMethodName(); + var typeName = getConstructorName(callSite); + if (functionName) { + if (typeName && functionName.indexOf(typeName) !== 0) { + line += typeName + "."; + } + line += functionName; + if (methodName && functionName.lastIndexOf("." + methodName) !== functionName.length - methodName.length - 1) { + line += " [as " + methodName + "]"; + } + } else { + line += typeName + "." + (methodName || ""); + } + } else if (isConstructor) { + line += "new " + (functionName || ""); + } else if (functionName) { + line += functionName; + } else { + addSuffix = false; + line += fileLocation; + } + if (addSuffix) { + line += " (" + fileLocation + ")"; + } + return line; + } + function getConstructorName(obj) { + var receiver = obj.receiver; + return receiver.constructor && receiver.constructor.name || null; + } + } +}); + +// node_modules/depd/lib/compat/event-listener-count.js +var require_event_listener_count = __commonJS({ + "node_modules/depd/lib/compat/event-listener-count.js"(exports2, module2) { + "use strict"; + module2.exports = eventListenerCount2; + function eventListenerCount2(emitter, type) { + return emitter.listeners(type).length; + } + } +}); + +// node_modules/depd/lib/compat/index.js +var require_compat = __commonJS({ + "node_modules/depd/lib/compat/index.js"(exports2, module2) { + "use strict"; + var EventEmitter = require("events").EventEmitter; + lazyProperty(module2.exports, "callSiteToString", function callSiteToString2() { + var limit = Error.stackTraceLimit; + var obj = {}; + var prep = Error.prepareStackTrace; + function prepareObjectStackTrace2(obj2, stack3) { + return stack3; + } + Error.prepareStackTrace = prepareObjectStackTrace2; + Error.stackTraceLimit = 2; + Error.captureStackTrace(obj); + var stack2 = obj.stack.slice(); + Error.prepareStackTrace = prep; + Error.stackTraceLimit = limit; + return stack2[0].toString ? toString : require_callsite_tostring(); + }); + lazyProperty(module2.exports, "eventListenerCount", function eventListenerCount2() { + return EventEmitter.listenerCount || require_event_listener_count(); + }); + function lazyProperty(obj, prop, getter) { + function get() { + var val = getter(); + Object.defineProperty(obj, prop, { + configurable: true, + enumerable: true, + value: val + }); + return val; + } + Object.defineProperty(obj, prop, { + configurable: true, + enumerable: true, + get + }); + } + function toString(obj) { + return obj.toString(); + } + } +}); + +// node_modules/depd/index.js +var require_depd = __commonJS({ + "node_modules/depd/index.js"(exports, module) { + var callSiteToString = require_compat().callSiteToString; + var eventListenerCount = require_compat().eventListenerCount; + var relative = require("path").relative; + module.exports = depd; + var basePath = process.cwd(); + function containsNamespace(str, namespace) { + var vals = str.split(/[ ,]+/); + var ns = String(namespace).toLowerCase(); + for (var i = 0; i < vals.length; i++) { + var val = vals[i]; + if (val && (val === "*" || val.toLowerCase() === ns)) { + return true; + } + } + return false; + } + function convertDataDescriptorToAccessor(obj, prop, message2) { + var descriptor = Object.getOwnPropertyDescriptor(obj, prop); + var value = descriptor.value; + descriptor.get = function getter() { + return value; + }; + if (descriptor.writable) { + descriptor.set = function setter(val) { + return value = val; + }; + } + delete descriptor.value; + delete descriptor.writable; + Object.defineProperty(obj, prop, descriptor); + return descriptor; + } + function createArgumentsString(arity) { + var str = ""; + for (var i = 0; i < arity; i++) { + str += ", arg" + i; + } + return str.substr(2); + } + function createStackString(stack2) { + var str = this.name + ": " + this.namespace; + if (this.message) { + str += " deprecated " + this.message; + } + for (var i = 0; i < stack2.length; i++) { + str += "\n at " + callSiteToString(stack2[i]); + } + return str; + } + function depd(namespace) { + if (!namespace) { + throw new TypeError("argument namespace is required"); + } + var stack2 = getStack(); + var site2 = callSiteLocation(stack2[1]); + var file = site2[0]; + function deprecate2(message2) { + log.call(deprecate2, message2); + } + deprecate2._file = file; + deprecate2._ignored = isignored(namespace); + deprecate2._namespace = namespace; + deprecate2._traced = istraced(namespace); + deprecate2._warned = Object.create(null); + deprecate2.function = wrapfunction; + deprecate2.property = wrapproperty; + return deprecate2; + } + function isignored(namespace) { + if (process.noDeprecation) { + return true; + } + var str = process.env.NO_DEPRECATION || ""; + return containsNamespace(str, namespace); + } + function istraced(namespace) { + if (process.traceDeprecation) { + return true; + } + var str = process.env.TRACE_DEPRECATION || ""; + return containsNamespace(str, namespace); + } + function log(message2, site2) { + var haslisteners = eventListenerCount(process, "deprecation") !== 0; + if (!haslisteners && this._ignored) { + return; + } + var caller; + var callFile; + var callSite; + var depSite; + var i = 0; + var seen = false; + var stack2 = getStack(); + var file = this._file; + if (site2) { + depSite = site2; + callSite = callSiteLocation(stack2[1]); + callSite.name = depSite.name; + file = callSite[0]; + } else { + i = 2; + depSite = callSiteLocation(stack2[i]); + callSite = depSite; + } + for (; i < stack2.length; i++) { + caller = callSiteLocation(stack2[i]); + callFile = caller[0]; + if (callFile === file) { + seen = true; + } else if (callFile === this._file) { + file = this._file; + } else if (seen) { + break; + } + } + var key = caller ? depSite.join(":") + "__" + caller.join(":") : void 0; + if (key !== void 0 && key in this._warned) { + return; + } + this._warned[key] = true; + var msg = message2; + if (!msg) { + msg = callSite === depSite || !callSite.name ? defaultMessage(depSite) : defaultMessage(callSite); + } + if (haslisteners) { + var err = DeprecationError(this._namespace, msg, stack2.slice(i)); + process.emit("deprecation", err); + return; + } + var format = process.stderr.isTTY ? formatColor : formatPlain; + var output = format.call(this, msg, caller, stack2.slice(i)); + process.stderr.write(output + "\n", "utf8"); + } + function callSiteLocation(callSite) { + var file = callSite.getFileName() || ""; + var line = callSite.getLineNumber(); + var colm = callSite.getColumnNumber(); + if (callSite.isEval()) { + file = callSite.getEvalOrigin() + ", " + file; + } + var site2 = [file, line, colm]; + site2.callSite = callSite; + site2.name = callSite.getFunctionName(); + return site2; + } + function defaultMessage(site2) { + var callSite = site2.callSite; + var funcName = site2.name; + if (!funcName) { + funcName = ""; + } + var context = callSite.getThis(); + var typeName = context && callSite.getTypeName(); + if (typeName === "Object") { + typeName = void 0; + } + if (typeName === "Function") { + typeName = context.name || typeName; + } + return typeName && callSite.getMethodName() ? typeName + "." + funcName : funcName; + } + function formatPlain(msg, caller, stack2) { + var timestamp = new Date().toUTCString(); + var formatted = timestamp + " " + this._namespace + " deprecated " + msg; + if (this._traced) { + for (var i = 0; i < stack2.length; i++) { + formatted += "\n at " + callSiteToString(stack2[i]); + } + return formatted; + } + if (caller) { + formatted += " at " + formatLocation(caller); + } + return formatted; + } + function formatColor(msg, caller, stack2) { + var formatted = "" + this._namespace + " deprecated " + msg + ""; + if (this._traced) { + for (var i = 0; i < stack2.length; i++) { + formatted += "\n at " + callSiteToString(stack2[i]) + ""; + } + return formatted; + } + if (caller) { + formatted += " " + formatLocation(caller) + ""; + } + return formatted; + } + function formatLocation(callSite) { + return relative(basePath, callSite[0]) + ":" + callSite[1] + ":" + callSite[2]; + } + function getStack() { + var limit = Error.stackTraceLimit; + var obj = {}; + var prep = Error.prepareStackTrace; + Error.prepareStackTrace = prepareObjectStackTrace; + Error.stackTraceLimit = Math.max(10, limit); + Error.captureStackTrace(obj); + var stack2 = obj.stack.slice(1); + Error.prepareStackTrace = prep; + Error.stackTraceLimit = limit; + return stack2; + } + function prepareObjectStackTrace(obj, stack2) { + return stack2; + } + function wrapfunction(fn, message) { + if (typeof fn !== "function") { + throw new TypeError("argument fn must be a function"); + } + var args = createArgumentsString(fn.length); + var deprecate = this; + var stack = getStack(); + var site = callSiteLocation(stack[1]); + site.name = fn.name; + var deprecatedfn = eval("(function (" + args + ') {\n"use strict"\nlog.call(deprecate, message, site)\nreturn fn.apply(this, arguments)\n})'); + return deprecatedfn; + } + function wrapproperty(obj, prop, message2) { + if (!obj || typeof obj !== "object" && typeof obj !== "function") { + throw new TypeError("argument obj must be object"); + } + var descriptor = Object.getOwnPropertyDescriptor(obj, prop); + if (!descriptor) { + throw new TypeError("must call property on owner object"); + } + if (!descriptor.configurable) { + throw new TypeError("property must be configurable"); + } + var deprecate2 = this; + var stack2 = getStack(); + var site2 = callSiteLocation(stack2[1]); + site2.name = prop; + if ("value" in descriptor) { + descriptor = convertDataDescriptorToAccessor(obj, prop, message2); + } + var get = descriptor.get; + var set = descriptor.set; + if (typeof get === "function") { + descriptor.get = function getter() { + log.call(deprecate2, message2, site2); + return get.apply(this, arguments); + }; + } + if (typeof set === "function") { + descriptor.set = function setter() { + log.call(deprecate2, message2, site2); + return set.apply(this, arguments); + }; + } + Object.defineProperty(obj, prop, descriptor); + } + function DeprecationError(namespace, message2, stack2) { + var error = new Error(); + var stackString; + Object.defineProperty(error, "constructor", { + value: DeprecationError + }); + Object.defineProperty(error, "message", { + configurable: true, + enumerable: false, + value: message2, + writable: true + }); + Object.defineProperty(error, "name", { + enumerable: false, + configurable: true, + value: "DeprecationError", + writable: true + }); + Object.defineProperty(error, "namespace", { + configurable: true, + enumerable: false, + value: namespace, + writable: true + }); + Object.defineProperty(error, "stack", { + configurable: true, + enumerable: false, + get: function() { + if (stackString !== void 0) { + return stackString; + } + return stackString = createStackString.call(this, stack2); + }, + set: function setter(val) { + stackString = val; + } + }); + return error; + } + } +}); + +// node_modules/bytes/index.js +var require_bytes = __commonJS({ + "node_modules/bytes/index.js"(exports2, module2) { + "use strict"; + module2.exports = bytes; + module2.exports.format = format; + module2.exports.parse = parse; + var formatThousandsRegExp = /\B(?=(\d{3})+(?!\d))/g; + var formatDecimalsRegExp = /(?:\.0*|(\.[^0]+)0+)$/; + var map = { + b: 1, + kb: 1 << 10, + mb: 1 << 20, + gb: 1 << 30, + tb: Math.pow(1024, 4), + pb: Math.pow(1024, 5) + }; + var parseRegExp = /^((-|\+)?(\d+(?:\.\d+)?)) *(kb|mb|gb|tb|pb)$/i; + function bytes(value, options) { + if (typeof value === "string") { + return parse(value); + } + if (typeof value === "number") { + return format(value, options); + } + return null; + } + function format(value, options) { + if (!Number.isFinite(value)) { + return null; + } + var mag = Math.abs(value); + var thousandsSeparator = options && options.thousandsSeparator || ""; + var unitSeparator = options && options.unitSeparator || ""; + var decimalPlaces = options && options.decimalPlaces !== void 0 ? options.decimalPlaces : 2; + var fixedDecimals = Boolean(options && options.fixedDecimals); + var unit = options && options.unit || ""; + if (!unit || !map[unit.toLowerCase()]) { + if (mag >= map.pb) { + unit = "PB"; + } else if (mag >= map.tb) { + unit = "TB"; + } else if (mag >= map.gb) { + unit = "GB"; + } else if (mag >= map.mb) { + unit = "MB"; + } else if (mag >= map.kb) { + unit = "KB"; + } else { + unit = "B"; + } + } + var val = value / map[unit.toLowerCase()]; + var str = val.toFixed(decimalPlaces); + if (!fixedDecimals) { + str = str.replace(formatDecimalsRegExp, "$1"); + } + if (thousandsSeparator) { + str = str.split(".").map(function(s, i) { + return i === 0 ? s.replace(formatThousandsRegExp, thousandsSeparator) : s; + }).join("."); + } + return str + unitSeparator + unit; + } + function parse(val) { + if (typeof val === "number" && !isNaN(val)) { + return val; + } + if (typeof val !== "string") { + return null; + } + var results = parseRegExp.exec(val); + var floatValue; + var unit = "b"; + if (!results) { + floatValue = parseInt(val, 10); + unit = "b"; + } else { + floatValue = parseFloat(results[1]); + unit = results[4].toLowerCase(); + } + return Math.floor(map[unit] * floatValue); + } + } +}); + +// node_modules/content-type/index.js +var require_content_type = __commonJS({ + "node_modules/content-type/index.js"(exports2) { + "use strict"; + var PARAM_REGEXP = /; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *("(?:[\u000b\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\u000b\u0020-\u00ff])*"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g; + var TEXT_REGEXP = /^[\u000b\u0020-\u007e\u0080-\u00ff]+$/; + var TOKEN_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/; + var QESC_REGEXP = /\\([\u000b\u0020-\u00ff])/g; + var QUOTE_REGEXP = /([\\"])/g; + var TYPE_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/; + exports2.format = format; + exports2.parse = parse; + function format(obj) { + if (!obj || typeof obj !== "object") { + throw new TypeError("argument obj is required"); + } + var parameters = obj.parameters; + var type = obj.type; + if (!type || !TYPE_REGEXP.test(type)) { + throw new TypeError("invalid type"); + } + var string = type; + if (parameters && typeof parameters === "object") { + var param; + var params = Object.keys(parameters).sort(); + for (var i = 0; i < params.length; i++) { + param = params[i]; + if (!TOKEN_REGEXP.test(param)) { + throw new TypeError("invalid parameter name"); + } + string += "; " + param + "=" + qstring(parameters[param]); + } + } + return string; + } + function parse(string) { + if (!string) { + throw new TypeError("argument string is required"); + } + var header = typeof string === "object" ? getcontenttype(string) : string; + if (typeof header !== "string") { + throw new TypeError("argument string is required to be a string"); + } + var index = header.indexOf(";"); + var type = index !== -1 ? header.slice(0, index).trim() : header.trim(); + if (!TYPE_REGEXP.test(type)) { + throw new TypeError("invalid media type"); + } + var obj = new ContentType(type.toLowerCase()); + if (index !== -1) { + var key; + var match; + var value; + PARAM_REGEXP.lastIndex = index; + while (match = PARAM_REGEXP.exec(header)) { + if (match.index !== index) { + throw new TypeError("invalid parameter format"); + } + index += match[0].length; + key = match[1].toLowerCase(); + value = match[2]; + if (value.charCodeAt(0) === 34) { + value = value.slice(1, -1); + if (value.indexOf("\\") !== -1) { + value = value.replace(QESC_REGEXP, "$1"); + } + } + obj.parameters[key] = value; + } + if (index !== header.length) { + throw new TypeError("invalid parameter format"); + } + } + return obj; + } + function getcontenttype(obj) { + var header; + if (typeof obj.getHeader === "function") { + header = obj.getHeader("content-type"); + } else if (typeof obj.headers === "object") { + header = obj.headers && obj.headers["content-type"]; + } + if (typeof header !== "string") { + throw new TypeError("content-type header is missing from object"); + } + return header; + } + function qstring(val) { + var str = String(val); + if (TOKEN_REGEXP.test(str)) { + return str; + } + if (str.length > 0 && !TEXT_REGEXP.test(str)) { + throw new TypeError("invalid parameter value"); + } + return '"' + str.replace(QUOTE_REGEXP, "\\$1") + '"'; + } + function ContentType(type) { + this.parameters = Object.create(null); + this.type = type; + } + } +}); + +// node_modules/setprototypeof/index.js +var require_setprototypeof = __commonJS({ + "node_modules/setprototypeof/index.js"(exports2, module2) { + "use strict"; + module2.exports = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array ? setProtoOf : mixinProperties); + function setProtoOf(obj, proto) { + obj.__proto__ = proto; + return obj; + } + function mixinProperties(obj, proto) { + for (var prop in proto) { + if (!Object.prototype.hasOwnProperty.call(obj, prop)) { + obj[prop] = proto[prop]; + } + } + return obj; + } + } +}); + +// node_modules/statuses/codes.json +var require_codes = __commonJS({ + "node_modules/statuses/codes.json"(exports2, module2) { + module2.exports = { + "100": "Continue", + "101": "Switching Protocols", + "102": "Processing", + "103": "Early Hints", + "200": "OK", + "201": "Created", + "202": "Accepted", + "203": "Non-Authoritative Information", + "204": "No Content", + "205": "Reset Content", + "206": "Partial Content", + "207": "Multi-Status", + "208": "Already Reported", + "226": "IM Used", + "300": "Multiple Choices", + "301": "Moved Permanently", + "302": "Found", + "303": "See Other", + "304": "Not Modified", + "305": "Use Proxy", + "306": "(Unused)", + "307": "Temporary Redirect", + "308": "Permanent Redirect", + "400": "Bad Request", + "401": "Unauthorized", + "402": "Payment Required", + "403": "Forbidden", + "404": "Not Found", + "405": "Method Not Allowed", + "406": "Not Acceptable", + "407": "Proxy Authentication Required", + "408": "Request Timeout", + "409": "Conflict", + "410": "Gone", + "411": "Length Required", + "412": "Precondition Failed", + "413": "Payload Too Large", + "414": "URI Too Long", + "415": "Unsupported Media Type", + "416": "Range Not Satisfiable", + "417": "Expectation Failed", + "418": "I'm a teapot", + "421": "Misdirected Request", + "422": "Unprocessable Entity", + "423": "Locked", + "424": "Failed Dependency", + "425": "Unordered Collection", + "426": "Upgrade Required", + "428": "Precondition Required", + "429": "Too Many Requests", + "431": "Request Header Fields Too Large", + "451": "Unavailable For Legal Reasons", + "500": "Internal Server Error", + "501": "Not Implemented", + "502": "Bad Gateway", + "503": "Service Unavailable", + "504": "Gateway Timeout", + "505": "HTTP Version Not Supported", + "506": "Variant Also Negotiates", + "507": "Insufficient Storage", + "508": "Loop Detected", + "509": "Bandwidth Limit Exceeded", + "510": "Not Extended", + "511": "Network Authentication Required" + }; + } +}); + +// node_modules/statuses/index.js +var require_statuses = __commonJS({ + "node_modules/statuses/index.js"(exports2, module2) { + "use strict"; + var codes = require_codes(); + module2.exports = status; + status.STATUS_CODES = codes; + status.codes = populateStatusesMap(status, codes); + status.redirect = { + 300: true, + 301: true, + 302: true, + 303: true, + 305: true, + 307: true, + 308: true + }; + status.empty = { + 204: true, + 205: true, + 304: true + }; + status.retry = { + 502: true, + 503: true, + 504: true + }; + function populateStatusesMap(statuses, codes2) { + var arr = []; + Object.keys(codes2).forEach(function forEachCode(code) { + var message2 = codes2[code]; + var status2 = Number(code); + statuses[status2] = message2; + statuses[message2] = status2; + statuses[message2.toLowerCase()] = status2; + arr.push(status2); + }); + return arr; + } + function status(code) { + if (typeof code === "number") { + if (!status[code]) + throw new Error("invalid status code: " + code); + return code; + } + if (typeof code !== "string") { + throw new TypeError("code must be a number or string"); + } + var n = parseInt(code, 10); + if (!isNaN(n)) { + if (!status[n]) + throw new Error("invalid status code: " + n); + return n; + } + n = status[code.toLowerCase()]; + if (!n) + throw new Error('invalid status message: "' + code + '"'); + return n; + } + } +}); + +// node_modules/inherits/inherits_browser.js +var require_inherits_browser = __commonJS({ + "node_modules/inherits/inherits_browser.js"(exports2, 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/inherits/inherits.js +var require_inherits = __commonJS({ + "node_modules/inherits/inherits.js"(exports2, module2) { + try { + util = require("util"); + if (typeof util.inherits !== "function") + throw ""; + module2.exports = util.inherits; + } catch (e) { + module2.exports = require_inherits_browser(); + } + var util; + } +}); + +// node_modules/toidentifier/index.js +var require_toidentifier = __commonJS({ + "node_modules/toidentifier/index.js"(exports2, module2) { + "use strict"; + module2.exports = toIdentifier; + function toIdentifier(str) { + return str.split(" ").map(function(token) { + return token.slice(0, 1).toUpperCase() + token.slice(1); + }).join("").replace(/[^ _0-9a-z]/gi, ""); + } + } +}); + +// node_modules/http-errors/index.js +var require_http_errors = __commonJS({ + "node_modules/http-errors/index.js"(exports2, module2) { + "use strict"; + var deprecate2 = require_depd()("http-errors"); + var setPrototypeOf = require_setprototypeof(); + var statuses = require_statuses(); + var inherits = require_inherits(); + var toIdentifier = require_toidentifier(); + module2.exports = createError; + module2.exports.HttpError = createHttpErrorConstructor(); + module2.exports.isHttpError = createIsHttpErrorFunction(module2.exports.HttpError); + populateConstructorExports(module2.exports, statuses.codes, module2.exports.HttpError); + function codeClass(status) { + return Number(String(status).charAt(0) + "00"); + } + function createError() { + var err; + var msg; + var status = 500; + var props = {}; + for (var i = 0; i < arguments.length; i++) { + var arg = arguments[i]; + if (arg instanceof Error) { + err = arg; + status = err.status || err.statusCode || status; + continue; + } + switch (typeof arg) { + case "string": + msg = arg; + break; + case "number": + status = arg; + if (i !== 0) { + deprecate2("non-first-argument status code; replace with createError(" + arg + ", ...)"); + } + break; + case "object": + props = arg; + break; + } + } + if (typeof status === "number" && (status < 400 || status >= 600)) { + deprecate2("non-error status code; use only 4xx or 5xx status codes"); + } + if (typeof status !== "number" || !statuses[status] && (status < 400 || status >= 600)) { + status = 500; + } + var HttpError = createError[status] || createError[codeClass(status)]; + if (!err) { + err = HttpError ? new HttpError(msg) : new Error(msg || statuses[status]); + Error.captureStackTrace(err, createError); + } + if (!HttpError || !(err instanceof HttpError) || err.status !== status) { + err.expose = status < 500; + err.status = err.statusCode = status; + } + for (var key in props) { + if (key !== "status" && key !== "statusCode") { + err[key] = props[key]; + } + } + return err; + } + function createHttpErrorConstructor() { + function HttpError() { + throw new TypeError("cannot construct abstract class"); + } + inherits(HttpError, Error); + return HttpError; + } + function createClientErrorConstructor(HttpError, name, code) { + var className = toClassName(name); + function ClientError(message2) { + var msg = message2 != null ? message2 : statuses[code]; + var err = new Error(msg); + Error.captureStackTrace(err, ClientError); + setPrototypeOf(err, ClientError.prototype); + Object.defineProperty(err, "message", { + enumerable: true, + configurable: true, + value: msg, + writable: true + }); + Object.defineProperty(err, "name", { + enumerable: false, + configurable: true, + value: className, + writable: true + }); + return err; + } + inherits(ClientError, HttpError); + nameFunc(ClientError, className); + ClientError.prototype.status = code; + ClientError.prototype.statusCode = code; + ClientError.prototype.expose = true; + return ClientError; + } + function createIsHttpErrorFunction(HttpError) { + return function isHttpError(val) { + if (!val || typeof val !== "object") { + return false; + } + if (val instanceof HttpError) { + return true; + } + return val instanceof Error && typeof val.expose === "boolean" && typeof val.statusCode === "number" && val.status === val.statusCode; + }; + } + function createServerErrorConstructor(HttpError, name, code) { + var className = toClassName(name); + function ServerError(message2) { + var msg = message2 != null ? message2 : statuses[code]; + var err = new Error(msg); + Error.captureStackTrace(err, ServerError); + setPrototypeOf(err, ServerError.prototype); + Object.defineProperty(err, "message", { + enumerable: true, + configurable: true, + value: msg, + writable: true + }); + Object.defineProperty(err, "name", { + enumerable: false, + configurable: true, + value: className, + writable: true + }); + return err; + } + inherits(ServerError, HttpError); + nameFunc(ServerError, className); + ServerError.prototype.status = code; + ServerError.prototype.statusCode = code; + ServerError.prototype.expose = false; + return ServerError; + } + function nameFunc(func, name) { + var desc = Object.getOwnPropertyDescriptor(func, "name"); + if (desc && desc.configurable) { + desc.value = name; + Object.defineProperty(func, "name", desc); + } + } + function populateConstructorExports(exports3, codes, HttpError) { + codes.forEach(function forEachCode(code) { + var CodeError; + var name = toIdentifier(statuses[code]); + switch (codeClass(code)) { + case 400: + CodeError = createClientErrorConstructor(HttpError, name, code); + break; + case 500: + CodeError = createServerErrorConstructor(HttpError, name, code); + break; + } + if (CodeError) { + exports3[code] = CodeError; + exports3[name] = CodeError; + } + }); + exports3["I'mateapot"] = deprecate2.function(exports3.ImATeapot, `"I'mateapot"; use "ImATeapot" instead`); + } + function toClassName(name) { + return name.substr(-5) !== "Error" ? name + "Error" : name; + } + } +}); + +// node_modules/body-parser/node_modules/ms/index.js +var require_ms = __commonJS({ + "node_modules/body-parser/node_modules/ms/index.js"(exports2, module2) { + var s = 1e3; + var m = s * 60; + var h = m * 60; + var d = h * 24; + var y = d * 365.25; + module2.exports = function(val, options) { + options = options || {}; + var type = typeof val; + if (type === "string" && val.length > 0) { + return parse(val); + } else if (type === "number" && isNaN(val) === false) { + 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 parse(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|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 "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) { + if (ms >= d) { + return Math.round(ms / d) + "d"; + } + if (ms >= h) { + return Math.round(ms / h) + "h"; + } + if (ms >= m) { + return Math.round(ms / m) + "m"; + } + if (ms >= s) { + return Math.round(ms / s) + "s"; + } + return ms + "ms"; + } + function fmtLong(ms) { + return plural(ms, d, "day") || plural(ms, h, "hour") || plural(ms, m, "minute") || plural(ms, s, "second") || ms + " ms"; + } + function plural(ms, n, name) { + if (ms < n) { + return; + } + if (ms < n * 1.5) { + return Math.floor(ms / n) + " " + name; + } + return Math.ceil(ms / n) + " " + name + "s"; + } + } +}); + +// node_modules/body-parser/node_modules/debug/src/debug.js +var require_debug = __commonJS({ + "node_modules/body-parser/node_modules/debug/src/debug.js"(exports2, module2) { + exports2 = module2.exports = createDebug.debug = createDebug["default"] = createDebug; + exports2.coerce = coerce; + exports2.disable = disable; + exports2.enable = enable; + exports2.enabled = enabled; + exports2.humanize = require_ms(); + exports2.names = []; + exports2.skips = []; + exports2.formatters = {}; + var prevTime; + function selectColor(namespace) { + var hash = 0, i; + for (i in namespace) { + hash = (hash << 5) - hash + namespace.charCodeAt(i); + hash |= 0; + } + return exports2.colors[Math.abs(hash) % exports2.colors.length]; + } + function createDebug(namespace) { + function debug() { + if (!debug.enabled) + return; + var self2 = debug; + var curr = +new Date(); + var ms = curr - (prevTime || curr); + self2.diff = ms; + self2.prev = prevTime; + self2.curr = curr; + prevTime = curr; + var args2 = new Array(arguments.length); + for (var i = 0; i < args2.length; i++) { + args2[i] = arguments[i]; + } + args2[0] = exports2.coerce(args2[0]); + if (typeof args2[0] !== "string") { + args2.unshift("%O"); + } + var index = 0; + args2[0] = args2[0].replace(/%([a-zA-Z%])/g, function(match, format) { + if (match === "%%") + return match; + index++; + var formatter = exports2.formatters[format]; + if (typeof formatter === "function") { + var val = args2[index]; + match = formatter.call(self2, val); + args2.splice(index, 1); + index--; + } + return match; + }); + exports2.formatArgs.call(self2, args2); + var logFn = debug.log || exports2.log || console.log.bind(console); + logFn.apply(self2, args2); + } + debug.namespace = namespace; + debug.enabled = exports2.enabled(namespace); + debug.useColors = exports2.useColors(); + debug.color = selectColor(namespace); + if (typeof exports2.init === "function") { + exports2.init(debug); + } + return debug; + } + function enable(namespaces) { + exports2.save(namespaces); + exports2.names = []; + exports2.skips = []; + var split = (typeof namespaces === "string" ? namespaces : "").split(/[\s,]+/); + var len = split.length; + for (var i = 0; i < len; i++) { + if (!split[i]) + continue; + namespaces = split[i].replace(/\*/g, ".*?"); + if (namespaces[0] === "-") { + exports2.skips.push(new RegExp("^" + namespaces.substr(1) + "$")); + } else { + exports2.names.push(new RegExp("^" + namespaces + "$")); + } + } + } + function disable() { + exports2.enable(""); + } + function enabled(name) { + var i, len; + for (i = 0, len = exports2.skips.length; i < len; i++) { + if (exports2.skips[i].test(name)) { + return false; + } + } + for (i = 0, len = exports2.names.length; i < len; i++) { + if (exports2.names[i].test(name)) { + return true; + } + } + return false; + } + function coerce(val) { + if (val instanceof Error) + return val.stack || val.message; + return val; + } + } +}); + +// node_modules/body-parser/node_modules/debug/src/browser.js +var require_browser = __commonJS({ + "node_modules/body-parser/node_modules/debug/src/browser.js"(exports2, module2) { + exports2 = module2.exports = require_debug(); + exports2.log = log2; + exports2.formatArgs = formatArgs; + exports2.save = save; + exports2.load = load; + exports2.useColors = useColors; + exports2.storage = typeof chrome != "undefined" && typeof chrome.storage != "undefined" ? chrome.storage.local : localstorage(); + exports2.colors = [ + "lightseagreen", + "forestgreen", + "goldenrod", + "dodgerblue", + "darkorchid", + "crimson" + ]; + function useColors() { + if (typeof window !== "undefined" && window.process && window.process.type === "renderer") { + return true; + } + return typeof document !== "undefined" && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || typeof window !== "undefined" && window.console && (window.console.firebug || window.console.exception && window.console.table) || typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 || typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/); + } + exports2.formatters.j = function(v) { + try { + return JSON.stringify(v); + } catch (err) { + return "[UnexpectedJSONParseError]: " + err.message; + } + }; + function formatArgs(args2) { + var useColors2 = this.useColors; + args2[0] = (useColors2 ? "%c" : "") + this.namespace + (useColors2 ? " %c" : " ") + args2[0] + (useColors2 ? "%c " : " ") + "+" + exports2.humanize(this.diff); + if (!useColors2) + return; + var c = "color: " + this.color; + args2.splice(1, 0, c, "color: inherit"); + var index = 0; + var lastC = 0; + args2[0].replace(/%[a-zA-Z%]/g, function(match) { + if (match === "%%") + return; + index++; + if (match === "%c") { + lastC = index; + } + }); + args2.splice(lastC, 0, c); + } + function log2() { + return typeof console === "object" && console.log && Function.prototype.apply.call(console.log, console, arguments); + } + function save(namespaces) { + try { + if (namespaces == null) { + exports2.storage.removeItem("debug"); + } else { + exports2.storage.debug = namespaces; + } + } catch (e) { + } + } + function load() { + var r; + try { + r = exports2.storage.debug; + } catch (e) { + } + if (!r && typeof process !== "undefined" && "env" in process) { + r = process.env.DEBUG; + } + return r; + } + exports2.enable(load()); + function localstorage() { + try { + return window.localStorage; + } catch (e) { + } + } + } +}); + +// node_modules/body-parser/node_modules/debug/src/node.js +var require_node = __commonJS({ + "node_modules/body-parser/node_modules/debug/src/node.js"(exports2, module2) { + var tty = require("tty"); + var util = require("util"); + exports2 = module2.exports = require_debug(); + exports2.init = init; + exports2.log = log2; + exports2.formatArgs = formatArgs; + exports2.save = save; + exports2.load = load; + exports2.useColors = useColors; + exports2.colors = [6, 2, 3, 4, 5, 1]; + exports2.inspectOpts = Object.keys(process.env).filter(function(key) { + return /^debug_/i.test(key); + }).reduce(function(obj, key) { + var prop = key.substring(6).toLowerCase().replace(/_([a-z])/g, function(_, k) { + return k.toUpperCase(); + }); + var val = process.env[key]; + if (/^(yes|on|true|enabled)$/i.test(val)) + val = true; + else if (/^(no|off|false|disabled)$/i.test(val)) + val = false; + else if (val === "null") + val = null; + else + val = Number(val); + obj[prop] = val; + return obj; + }, {}); + var fd = parseInt(process.env.DEBUG_FD, 10) || 2; + if (fd !== 1 && fd !== 2) { + util.deprecate(function() { + }, "except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)")(); + } + var stream = fd === 1 ? process.stdout : fd === 2 ? process.stderr : createWritableStdioStream(fd); + function useColors() { + return "colors" in exports2.inspectOpts ? Boolean(exports2.inspectOpts.colors) : tty.isatty(fd); + } + exports2.formatters.o = function(v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts).split("\n").map(function(str) { + return str.trim(); + }).join(" "); + }; + exports2.formatters.O = function(v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts); + }; + function formatArgs(args2) { + var name = this.namespace; + var useColors2 = this.useColors; + if (useColors2) { + var c = this.color; + var prefix = " [3" + c + ";1m" + name + " "; + args2[0] = prefix + args2[0].split("\n").join("\n" + prefix); + args2.push("[3" + c + "m+" + exports2.humanize(this.diff) + ""); + } else { + args2[0] = new Date().toUTCString() + " " + name + " " + args2[0]; + } + } + function log2() { + return stream.write(util.format.apply(util, arguments) + "\n"); + } + function save(namespaces) { + if (namespaces == null) { + delete process.env.DEBUG; + } else { + process.env.DEBUG = namespaces; + } + } + function load() { + return process.env.DEBUG; + } + function createWritableStdioStream(fd2) { + var stream2; + var tty_wrap = process.binding("tty_wrap"); + switch (tty_wrap.guessHandleType(fd2)) { + case "TTY": + stream2 = new tty.WriteStream(fd2); + stream2._type = "tty"; + if (stream2._handle && stream2._handle.unref) { + stream2._handle.unref(); + } + break; + case "FILE": + var fs = require("fs"); + stream2 = new fs.SyncWriteStream(fd2, { autoClose: false }); + stream2._type = "fs"; + break; + case "PIPE": + case "TCP": + var net = require("net"); + stream2 = new net.Socket({ + fd: fd2, + readable: false, + writable: true + }); + stream2.readable = false; + stream2.read = null; + stream2._type = "pipe"; + if (stream2._handle && stream2._handle.unref) { + stream2._handle.unref(); + } + break; + default: + throw new Error("Implement me. Unknown stream file type!"); + } + stream2.fd = fd2; + stream2._isStdio = true; + return stream2; + } + function init(debug) { + debug.inspectOpts = {}; + var keys = Object.keys(exports2.inspectOpts); + for (var i = 0; i < keys.length; i++) { + debug.inspectOpts[keys[i]] = exports2.inspectOpts[keys[i]]; + } + } + exports2.enable(load()); + } +}); + +// node_modules/body-parser/node_modules/debug/src/index.js +var require_src = __commonJS({ + "node_modules/body-parser/node_modules/debug/src/index.js"(exports2, module2) { + if (typeof process !== "undefined" && process.type === "renderer") { + module2.exports = require_browser(); + } else { + module2.exports = require_node(); + } + } +}); + +// node_modules/ee-first/index.js +var require_ee_first = __commonJS({ + "node_modules/ee-first/index.js"(exports2, module2) { + "use strict"; + module2.exports = first; + function first(stuff, done) { + if (!Array.isArray(stuff)) + throw new TypeError("arg must be an array of [ee, events...] arrays"); + var cleanups = []; + for (var i = 0; i < stuff.length; i++) { + var arr = stuff[i]; + if (!Array.isArray(arr) || arr.length < 2) + throw new TypeError("each array member must be [ee, events...]"); + var ee = arr[0]; + for (var j = 1; j < arr.length; j++) { + var event = arr[j]; + var fn2 = listener(event, callback); + ee.on(event, fn2); + cleanups.push({ + ee, + event, + fn: fn2 + }); + } + } + function callback() { + cleanup(); + done.apply(null, arguments); + } + function cleanup() { + var x; + for (var i2 = 0; i2 < cleanups.length; i2++) { + x = cleanups[i2]; + x.ee.removeListener(x.event, x.fn); + } + } + function thunk(fn3) { + done = fn3; + } + thunk.cancel = cleanup; + return thunk; + } + function listener(event, done) { + return function onevent(arg1) { + var args2 = new Array(arguments.length); + var ee = this; + var err = event === "error" ? arg1 : null; + for (var i = 0; i < args2.length; i++) { + args2[i] = arguments[i]; + } + done(err, ee, event, args2); + }; + } + } +}); + +// node_modules/on-finished/index.js +var require_on_finished = __commonJS({ + "node_modules/on-finished/index.js"(exports2, module2) { + "use strict"; + module2.exports = onFinished; + module2.exports.isFinished = isFinished; + var first = require_ee_first(); + var defer = typeof setImmediate === "function" ? setImmediate : function(fn2) { + process.nextTick(fn2.bind.apply(fn2, arguments)); + }; + function onFinished(msg, listener) { + if (isFinished(msg) !== false) { + defer(listener, null, msg); + return msg; + } + attachListener(msg, listener); + return msg; + } + function isFinished(msg) { + var socket = msg.socket; + if (typeof msg.finished === "boolean") { + return Boolean(msg.finished || socket && !socket.writable); + } + if (typeof msg.complete === "boolean") { + return Boolean(msg.upgrade || !socket || !socket.readable || msg.complete && !msg.readable); + } + return void 0; + } + function attachFinishedListener(msg, callback) { + var eeMsg; + var eeSocket; + var finished = false; + function onFinish(error) { + eeMsg.cancel(); + eeSocket.cancel(); + finished = true; + callback(error); + } + eeMsg = eeSocket = first([[msg, "end", "finish"]], onFinish); + function onSocket(socket) { + msg.removeListener("socket", onSocket); + if (finished) + return; + if (eeMsg !== eeSocket) + return; + eeSocket = first([[socket, "error", "close"]], onFinish); + } + if (msg.socket) { + onSocket(msg.socket); + return; + } + msg.on("socket", onSocket); + if (msg.socket === void 0) { + patchAssignSocket(msg, onSocket); + } + } + function attachListener(msg, listener) { + var attached = msg.__onFinished; + if (!attached || !attached.queue) { + attached = msg.__onFinished = createListener(msg); + attachFinishedListener(msg, attached); + } + attached.queue.push(listener); + } + function createListener(msg) { + function listener(err) { + if (msg.__onFinished === listener) + msg.__onFinished = null; + if (!listener.queue) + return; + var queue = listener.queue; + listener.queue = null; + for (var i = 0; i < queue.length; i++) { + queue[i](err, msg); + } + } + listener.queue = []; + return listener; + } + function patchAssignSocket(res, callback) { + var assignSocket = res.assignSocket; + if (typeof assignSocket !== "function") + return; + res.assignSocket = function _assignSocket(socket) { + assignSocket.call(this, socket); + callback(socket); + }; + } + } +}); + +// node_modules/safer-buffer/safer.js +var require_safer = __commonJS({ + "node_modules/safer-buffer/safer.js"(exports2, module2) { + "use strict"; + var buffer = require("buffer"); + var Buffer2 = buffer.Buffer; + var safer = {}; + var key; + for (key in buffer) { + if (!buffer.hasOwnProperty(key)) + continue; + if (key === "SlowBuffer" || key === "Buffer") + continue; + safer[key] = buffer[key]; + } + var Safer = safer.Buffer = {}; + for (key in Buffer2) { + if (!Buffer2.hasOwnProperty(key)) + continue; + if (key === "allocUnsafe" || key === "allocUnsafeSlow") + continue; + Safer[key] = Buffer2[key]; + } + safer.Buffer.prototype = Buffer2.prototype; + if (!Safer.from || Safer.from === Uint8Array.from) { + Safer.from = function(value, encodingOrOffset, length) { + if (typeof value === "number") { + throw new TypeError('The "value" argument must not be of type number. Received type ' + typeof value); + } + if (value && typeof value.length === "undefined") { + throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof value); + } + return Buffer2(value, encodingOrOffset, length); + }; + } + if (!Safer.alloc) { + Safer.alloc = function(size, fill, encoding) { + if (typeof size !== "number") { + throw new TypeError('The "size" argument must be of type number. Received type ' + typeof size); + } + if (size < 0 || size >= 2 * (1 << 30)) { + throw new RangeError('The value "' + size + '" is invalid for option "size"'); + } + var buf = Buffer2(size); + if (!fill || fill.length === 0) { + buf.fill(0); + } else if (typeof encoding === "string") { + buf.fill(fill, encoding); + } else { + buf.fill(fill); + } + return buf; + }; + } + if (!safer.kStringMaxLength) { + try { + safer.kStringMaxLength = process.binding("buffer").kStringMaxLength; + } catch (e) { + } + } + if (!safer.constants) { + safer.constants = { + MAX_LENGTH: safer.kMaxLength + }; + if (safer.kStringMaxLength) { + safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength; + } + } + module2.exports = safer; + } +}); + +// node_modules/iconv-lite/lib/bom-handling.js +var require_bom_handling = __commonJS({ + "node_modules/iconv-lite/lib/bom-handling.js"(exports2) { + "use strict"; + var BOMChar = "\uFEFF"; + exports2.PrependBOM = PrependBOMWrapper; + function PrependBOMWrapper(encoder, options) { + this.encoder = encoder; + this.addBOM = true; + } + PrependBOMWrapper.prototype.write = function(str) { + if (this.addBOM) { + str = BOMChar + str; + this.addBOM = false; + } + return this.encoder.write(str); + }; + PrependBOMWrapper.prototype.end = function() { + return this.encoder.end(); + }; + exports2.StripBOM = StripBOMWrapper; + function StripBOMWrapper(decoder, options) { + this.decoder = decoder; + this.pass = false; + this.options = options || {}; + } + StripBOMWrapper.prototype.write = function(buf) { + var res = this.decoder.write(buf); + if (this.pass || !res) + return res; + if (res[0] === BOMChar) { + res = res.slice(1); + if (typeof this.options.stripBOM === "function") + this.options.stripBOM(); + } + this.pass = true; + return res; + }; + StripBOMWrapper.prototype.end = function() { + return this.decoder.end(); + }; + } +}); + +// node_modules/iconv-lite/encodings/internal.js +var require_internal = __commonJS({ + "node_modules/iconv-lite/encodings/internal.js"(exports2, module2) { + "use strict"; + var Buffer2 = require_safer().Buffer; + module2.exports = { + utf8: { type: "_internal", bomAware: true }, + cesu8: { type: "_internal", bomAware: true }, + unicode11utf8: "utf8", + ucs2: { type: "_internal", bomAware: true }, + utf16le: "ucs2", + binary: { type: "_internal" }, + base64: { type: "_internal" }, + hex: { type: "_internal" }, + _internal: InternalCodec + }; + function InternalCodec(codecOptions, iconv) { + this.enc = codecOptions.encodingName; + this.bomAware = codecOptions.bomAware; + if (this.enc === "base64") + this.encoder = InternalEncoderBase64; + else if (this.enc === "cesu8") { + this.enc = "utf8"; + this.encoder = InternalEncoderCesu8; + if (Buffer2.from("eda0bdedb2a9", "hex").toString() !== "\u{1F4A9}") { + this.decoder = InternalDecoderCesu8; + this.defaultCharUnicode = iconv.defaultCharUnicode; + } + } + } + InternalCodec.prototype.encoder = InternalEncoder; + InternalCodec.prototype.decoder = InternalDecoder; + var StringDecoder = require("string_decoder").StringDecoder; + if (!StringDecoder.prototype.end) + StringDecoder.prototype.end = function() { + }; + function InternalDecoder(options, codec) { + StringDecoder.call(this, codec.enc); + } + InternalDecoder.prototype = StringDecoder.prototype; + function InternalEncoder(options, codec) { + this.enc = codec.enc; + } + InternalEncoder.prototype.write = function(str) { + return Buffer2.from(str, this.enc); + }; + InternalEncoder.prototype.end = function() { + }; + function InternalEncoderBase64(options, codec) { + this.prevStr = ""; + } + InternalEncoderBase64.prototype.write = function(str) { + str = this.prevStr + str; + var completeQuads = str.length - str.length % 4; + this.prevStr = str.slice(completeQuads); + str = str.slice(0, completeQuads); + return Buffer2.from(str, "base64"); + }; + InternalEncoderBase64.prototype.end = function() { + return Buffer2.from(this.prevStr, "base64"); + }; + function InternalEncoderCesu8(options, codec) { + } + InternalEncoderCesu8.prototype.write = function(str) { + var buf = Buffer2.alloc(str.length * 3), bufIdx = 0; + for (var i = 0; i < str.length; i++) { + var charCode = str.charCodeAt(i); + if (charCode < 128) + buf[bufIdx++] = charCode; + else if (charCode < 2048) { + buf[bufIdx++] = 192 + (charCode >>> 6); + buf[bufIdx++] = 128 + (charCode & 63); + } else { + buf[bufIdx++] = 224 + (charCode >>> 12); + buf[bufIdx++] = 128 + (charCode >>> 6 & 63); + buf[bufIdx++] = 128 + (charCode & 63); + } + } + return buf.slice(0, bufIdx); + }; + InternalEncoderCesu8.prototype.end = function() { + }; + function InternalDecoderCesu8(options, codec) { + this.acc = 0; + this.contBytes = 0; + this.accBytes = 0; + this.defaultCharUnicode = codec.defaultCharUnicode; + } + InternalDecoderCesu8.prototype.write = function(buf) { + var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes, res = ""; + for (var i = 0; i < buf.length; i++) { + var curByte = buf[i]; + if ((curByte & 192) !== 128) { + if (contBytes > 0) { + res += this.defaultCharUnicode; + contBytes = 0; + } + if (curByte < 128) { + res += String.fromCharCode(curByte); + } else if (curByte < 224) { + acc = curByte & 31; + contBytes = 1; + accBytes = 1; + } else if (curByte < 240) { + acc = curByte & 15; + contBytes = 2; + accBytes = 1; + } else { + res += this.defaultCharUnicode; + } + } else { + if (contBytes > 0) { + acc = acc << 6 | curByte & 63; + contBytes--; + accBytes++; + if (contBytes === 0) { + if (accBytes === 2 && acc < 128 && acc > 0) + res += this.defaultCharUnicode; + else if (accBytes === 3 && acc < 2048) + res += this.defaultCharUnicode; + else + res += String.fromCharCode(acc); + } + } else { + res += this.defaultCharUnicode; + } + } + } + this.acc = acc; + this.contBytes = contBytes; + this.accBytes = accBytes; + return res; + }; + InternalDecoderCesu8.prototype.end = function() { + var res = 0; + if (this.contBytes > 0) + res += this.defaultCharUnicode; + return res; + }; + } +}); + +// node_modules/iconv-lite/encodings/utf16.js +var require_utf16 = __commonJS({ + "node_modules/iconv-lite/encodings/utf16.js"(exports2) { + "use strict"; + var Buffer2 = require_safer().Buffer; + exports2.utf16be = Utf16BECodec; + function Utf16BECodec() { + } + Utf16BECodec.prototype.encoder = Utf16BEEncoder; + Utf16BECodec.prototype.decoder = Utf16BEDecoder; + Utf16BECodec.prototype.bomAware = true; + function Utf16BEEncoder() { + } + Utf16BEEncoder.prototype.write = function(str) { + var buf = Buffer2.from(str, "ucs2"); + for (var i = 0; i < buf.length; i += 2) { + var tmp = buf[i]; + buf[i] = buf[i + 1]; + buf[i + 1] = tmp; + } + return buf; + }; + Utf16BEEncoder.prototype.end = function() { + }; + function Utf16BEDecoder() { + this.overflowByte = -1; + } + Utf16BEDecoder.prototype.write = function(buf) { + if (buf.length == 0) + return ""; + var buf2 = Buffer2.alloc(buf.length + 1), i = 0, j = 0; + if (this.overflowByte !== -1) { + buf2[0] = buf[0]; + buf2[1] = this.overflowByte; + i = 1; + j = 2; + } + for (; i < buf.length - 1; i += 2, j += 2) { + buf2[j] = buf[i + 1]; + buf2[j + 1] = buf[i]; + } + this.overflowByte = i == buf.length - 1 ? buf[buf.length - 1] : -1; + return buf2.slice(0, j).toString("ucs2"); + }; + Utf16BEDecoder.prototype.end = function() { + }; + exports2.utf16 = Utf16Codec; + function Utf16Codec(codecOptions, iconv) { + this.iconv = iconv; + } + Utf16Codec.prototype.encoder = Utf16Encoder; + Utf16Codec.prototype.decoder = Utf16Decoder; + function Utf16Encoder(options, codec) { + options = options || {}; + if (options.addBOM === void 0) + options.addBOM = true; + this.encoder = codec.iconv.getEncoder("utf-16le", options); + } + Utf16Encoder.prototype.write = function(str) { + return this.encoder.write(str); + }; + Utf16Encoder.prototype.end = function() { + return this.encoder.end(); + }; + function Utf16Decoder(options, codec) { + this.decoder = null; + this.initialBytes = []; + this.initialBytesLen = 0; + this.options = options || {}; + this.iconv = codec.iconv; + } + Utf16Decoder.prototype.write = function(buf) { + if (!this.decoder) { + this.initialBytes.push(buf); + this.initialBytesLen += buf.length; + if (this.initialBytesLen < 16) + return ""; + var buf = Buffer2.concat(this.initialBytes), encoding = detectEncoding(buf, this.options.defaultEncoding); + this.decoder = this.iconv.getDecoder(encoding, this.options); + this.initialBytes.length = this.initialBytesLen = 0; + } + return this.decoder.write(buf); + }; + Utf16Decoder.prototype.end = function() { + if (!this.decoder) { + var buf = Buffer2.concat(this.initialBytes), encoding = detectEncoding(buf, this.options.defaultEncoding); + this.decoder = this.iconv.getDecoder(encoding, this.options); + var res = this.decoder.write(buf), trail = this.decoder.end(); + return trail ? res + trail : res; + } + return this.decoder.end(); + }; + function detectEncoding(buf, defaultEncoding) { + var enc = defaultEncoding || "utf-16le"; + if (buf.length >= 2) { + if (buf[0] == 254 && buf[1] == 255) + enc = "utf-16be"; + else if (buf[0] == 255 && buf[1] == 254) + enc = "utf-16le"; + else { + var asciiCharsLE = 0, asciiCharsBE = 0, _len = Math.min(buf.length - buf.length % 2, 64); + for (var i = 0; i < _len; i += 2) { + if (buf[i] === 0 && buf[i + 1] !== 0) + asciiCharsBE++; + if (buf[i] !== 0 && buf[i + 1] === 0) + asciiCharsLE++; + } + if (asciiCharsBE > asciiCharsLE) + enc = "utf-16be"; + else if (asciiCharsBE < asciiCharsLE) + enc = "utf-16le"; + } + } + return enc; + } + } +}); + +// node_modules/iconv-lite/encodings/utf7.js +var require_utf7 = __commonJS({ + "node_modules/iconv-lite/encodings/utf7.js"(exports2) { + "use strict"; + var Buffer2 = require_safer().Buffer; + exports2.utf7 = Utf7Codec; + exports2.unicode11utf7 = "utf7"; + function Utf7Codec(codecOptions, iconv) { + this.iconv = iconv; + } + Utf7Codec.prototype.encoder = Utf7Encoder; + Utf7Codec.prototype.decoder = Utf7Decoder; + Utf7Codec.prototype.bomAware = true; + var nonDirectChars = /[^A-Za-z0-9'\(\),-\.\/:\? \n\r\t]+/g; + function Utf7Encoder(options, codec) { + this.iconv = codec.iconv; + } + Utf7Encoder.prototype.write = function(str) { + return Buffer2.from(str.replace(nonDirectChars, function(chunk) { + return "+" + (chunk === "+" ? "" : this.iconv.encode(chunk, "utf16-be").toString("base64").replace(/=+$/, "")) + "-"; + }.bind(this))); + }; + Utf7Encoder.prototype.end = function() { + }; + function Utf7Decoder(options, codec) { + this.iconv = codec.iconv; + this.inBase64 = false; + this.base64Accum = ""; + } + var base64Regex = /[A-Za-z0-9\/+]/; + var base64Chars = []; + for (i = 0; i < 256; i++) + base64Chars[i] = base64Regex.test(String.fromCharCode(i)); + var i; + var plusChar = "+".charCodeAt(0); + var minusChar = "-".charCodeAt(0); + var andChar = "&".charCodeAt(0); + Utf7Decoder.prototype.write = function(buf) { + var res = "", lastI = 0, inBase64 = this.inBase64, base64Accum = this.base64Accum; + for (var i2 = 0; i2 < buf.length; i2++) { + if (!inBase64) { + if (buf[i2] == plusChar) { + res += this.iconv.decode(buf.slice(lastI, i2), "ascii"); + lastI = i2 + 1; + inBase64 = true; + } + } else { + if (!base64Chars[buf[i2]]) { + if (i2 == lastI && buf[i2] == minusChar) { + res += "+"; + } else { + var b64str = base64Accum + buf.slice(lastI, i2).toString(); + res += this.iconv.decode(Buffer2.from(b64str, "base64"), "utf16-be"); + } + if (buf[i2] != minusChar) + i2--; + lastI = i2 + 1; + inBase64 = false; + base64Accum = ""; + } + } + } + if (!inBase64) { + res += this.iconv.decode(buf.slice(lastI), "ascii"); + } else { + var b64str = base64Accum + buf.slice(lastI).toString(); + var canBeDecoded = b64str.length - b64str.length % 8; + base64Accum = b64str.slice(canBeDecoded); + b64str = b64str.slice(0, canBeDecoded); + res += this.iconv.decode(Buffer2.from(b64str, "base64"), "utf16-be"); + } + this.inBase64 = inBase64; + this.base64Accum = base64Accum; + return res; + }; + Utf7Decoder.prototype.end = function() { + var res = ""; + if (this.inBase64 && this.base64Accum.length > 0) + res = this.iconv.decode(Buffer2.from(this.base64Accum, "base64"), "utf16-be"); + this.inBase64 = false; + this.base64Accum = ""; + return res; + }; + exports2.utf7imap = Utf7IMAPCodec; + function Utf7IMAPCodec(codecOptions, iconv) { + this.iconv = iconv; + } + Utf7IMAPCodec.prototype.encoder = Utf7IMAPEncoder; + Utf7IMAPCodec.prototype.decoder = Utf7IMAPDecoder; + Utf7IMAPCodec.prototype.bomAware = true; + function Utf7IMAPEncoder(options, codec) { + this.iconv = codec.iconv; + this.inBase64 = false; + this.base64Accum = Buffer2.alloc(6); + this.base64AccumIdx = 0; + } + Utf7IMAPEncoder.prototype.write = function(str) { + var inBase64 = this.inBase64, base64Accum = this.base64Accum, base64AccumIdx = this.base64AccumIdx, buf = Buffer2.alloc(str.length * 5 + 10), bufIdx = 0; + for (var i2 = 0; i2 < str.length; i2++) { + var uChar = str.charCodeAt(i2); + if (32 <= uChar && uChar <= 126) { + if (inBase64) { + if (base64AccumIdx > 0) { + bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString("base64").replace(/\//g, ",").replace(/=+$/, ""), bufIdx); + base64AccumIdx = 0; + } + buf[bufIdx++] = minusChar; + inBase64 = false; + } + if (!inBase64) { + buf[bufIdx++] = uChar; + if (uChar === andChar) + buf[bufIdx++] = minusChar; + } + } else { + if (!inBase64) { + buf[bufIdx++] = andChar; + inBase64 = true; + } + if (inBase64) { + base64Accum[base64AccumIdx++] = uChar >> 8; + base64Accum[base64AccumIdx++] = uChar & 255; + if (base64AccumIdx == base64Accum.length) { + bufIdx += buf.write(base64Accum.toString("base64").replace(/\//g, ","), bufIdx); + base64AccumIdx = 0; + } + } + } + } + this.inBase64 = inBase64; + this.base64AccumIdx = base64AccumIdx; + return buf.slice(0, bufIdx); + }; + Utf7IMAPEncoder.prototype.end = function() { + var buf = Buffer2.alloc(10), bufIdx = 0; + if (this.inBase64) { + if (this.base64AccumIdx > 0) { + bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString("base64").replace(/\//g, ",").replace(/=+$/, ""), bufIdx); + this.base64AccumIdx = 0; + } + buf[bufIdx++] = minusChar; + this.inBase64 = false; + } + return buf.slice(0, bufIdx); + }; + function Utf7IMAPDecoder(options, codec) { + this.iconv = codec.iconv; + this.inBase64 = false; + this.base64Accum = ""; + } + var base64IMAPChars = base64Chars.slice(); + base64IMAPChars[",".charCodeAt(0)] = true; + Utf7IMAPDecoder.prototype.write = function(buf) { + var res = "", lastI = 0, inBase64 = this.inBase64, base64Accum = this.base64Accum; + for (var i2 = 0; i2 < buf.length; i2++) { + if (!inBase64) { + if (buf[i2] == andChar) { + res += this.iconv.decode(buf.slice(lastI, i2), "ascii"); + lastI = i2 + 1; + inBase64 = true; + } + } else { + if (!base64IMAPChars[buf[i2]]) { + if (i2 == lastI && buf[i2] == minusChar) { + res += "&"; + } else { + var b64str = base64Accum + buf.slice(lastI, i2).toString().replace(/,/g, "/"); + res += this.iconv.decode(Buffer2.from(b64str, "base64"), "utf16-be"); + } + if (buf[i2] != minusChar) + i2--; + lastI = i2 + 1; + inBase64 = false; + base64Accum = ""; + } + } + } + if (!inBase64) { + res += this.iconv.decode(buf.slice(lastI), "ascii"); + } else { + var b64str = base64Accum + buf.slice(lastI).toString().replace(/,/g, "/"); + var canBeDecoded = b64str.length - b64str.length % 8; + base64Accum = b64str.slice(canBeDecoded); + b64str = b64str.slice(0, canBeDecoded); + res += this.iconv.decode(Buffer2.from(b64str, "base64"), "utf16-be"); + } + this.inBase64 = inBase64; + this.base64Accum = base64Accum; + return res; + }; + Utf7IMAPDecoder.prototype.end = function() { + var res = ""; + if (this.inBase64 && this.base64Accum.length > 0) + res = this.iconv.decode(Buffer2.from(this.base64Accum, "base64"), "utf16-be"); + this.inBase64 = false; + this.base64Accum = ""; + return res; + }; + } +}); + +// node_modules/iconv-lite/encodings/sbcs-codec.js +var require_sbcs_codec = __commonJS({ + "node_modules/iconv-lite/encodings/sbcs-codec.js"(exports2) { + "use strict"; + var Buffer2 = require_safer().Buffer; + exports2._sbcs = SBCSCodec; + function SBCSCodec(codecOptions, iconv) { + if (!codecOptions) + throw new Error("SBCS codec is called without the data."); + if (!codecOptions.chars || codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256) + throw new Error("Encoding '" + codecOptions.type + "' has incorrect 'chars' (must be of len 128 or 256)"); + if (codecOptions.chars.length === 128) { + var asciiString = ""; + for (var i = 0; i < 128; i++) + asciiString += String.fromCharCode(i); + codecOptions.chars = asciiString + codecOptions.chars; + } + this.decodeBuf = Buffer2.from(codecOptions.chars, "ucs2"); + var encodeBuf = Buffer2.alloc(65536, iconv.defaultCharSingleByte.charCodeAt(0)); + for (var i = 0; i < codecOptions.chars.length; i++) + encodeBuf[codecOptions.chars.charCodeAt(i)] = i; + this.encodeBuf = encodeBuf; + } + SBCSCodec.prototype.encoder = SBCSEncoder; + SBCSCodec.prototype.decoder = SBCSDecoder; + function SBCSEncoder(options, codec) { + this.encodeBuf = codec.encodeBuf; + } + SBCSEncoder.prototype.write = function(str) { + var buf = Buffer2.alloc(str.length); + for (var i = 0; i < str.length; i++) + buf[i] = this.encodeBuf[str.charCodeAt(i)]; + return buf; + }; + SBCSEncoder.prototype.end = function() { + }; + function SBCSDecoder(options, codec) { + this.decodeBuf = codec.decodeBuf; + } + SBCSDecoder.prototype.write = function(buf) { + var decodeBuf = this.decodeBuf; + var newBuf = Buffer2.alloc(buf.length * 2); + var idx1 = 0, idx2 = 0; + for (var i = 0; i < buf.length; i++) { + idx1 = buf[i] * 2; + idx2 = i * 2; + newBuf[idx2] = decodeBuf[idx1]; + newBuf[idx2 + 1] = decodeBuf[idx1 + 1]; + } + return newBuf.toString("ucs2"); + }; + SBCSDecoder.prototype.end = function() { + }; + } +}); + +// node_modules/iconv-lite/encodings/sbcs-data.js +var require_sbcs_data = __commonJS({ + "node_modules/iconv-lite/encodings/sbcs-data.js"(exports2, module2) { + "use strict"; + module2.exports = { + "10029": "maccenteuro", + "maccenteuro": { + "type": "_sbcs", + "chars": "\xC4\u0100\u0101\xC9\u0104\xD6\xDC\xE1\u0105\u010C\xE4\u010D\u0106\u0107\xE9\u0179\u017A\u010E\xED\u010F\u0112\u0113\u0116\xF3\u0117\xF4\xF6\xF5\xFA\u011A\u011B\xFC\u2020\xB0\u0118\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\u0119\xA8\u2260\u0123\u012E\u012F\u012A\u2264\u2265\u012B\u0136\u2202\u2211\u0142\u013B\u013C\u013D\u013E\u0139\u013A\u0145\u0146\u0143\xAC\u221A\u0144\u0147\u2206\xAB\xBB\u2026\xA0\u0148\u0150\xD5\u0151\u014C\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\u014D\u0154\u0155\u0158\u2039\u203A\u0159\u0156\u0157\u0160\u201A\u201E\u0161\u015A\u015B\xC1\u0164\u0165\xCD\u017D\u017E\u016A\xD3\xD4\u016B\u016E\xDA\u016F\u0170\u0171\u0172\u0173\xDD\xFD\u0137\u017B\u0141\u017C\u0122\u02C7" + }, + "808": "cp808", + "ibm808": "cp808", + "cp808": { + "type": "_sbcs", + "chars": "\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0404\u0454\u0407\u0457\u040E\u045E\xB0\u2219\xB7\u221A\u2116\u20AC\u25A0\xA0" + }, + "mik": { + "type": "_sbcs", + "chars": "\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2514\u2534\u252C\u251C\u2500\u253C\u2563\u2551\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2510\u2591\u2592\u2593\u2502\u2524\u2116\xA7\u2557\u255D\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0" + }, + "ascii8bit": "ascii", + "usascii": "ascii", + "ansix34": "ascii", + "ansix341968": "ascii", + "ansix341986": "ascii", + "csascii": "ascii", + "cp367": "ascii", + "ibm367": "ascii", + "isoir6": "ascii", + "iso646us": "ascii", + "iso646irv": "ascii", + "us": "ascii", + "latin1": "iso88591", + "latin2": "iso88592", + "latin3": "iso88593", + "latin4": "iso88594", + "latin5": "iso88599", + "latin6": "iso885910", + "latin7": "iso885913", + "latin8": "iso885914", + "latin9": "iso885915", + "latin10": "iso885916", + "csisolatin1": "iso88591", + "csisolatin2": "iso88592", + "csisolatin3": "iso88593", + "csisolatin4": "iso88594", + "csisolatincyrillic": "iso88595", + "csisolatinarabic": "iso88596", + "csisolatingreek": "iso88597", + "csisolatinhebrew": "iso88598", + "csisolatin5": "iso88599", + "csisolatin6": "iso885910", + "l1": "iso88591", + "l2": "iso88592", + "l3": "iso88593", + "l4": "iso88594", + "l5": "iso88599", + "l6": "iso885910", + "l7": "iso885913", + "l8": "iso885914", + "l9": "iso885915", + "l10": "iso885916", + "isoir14": "iso646jp", + "isoir57": "iso646cn", + "isoir100": "iso88591", + "isoir101": "iso88592", + "isoir109": "iso88593", + "isoir110": "iso88594", + "isoir144": "iso88595", + "isoir127": "iso88596", + "isoir126": "iso88597", + "isoir138": "iso88598", + "isoir148": "iso88599", + "isoir157": "iso885910", + "isoir166": "tis620", + "isoir179": "iso885913", + "isoir199": "iso885914", + "isoir203": "iso885915", + "isoir226": "iso885916", + "cp819": "iso88591", + "ibm819": "iso88591", + "cyrillic": "iso88595", + "arabic": "iso88596", + "arabic8": "iso88596", + "ecma114": "iso88596", + "asmo708": "iso88596", + "greek": "iso88597", + "greek8": "iso88597", + "ecma118": "iso88597", + "elot928": "iso88597", + "hebrew": "iso88598", + "hebrew8": "iso88598", + "turkish": "iso88599", + "turkish8": "iso88599", + "thai": "iso885911", + "thai8": "iso885911", + "celtic": "iso885914", + "celtic8": "iso885914", + "isoceltic": "iso885914", + "tis6200": "tis620", + "tis62025291": "tis620", + "tis62025330": "tis620", + "10000": "macroman", + "10006": "macgreek", + "10007": "maccyrillic", + "10079": "maciceland", + "10081": "macturkish", + "cspc8codepage437": "cp437", + "cspc775baltic": "cp775", + "cspc850multilingual": "cp850", + "cspcp852": "cp852", + "cspc862latinhebrew": "cp862", + "cpgr": "cp869", + "msee": "cp1250", + "mscyrl": "cp1251", + "msansi": "cp1252", + "msgreek": "cp1253", + "msturk": "cp1254", + "mshebr": "cp1255", + "msarab": "cp1256", + "winbaltrim": "cp1257", + "cp20866": "koi8r", + "20866": "koi8r", + "ibm878": "koi8r", + "cskoi8r": "koi8r", + "cp21866": "koi8u", + "21866": "koi8u", + "ibm1168": "koi8u", + "strk10482002": "rk1048", + "tcvn5712": "tcvn", + "tcvn57121": "tcvn", + "gb198880": "iso646cn", + "cn": "iso646cn", + "csiso14jisc6220ro": "iso646jp", + "jisc62201969ro": "iso646jp", + "jp": "iso646jp", + "cshproman8": "hproman8", + "r8": "hproman8", + "roman8": "hproman8", + "xroman8": "hproman8", + "ibm1051": "hproman8", + "mac": "macintosh", + "csmacintosh": "macintosh" + }; + } +}); + +// node_modules/iconv-lite/encodings/sbcs-data-generated.js +var require_sbcs_data_generated = __commonJS({ + "node_modules/iconv-lite/encodings/sbcs-data-generated.js"(exports2, module2) { + "use strict"; + module2.exports = { + "437": "cp437", + "737": "cp737", + "775": "cp775", + "850": "cp850", + "852": "cp852", + "855": "cp855", + "856": "cp856", + "857": "cp857", + "858": "cp858", + "860": "cp860", + "861": "cp861", + "862": "cp862", + "863": "cp863", + "864": "cp864", + "865": "cp865", + "866": "cp866", + "869": "cp869", + "874": "windows874", + "922": "cp922", + "1046": "cp1046", + "1124": "cp1124", + "1125": "cp1125", + "1129": "cp1129", + "1133": "cp1133", + "1161": "cp1161", + "1162": "cp1162", + "1163": "cp1163", + "1250": "windows1250", + "1251": "windows1251", + "1252": "windows1252", + "1253": "windows1253", + "1254": "windows1254", + "1255": "windows1255", + "1256": "windows1256", + "1257": "windows1257", + "1258": "windows1258", + "28591": "iso88591", + "28592": "iso88592", + "28593": "iso88593", + "28594": "iso88594", + "28595": "iso88595", + "28596": "iso88596", + "28597": "iso88597", + "28598": "iso88598", + "28599": "iso88599", + "28600": "iso885910", + "28601": "iso885911", + "28603": "iso885913", + "28604": "iso885914", + "28605": "iso885915", + "28606": "iso885916", + "windows874": { + "type": "_sbcs", + "chars": "\u20AC\uFFFD\uFFFD\uFFFD\uFFFD\u2026\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\xA0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD" + }, + "win874": "windows874", + "cp874": "windows874", + "windows1250": { + "type": "_sbcs", + "chars": "\u20AC\uFFFD\u201A\uFFFD\u201E\u2026\u2020\u2021\uFFFD\u2030\u0160\u2039\u015A\u0164\u017D\u0179\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0161\u203A\u015B\u0165\u017E\u017A\xA0\u02C7\u02D8\u0141\xA4\u0104\xA6\xA7\xA8\xA9\u015E\xAB\xAC\xAD\xAE\u017B\xB0\xB1\u02DB\u0142\xB4\xB5\xB6\xB7\xB8\u0105\u015F\xBB\u013D\u02DD\u013E\u017C\u0154\xC1\xC2\u0102\xC4\u0139\u0106\xC7\u010C\xC9\u0118\xCB\u011A\xCD\xCE\u010E\u0110\u0143\u0147\xD3\xD4\u0150\xD6\xD7\u0158\u016E\xDA\u0170\xDC\xDD\u0162\xDF\u0155\xE1\xE2\u0103\xE4\u013A\u0107\xE7\u010D\xE9\u0119\xEB\u011B\xED\xEE\u010F\u0111\u0144\u0148\xF3\xF4\u0151\xF6\xF7\u0159\u016F\xFA\u0171\xFC\xFD\u0163\u02D9" + }, + "win1250": "windows1250", + "cp1250": "windows1250", + "windows1251": { + "type": "_sbcs", + "chars": "\u0402\u0403\u201A\u0453\u201E\u2026\u2020\u2021\u20AC\u2030\u0409\u2039\u040A\u040C\u040B\u040F\u0452\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0459\u203A\u045A\u045C\u045B\u045F\xA0\u040E\u045E\u0408\xA4\u0490\xA6\xA7\u0401\xA9\u0404\xAB\xAC\xAD\xAE\u0407\xB0\xB1\u0406\u0456\u0491\xB5\xB6\xB7\u0451\u2116\u0454\xBB\u0458\u0405\u0455\u0457\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F" + }, + "win1251": "windows1251", + "cp1251": "windows1251", + "windows1252": { + "type": "_sbcs", + "chars": "\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\uFFFD\u017D\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\uFFFD\u017E\u0178\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF" + }, + "win1252": "windows1252", + "cp1252": "windows1252", + "windows1253": { + "type": "_sbcs", + "chars": "\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\uFFFD\u2030\uFFFD\u2039\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\xA0\u0385\u0386\xA3\xA4\xA5\xA6\xA7\xA8\xA9\uFFFD\xAB\xAC\xAD\xAE\u2015\xB0\xB1\xB2\xB3\u0384\xB5\xB6\xB7\u0388\u0389\u038A\xBB\u038C\xBD\u038E\u038F\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\uFFFD\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE\uFFFD" + }, + "win1253": "windows1253", + "cp1253": "windows1253", + "windows1254": { + "type": "_sbcs", + "chars": "\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\uFFFD\uFFFD\u0178\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\u011E\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\u0130\u015E\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\u011F\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\u0131\u015F\xFF" + }, + "win1254": "windows1254", + "cp1254": "windows1254", + "windows1255": { + "type": "_sbcs", + "chars": "\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\uFFFD\u2039\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\xA0\xA1\xA2\xA3\u20AA\xA5\xA6\xA7\xA8\xA9\xD7\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xF7\xBB\xBC\xBD\xBE\xBF\u05B0\u05B1\u05B2\u05B3\u05B4\u05B5\u05B6\u05B7\u05B8\u05B9\u05BA\u05BB\u05BC\u05BD\u05BE\u05BF\u05C0\u05C1\u05C2\u05C3\u05F0\u05F1\u05F2\u05F3\u05F4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\uFFFD\u200E\u200F\uFFFD" + }, + "win1255": "windows1255", + "cp1255": "windows1255", + "windows1256": { + "type": "_sbcs", + "chars": "\u20AC\u067E\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0679\u2039\u0152\u0686\u0698\u0688\u06AF\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u06A9\u2122\u0691\u203A\u0153\u200C\u200D\u06BA\xA0\u060C\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\u06BE\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\u061B\xBB\xBC\xBD\xBE\u061F\u06C1\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\xD7\u0637\u0638\u0639\u063A\u0640\u0641\u0642\u0643\xE0\u0644\xE2\u0645\u0646\u0647\u0648\xE7\xE8\xE9\xEA\xEB\u0649\u064A\xEE\xEF\u064B\u064C\u064D\u064E\xF4\u064F\u0650\xF7\u0651\xF9\u0652\xFB\xFC\u200E\u200F\u06D2" + }, + "win1256": "windows1256", + "cp1256": "windows1256", + "windows1257": { + "type": "_sbcs", + "chars": "\u20AC\uFFFD\u201A\uFFFD\u201E\u2026\u2020\u2021\uFFFD\u2030\uFFFD\u2039\uFFFD\xA8\u02C7\xB8\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\xAF\u02DB\uFFFD\xA0\uFFFD\xA2\xA3\xA4\uFFFD\xA6\xA7\xD8\xA9\u0156\xAB\xAC\xAD\xAE\xC6\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xF8\xB9\u0157\xBB\xBC\xBD\xBE\xE6\u0104\u012E\u0100\u0106\xC4\xC5\u0118\u0112\u010C\xC9\u0179\u0116\u0122\u0136\u012A\u013B\u0160\u0143\u0145\xD3\u014C\xD5\xD6\xD7\u0172\u0141\u015A\u016A\xDC\u017B\u017D\xDF\u0105\u012F\u0101\u0107\xE4\xE5\u0119\u0113\u010D\xE9\u017A\u0117\u0123\u0137\u012B\u013C\u0161\u0144\u0146\xF3\u014D\xF5\xF6\xF7\u0173\u0142\u015B\u016B\xFC\u017C\u017E\u02D9" + }, + "win1257": "windows1257", + "cp1257": "windows1257", + "windows1258": { + "type": "_sbcs", + "chars": "\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\uFFFD\u2039\u0152\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\uFFFD\u203A\u0153\uFFFD\uFFFD\u0178\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\u0102\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\u0300\xCD\xCE\xCF\u0110\xD1\u0309\xD3\xD4\u01A0\xD6\xD7\xD8\xD9\xDA\xDB\xDC\u01AF\u0303\xDF\xE0\xE1\xE2\u0103\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\u0301\xED\xEE\xEF\u0111\xF1\u0323\xF3\xF4\u01A1\xF6\xF7\xF8\xF9\xFA\xFB\xFC\u01B0\u20AB\xFF" + }, + "win1258": "windows1258", + "cp1258": "windows1258", + "iso88591": { + "type": "_sbcs", + "chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF" + }, + "cp28591": "iso88591", + "iso88592": { + "type": "_sbcs", + "chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0104\u02D8\u0141\xA4\u013D\u015A\xA7\xA8\u0160\u015E\u0164\u0179\xAD\u017D\u017B\xB0\u0105\u02DB\u0142\xB4\u013E\u015B\u02C7\xB8\u0161\u015F\u0165\u017A\u02DD\u017E\u017C\u0154\xC1\xC2\u0102\xC4\u0139\u0106\xC7\u010C\xC9\u0118\xCB\u011A\xCD\xCE\u010E\u0110\u0143\u0147\xD3\xD4\u0150\xD6\xD7\u0158\u016E\xDA\u0170\xDC\xDD\u0162\xDF\u0155\xE1\xE2\u0103\xE4\u013A\u0107\xE7\u010D\xE9\u0119\xEB\u011B\xED\xEE\u010F\u0111\u0144\u0148\xF3\xF4\u0151\xF6\xF7\u0159\u016F\xFA\u0171\xFC\xFD\u0163\u02D9" + }, + "cp28592": "iso88592", + "iso88593": { + "type": "_sbcs", + "chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0126\u02D8\xA3\xA4\uFFFD\u0124\xA7\xA8\u0130\u015E\u011E\u0134\xAD\uFFFD\u017B\xB0\u0127\xB2\xB3\xB4\xB5\u0125\xB7\xB8\u0131\u015F\u011F\u0135\xBD\uFFFD\u017C\xC0\xC1\xC2\uFFFD\xC4\u010A\u0108\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\uFFFD\xD1\xD2\xD3\xD4\u0120\xD6\xD7\u011C\xD9\xDA\xDB\xDC\u016C\u015C\xDF\xE0\xE1\xE2\uFFFD\xE4\u010B\u0109\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\uFFFD\xF1\xF2\xF3\xF4\u0121\xF6\xF7\u011D\xF9\xFA\xFB\xFC\u016D\u015D\u02D9" + }, + "cp28593": "iso88593", + "iso88594": { + "type": "_sbcs", + "chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0104\u0138\u0156\xA4\u0128\u013B\xA7\xA8\u0160\u0112\u0122\u0166\xAD\u017D\xAF\xB0\u0105\u02DB\u0157\xB4\u0129\u013C\u02C7\xB8\u0161\u0113\u0123\u0167\u014A\u017E\u014B\u0100\xC1\xC2\xC3\xC4\xC5\xC6\u012E\u010C\xC9\u0118\xCB\u0116\xCD\xCE\u012A\u0110\u0145\u014C\u0136\xD4\xD5\xD6\xD7\xD8\u0172\xDA\xDB\xDC\u0168\u016A\xDF\u0101\xE1\xE2\xE3\xE4\xE5\xE6\u012F\u010D\xE9\u0119\xEB\u0117\xED\xEE\u012B\u0111\u0146\u014D\u0137\xF4\xF5\xF6\xF7\xF8\u0173\xFA\xFB\xFC\u0169\u016B\u02D9" + }, + "cp28594": "iso88594", + "iso88595": { + "type": "_sbcs", + "chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0401\u0402\u0403\u0404\u0405\u0406\u0407\u0408\u0409\u040A\u040B\u040C\xAD\u040E\u040F\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2116\u0451\u0452\u0453\u0454\u0455\u0456\u0457\u0458\u0459\u045A\u045B\u045C\xA7\u045E\u045F" + }, + "cp28595": "iso88595", + "iso88596": { + "type": "_sbcs", + "chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\uFFFD\uFFFD\uFFFD\xA4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u060C\xAD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u061B\uFFFD\uFFFD\uFFFD\u061F\uFFFD\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651\u0652\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" + }, + "cp28596": "iso88596", + "iso88597": { + "type": "_sbcs", + "chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u2018\u2019\xA3\u20AC\u20AF\xA6\xA7\xA8\xA9\u037A\xAB\xAC\xAD\uFFFD\u2015\xB0\xB1\xB2\xB3\u0384\u0385\u0386\xB7\u0388\u0389\u038A\xBB\u038C\xBD\u038E\u038F\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\uFFFD\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE\uFFFD" + }, + "cp28597": "iso88597", + "iso88598": { + "type": "_sbcs", + "chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\uFFFD\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xD7\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xF7\xBB\xBC\xBD\xBE\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2017\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\uFFFD\u200E\u200F\uFFFD" + }, + "cp28598": "iso88598", + "iso88599": { + "type": "_sbcs", + "chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\u011E\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\u0130\u015E\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\u011F\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\u0131\u015F\xFF" + }, + "cp28599": "iso88599", + "iso885910": { + "type": "_sbcs", + "chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0104\u0112\u0122\u012A\u0128\u0136\xA7\u013B\u0110\u0160\u0166\u017D\xAD\u016A\u014A\xB0\u0105\u0113\u0123\u012B\u0129\u0137\xB7\u013C\u0111\u0161\u0167\u017E\u2015\u016B\u014B\u0100\xC1\xC2\xC3\xC4\xC5\xC6\u012E\u010C\xC9\u0118\xCB\u0116\xCD\xCE\xCF\xD0\u0145\u014C\xD3\xD4\xD5\xD6\u0168\xD8\u0172\xDA\xDB\xDC\xDD\xDE\xDF\u0101\xE1\xE2\xE3\xE4\xE5\xE6\u012F\u010D\xE9\u0119\xEB\u0117\xED\xEE\xEF\xF0\u0146\u014D\xF3\xF4\xF5\xF6\u0169\xF8\u0173\xFA\xFB\xFC\xFD\xFE\u0138" + }, + "cp28600": "iso885910", + "iso885911": { + "type": "_sbcs", + "chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD" + }, + "cp28601": "iso885911", + "iso885913": { + "type": "_sbcs", + "chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u201D\xA2\xA3\xA4\u201E\xA6\xA7\xD8\xA9\u0156\xAB\xAC\xAD\xAE\xC6\xB0\xB1\xB2\xB3\u201C\xB5\xB6\xB7\xF8\xB9\u0157\xBB\xBC\xBD\xBE\xE6\u0104\u012E\u0100\u0106\xC4\xC5\u0118\u0112\u010C\xC9\u0179\u0116\u0122\u0136\u012A\u013B\u0160\u0143\u0145\xD3\u014C\xD5\xD6\xD7\u0172\u0141\u015A\u016A\xDC\u017B\u017D\xDF\u0105\u012F\u0101\u0107\xE4\xE5\u0119\u0113\u010D\xE9\u017A\u0117\u0123\u0137\u012B\u013C\u0161\u0144\u0146\xF3\u014D\xF5\xF6\xF7\u0173\u0142\u015B\u016B\xFC\u017C\u017E\u2019" + }, + "cp28603": "iso885913", + "iso885914": { + "type": "_sbcs", + "chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u1E02\u1E03\xA3\u010A\u010B\u1E0A\xA7\u1E80\xA9\u1E82\u1E0B\u1EF2\xAD\xAE\u0178\u1E1E\u1E1F\u0120\u0121\u1E40\u1E41\xB6\u1E56\u1E81\u1E57\u1E83\u1E60\u1EF3\u1E84\u1E85\u1E61\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\u0174\xD1\xD2\xD3\xD4\xD5\xD6\u1E6A\xD8\xD9\xDA\xDB\xDC\xDD\u0176\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\u0175\xF1\xF2\xF3\xF4\xF5\xF6\u1E6B\xF8\xF9\xFA\xFB\xFC\xFD\u0177\xFF" + }, + "cp28604": "iso885914", + "iso885915": { + "type": "_sbcs", + "chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\u20AC\xA5\u0160\xA7\u0161\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\u017D\xB5\xB6\xB7\u017E\xB9\xBA\xBB\u0152\u0153\u0178\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF" + }, + "cp28605": "iso885915", + "iso885916": { + "type": "_sbcs", + "chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0104\u0105\u0141\u20AC\u201E\u0160\xA7\u0161\xA9\u0218\xAB\u0179\xAD\u017A\u017B\xB0\xB1\u010C\u0142\u017D\u201D\xB6\xB7\u017E\u010D\u0219\xBB\u0152\u0153\u0178\u017C\xC0\xC1\xC2\u0102\xC4\u0106\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\u0110\u0143\xD2\xD3\xD4\u0150\xD6\u015A\u0170\xD9\xDA\xDB\xDC\u0118\u021A\xDF\xE0\xE1\xE2\u0103\xE4\u0107\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\u0111\u0144\xF2\xF3\xF4\u0151\xF6\u015B\u0171\xF9\xFA\xFB\xFC\u0119\u021B\xFF" + }, + "cp28606": "iso885916", + "cp437": { + "type": "_sbcs", + "chars": "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xA2\xA3\xA5\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0" + }, + "ibm437": "cp437", + "csibm437": "cp437", + "cp737": { + "type": "_sbcs", + "chars": "\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C2\u03C4\u03C5\u03C6\u03C7\u03C8\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03C9\u03AC\u03AD\u03AE\u03CA\u03AF\u03CC\u03CD\u03CB\u03CE\u0386\u0388\u0389\u038A\u038C\u038E\u038F\xB1\u2265\u2264\u03AA\u03AB\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0" + }, + "ibm737": "cp737", + "csibm737": "cp737", + "cp775": { + "type": "_sbcs", + "chars": "\u0106\xFC\xE9\u0101\xE4\u0123\xE5\u0107\u0142\u0113\u0156\u0157\u012B\u0179\xC4\xC5\xC9\xE6\xC6\u014D\xF6\u0122\xA2\u015A\u015B\xD6\xDC\xF8\xA3\xD8\xD7\xA4\u0100\u012A\xF3\u017B\u017C\u017A\u201D\xA6\xA9\xAE\xAC\xBD\xBC\u0141\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u0104\u010C\u0118\u0116\u2563\u2551\u2557\u255D\u012E\u0160\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0172\u016A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u017D\u0105\u010D\u0119\u0117\u012F\u0161\u0173\u016B\u017E\u2518\u250C\u2588\u2584\u258C\u2590\u2580\xD3\xDF\u014C\u0143\xF5\xD5\xB5\u0144\u0136\u0137\u013B\u013C\u0146\u0112\u0145\u2019\xAD\xB1\u201C\xBE\xB6\xA7\xF7\u201E\xB0\u2219\xB7\xB9\xB3\xB2\u25A0\xA0" + }, + "ibm775": "cp775", + "csibm775": "cp775", + "cp850": { + "type": "_sbcs", + "chars": "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xF8\xA3\xD8\xD7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\xAE\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\xC1\xC2\xC0\xA9\u2563\u2551\u2557\u255D\xA2\xA5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\xE3\xC3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\xF0\xD0\xCA\xCB\xC8\u0131\xCD\xCE\xCF\u2518\u250C\u2588\u2584\xA6\xCC\u2580\xD3\xDF\xD4\xD2\xF5\xD5\xB5\xFE\xDE\xDA\xDB\xD9\xFD\xDD\xAF\xB4\xAD\xB1\u2017\xBE\xB6\xA7\xF7\xB8\xB0\xA8\xB7\xB9\xB3\xB2\u25A0\xA0" + }, + "ibm850": "cp850", + "csibm850": "cp850", + "cp852": { + "type": "_sbcs", + "chars": "\xC7\xFC\xE9\xE2\xE4\u016F\u0107\xE7\u0142\xEB\u0150\u0151\xEE\u0179\xC4\u0106\xC9\u0139\u013A\xF4\xF6\u013D\u013E\u015A\u015B\xD6\xDC\u0164\u0165\u0141\xD7\u010D\xE1\xED\xF3\xFA\u0104\u0105\u017D\u017E\u0118\u0119\xAC\u017A\u010C\u015F\xAB\xBB\u2591\u2592\u2593\u2502\u2524\xC1\xC2\u011A\u015E\u2563\u2551\u2557\u255D\u017B\u017C\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0102\u0103\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\u0111\u0110\u010E\xCB\u010F\u0147\xCD\xCE\u011B\u2518\u250C\u2588\u2584\u0162\u016E\u2580\xD3\xDF\xD4\u0143\u0144\u0148\u0160\u0161\u0154\xDA\u0155\u0170\xFD\xDD\u0163\xB4\xAD\u02DD\u02DB\u02C7\u02D8\xA7\xF7\xB8\xB0\xA8\u02D9\u0171\u0158\u0159\u25A0\xA0" + }, + "ibm852": "cp852", + "csibm852": "cp852", + "cp855": { + "type": "_sbcs", + "chars": "\u0452\u0402\u0453\u0403\u0451\u0401\u0454\u0404\u0455\u0405\u0456\u0406\u0457\u0407\u0458\u0408\u0459\u0409\u045A\u040A\u045B\u040B\u045C\u040C\u045E\u040E\u045F\u040F\u044E\u042E\u044A\u042A\u0430\u0410\u0431\u0411\u0446\u0426\u0434\u0414\u0435\u0415\u0444\u0424\u0433\u0413\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u0445\u0425\u0438\u0418\u2563\u2551\u2557\u255D\u0439\u0419\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u043A\u041A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\u043B\u041B\u043C\u041C\u043D\u041D\u043E\u041E\u043F\u2518\u250C\u2588\u2584\u041F\u044F\u2580\u042F\u0440\u0420\u0441\u0421\u0442\u0422\u0443\u0423\u0436\u0416\u0432\u0412\u044C\u042C\u2116\xAD\u044B\u042B\u0437\u0417\u0448\u0428\u044D\u042D\u0449\u0429\u0447\u0427\xA7\u25A0\xA0" + }, + "ibm855": "cp855", + "csibm855": "cp855", + "cp856": { + "type": "_sbcs", + "chars": "\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\xA3\uFFFD\xD7\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\xAE\xAC\xBD\xBC\uFFFD\xAB\xBB\u2591\u2592\u2593\u2502\u2524\uFFFD\uFFFD\uFFFD\xA9\u2563\u2551\u2557\u255D\xA2\xA5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\uFFFD\uFFFD\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2518\u250C\u2588\u2584\xA6\uFFFD\u2580\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\xB5\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\xAF\xB4\xAD\xB1\u2017\xBE\xB6\xA7\xF7\xB8\xB0\xA8\xB7\xB9\xB3\xB2\u25A0\xA0" + }, + "ibm856": "cp856", + "csibm856": "cp856", + "cp857": { + "type": "_sbcs", + "chars": "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\u0131\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\u0130\xD6\xDC\xF8\xA3\xD8\u015E\u015F\xE1\xED\xF3\xFA\xF1\xD1\u011E\u011F\xBF\xAE\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\xC1\xC2\xC0\xA9\u2563\u2551\u2557\u255D\xA2\xA5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\xE3\xC3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\xBA\xAA\xCA\xCB\xC8\uFFFD\xCD\xCE\xCF\u2518\u250C\u2588\u2584\xA6\xCC\u2580\xD3\xDF\xD4\xD2\xF5\xD5\xB5\uFFFD\xD7\xDA\xDB\xD9\xEC\xFF\xAF\xB4\xAD\xB1\uFFFD\xBE\xB6\xA7\xF7\xB8\xB0\xA8\xB7\xB9\xB3\xB2\u25A0\xA0" + }, + "ibm857": "cp857", + "csibm857": "cp857", + "cp858": { + "type": "_sbcs", + "chars": "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xF8\xA3\xD8\xD7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\xAE\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\xC1\xC2\xC0\xA9\u2563\u2551\u2557\u255D\xA2\xA5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\xE3\xC3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\xF0\xD0\xCA\xCB\xC8\u20AC\xCD\xCE\xCF\u2518\u250C\u2588\u2584\xA6\xCC\u2580\xD3\xDF\xD4\xD2\xF5\xD5\xB5\xFE\xDE\xDA\xDB\xD9\xFD\xDD\xAF\xB4\xAD\xB1\u2017\xBE\xB6\xA7\xF7\xB8\xB0\xA8\xB7\xB9\xB3\xB2\u25A0\xA0" + }, + "ibm858": "cp858", + "csibm858": "cp858", + "cp860": { + "type": "_sbcs", + "chars": "\xC7\xFC\xE9\xE2\xE3\xE0\xC1\xE7\xEA\xCA\xE8\xCD\xD4\xEC\xC3\xC2\xC9\xC0\xC8\xF4\xF5\xF2\xDA\xF9\xCC\xD5\xDC\xA2\xA3\xD9\u20A7\xD3\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\xD2\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0" + }, + "ibm860": "cp860", + "csibm860": "cp860", + "cp861": { + "type": "_sbcs", + "chars": "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xD0\xF0\xDE\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xFE\xFB\xDD\xFD\xD6\xDC\xF8\xA3\xD8\u20A7\u0192\xE1\xED\xF3\xFA\xC1\xCD\xD3\xDA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0" + }, + "ibm861": "cp861", + "csibm861": "cp861", + "cp862": { + "type": "_sbcs", + "chars": "\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\xA2\xA3\xA5\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0" + }, + "ibm862": "cp862", + "csibm862": "cp862", + "cp863": { + "type": "_sbcs", + "chars": "\xC7\xFC\xE9\xE2\xC2\xE0\xB6\xE7\xEA\xEB\xE8\xEF\xEE\u2017\xC0\xA7\xC9\xC8\xCA\xF4\xCB\xCF\xFB\xF9\xA4\xD4\xDC\xA2\xA3\xD9\xDB\u0192\xA6\xB4\xF3\xFA\xA8\xB8\xB3\xAF\xCE\u2310\xAC\xBD\xBC\xBE\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0" + }, + "ibm863": "cp863", + "csibm863": "cp863", + "cp864": { + "type": "_sbcs", + "chars": "\0\x07\b \n\v\f\r !\"#$\u066A&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\xB0\xB7\u2219\u221A\u2592\u2500\u2502\u253C\u2524\u252C\u251C\u2534\u2510\u250C\u2514\u2518\u03B2\u221E\u03C6\xB1\xBD\xBC\u2248\xAB\xBB\uFEF7\uFEF8\uFFFD\uFFFD\uFEFB\uFEFC\uFFFD\xA0\xAD\uFE82\xA3\xA4\uFE84\uFFFD\uFFFD\uFE8E\uFE8F\uFE95\uFE99\u060C\uFE9D\uFEA1\uFEA5\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\uFED1\u061B\uFEB1\uFEB5\uFEB9\u061F\xA2\uFE80\uFE81\uFE83\uFE85\uFECA\uFE8B\uFE8D\uFE91\uFE93\uFE97\uFE9B\uFE9F\uFEA3\uFEA7\uFEA9\uFEAB\uFEAD\uFEAF\uFEB3\uFEB7\uFEBB\uFEBF\uFEC1\uFEC5\uFECB\uFECF\xA6\xAC\xF7\xD7\uFEC9\u0640\uFED3\uFED7\uFEDB\uFEDF\uFEE3\uFEE7\uFEEB\uFEED\uFEEF\uFEF3\uFEBD\uFECC\uFECE\uFECD\uFEE1\uFE7D\u0651\uFEE5\uFEE9\uFEEC\uFEF0\uFEF2\uFED0\uFED5\uFEF5\uFEF6\uFEDD\uFED9\uFEF1\u25A0\uFFFD" + }, + "ibm864": "cp864", + "csibm864": "cp864", + "cp865": { + "type": "_sbcs", + "chars": "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xF8\xA3\xD8\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xA4\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0" + }, + "ibm865": "cp865", + "csibm865": "cp865", + "cp866": { + "type": "_sbcs", + "chars": "\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0404\u0454\u0407\u0457\u040E\u045E\xB0\u2219\xB7\u221A\u2116\xA4\u25A0\xA0" + }, + "ibm866": "cp866", + "csibm866": "cp866", + "cp869": { + "type": "_sbcs", + "chars": "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0386\uFFFD\xB7\xAC\xA6\u2018\u2019\u0388\u2015\u0389\u038A\u03AA\u038C\uFFFD\uFFFD\u038E\u03AB\xA9\u038F\xB2\xB3\u03AC\xA3\u03AD\u03AE\u03AF\u03CA\u0390\u03CC\u03CD\u0391\u0392\u0393\u0394\u0395\u0396\u0397\xBD\u0398\u0399\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u039A\u039B\u039C\u039D\u2563\u2551\u2557\u255D\u039E\u039F\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u03A0\u03A1\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u2518\u250C\u2588\u2584\u03B4\u03B5\u2580\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C2\u03C4\u0384\xAD\xB1\u03C5\u03C6\u03C7\xA7\u03C8\u0385\xB0\xA8\u03C9\u03CB\u03B0\u03CE\u25A0\xA0" + }, + "ibm869": "cp869", + "csibm869": "cp869", + "cp922": { + "type": "_sbcs", + "chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\u203E\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\u0160\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\u017D\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\u0161\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\u017E\xFF" + }, + "ibm922": "cp922", + "csibm922": "cp922", + "cp1046": { + "type": "_sbcs", + "chars": "\uFE88\xD7\xF7\uF8F6\uF8F5\uF8F4\uF8F7\uFE71\x88\u25A0\u2502\u2500\u2510\u250C\u2514\u2518\uFE79\uFE7B\uFE7D\uFE7F\uFE77\uFE8A\uFEF0\uFEF3\uFEF2\uFECE\uFECF\uFED0\uFEF6\uFEF8\uFEFA\uFEFC\xA0\uF8FA\uF8F9\uF8F8\xA4\uF8FB\uFE8B\uFE91\uFE97\uFE9B\uFE9F\uFEA3\u060C\xAD\uFEA7\uFEB3\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\uFEB7\u061B\uFEBB\uFEBF\uFECA\u061F\uFECB\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\uFEC7\u0639\u063A\uFECC\uFE82\uFE84\uFE8E\uFED3\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651\u0652\uFED7\uFEDB\uFEDF\uF8FC\uFEF5\uFEF7\uFEF9\uFEFB\uFEE3\uFEE7\uFEEC\uFEE9\uFFFD" + }, + "ibm1046": "cp1046", + "csibm1046": "cp1046", + "cp1124": { + "type": "_sbcs", + "chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0401\u0402\u0490\u0404\u0405\u0406\u0407\u0408\u0409\u040A\u040B\u040C\xAD\u040E\u040F\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2116\u0451\u0452\u0491\u0454\u0455\u0456\u0457\u0458\u0459\u045A\u045B\u045C\xA7\u045E\u045F" + }, + "ibm1124": "cp1124", + "csibm1124": "cp1124", + "cp1125": { + "type": "_sbcs", + "chars": "\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0490\u0491\u0404\u0454\u0406\u0456\u0407\u0457\xB7\u221A\u2116\xA4\u25A0\xA0" + }, + "ibm1125": "cp1125", + "csibm1125": "cp1125", + "cp1129": { + "type": "_sbcs", + "chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\u0153\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\u0178\xB5\xB6\xB7\u0152\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\u0102\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\u0300\xCD\xCE\xCF\u0110\xD1\u0309\xD3\xD4\u01A0\xD6\xD7\xD8\xD9\xDA\xDB\xDC\u01AF\u0303\xDF\xE0\xE1\xE2\u0103\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\u0301\xED\xEE\xEF\u0111\xF1\u0323\xF3\xF4\u01A1\xF6\xF7\xF8\xF9\xFA\xFB\xFC\u01B0\u20AB\xFF" + }, + "ibm1129": "cp1129", + "csibm1129": "cp1129", + "cp1133": { + "type": "_sbcs", + "chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0E81\u0E82\u0E84\u0E87\u0E88\u0EAA\u0E8A\u0E8D\u0E94\u0E95\u0E96\u0E97\u0E99\u0E9A\u0E9B\u0E9C\u0E9D\u0E9E\u0E9F\u0EA1\u0EA2\u0EA3\u0EA5\u0EA7\u0EAB\u0EAD\u0EAE\uFFFD\uFFFD\uFFFD\u0EAF\u0EB0\u0EB2\u0EB3\u0EB4\u0EB5\u0EB6\u0EB7\u0EB8\u0EB9\u0EBC\u0EB1\u0EBB\u0EBD\uFFFD\uFFFD\uFFFD\u0EC0\u0EC1\u0EC2\u0EC3\u0EC4\u0EC8\u0EC9\u0ECA\u0ECB\u0ECC\u0ECD\u0EC6\uFFFD\u0EDC\u0EDD\u20AD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0ED0\u0ED1\u0ED2\u0ED3\u0ED4\u0ED5\u0ED6\u0ED7\u0ED8\u0ED9\uFFFD\uFFFD\xA2\xAC\xA6\uFFFD" + }, + "ibm1133": "cp1133", + "csibm1133": "cp1133", + "cp1161": { + "type": "_sbcs", + "chars": "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0E48\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\u0E49\u0E4A\u0E4B\u20AC\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\xA2\xAC\xA6\xA0" + }, + "ibm1161": "cp1161", + "csibm1161": "cp1161", + "cp1162": { + "type": "_sbcs", + "chars": "\u20AC\x81\x82\x83\x84\u2026\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\u2018\u2019\u201C\u201D\u2022\u2013\u2014\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD" + }, + "ibm1162": "cp1162", + "csibm1162": "cp1162", + "cp1163": { + "type": "_sbcs", + "chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\u20AC\xA5\xA6\xA7\u0153\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\u0178\xB5\xB6\xB7\u0152\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\u0102\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\u0300\xCD\xCE\xCF\u0110\xD1\u0309\xD3\xD4\u01A0\xD6\xD7\xD8\xD9\xDA\xDB\xDC\u01AF\u0303\xDF\xE0\xE1\xE2\u0103\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\u0301\xED\xEE\xEF\u0111\xF1\u0323\xF3\xF4\u01A1\xF6\xF7\xF8\xF9\xFA\xFB\xFC\u01B0\u20AB\xFF" + }, + "ibm1163": "cp1163", + "csibm1163": "cp1163", + "maccroatian": { + "type": "_sbcs", + "chars": "\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\u0160\u2122\xB4\xA8\u2260\u017D\xD8\u221E\xB1\u2264\u2265\u2206\xB5\u2202\u2211\u220F\u0161\u222B\xAA\xBA\u2126\u017E\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u0106\xAB\u010C\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u0110\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\uFFFD\xA9\u2044\xA4\u2039\u203A\xC6\xBB\u2013\xB7\u201A\u201E\u2030\xC2\u0107\xC1\u010D\xC8\xCD\xCE\xCF\xCC\xD3\xD4\u0111\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u03C0\xCB\u02DA\xB8\xCA\xE6\u02C7" + }, + "maccyrillic": { + "type": "_sbcs", + "chars": "\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u2020\xB0\xA2\xA3\xA7\u2022\xB6\u0406\xAE\xA9\u2122\u0402\u0452\u2260\u0403\u0453\u221E\xB1\u2264\u2265\u0456\xB5\u2202\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040A\u045A\u0458\u0405\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\u040B\u045B\u040C\u045C\u0455\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u201E\u040E\u045E\u040F\u045F\u2116\u0401\u0451\u044F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\xA4" + }, + "macgreek": { + "type": "_sbcs", + "chars": "\xC4\xB9\xB2\xC9\xB3\xD6\xDC\u0385\xE0\xE2\xE4\u0384\xA8\xE7\xE9\xE8\xEA\xEB\xA3\u2122\xEE\xEF\u2022\xBD\u2030\xF4\xF6\xA6\xAD\xF9\xFB\xFC\u2020\u0393\u0394\u0398\u039B\u039E\u03A0\xDF\xAE\xA9\u03A3\u03AA\xA7\u2260\xB0\u0387\u0391\xB1\u2264\u2265\xA5\u0392\u0395\u0396\u0397\u0399\u039A\u039C\u03A6\u03AB\u03A8\u03A9\u03AC\u039D\xAC\u039F\u03A1\u2248\u03A4\xAB\xBB\u2026\xA0\u03A5\u03A7\u0386\u0388\u0153\u2013\u2015\u201C\u201D\u2018\u2019\xF7\u0389\u038A\u038C\u038E\u03AD\u03AE\u03AF\u03CC\u038F\u03CD\u03B1\u03B2\u03C8\u03B4\u03B5\u03C6\u03B3\u03B7\u03B9\u03BE\u03BA\u03BB\u03BC\u03BD\u03BF\u03C0\u03CE\u03C1\u03C3\u03C4\u03B8\u03C9\u03C2\u03C7\u03C5\u03B6\u03CA\u03CB\u0390\u03B0\uFFFD" + }, + "maciceland": { + "type": "_sbcs", + "chars": "\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\xDD\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u2126\xE6\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u2044\xA4\xD0\xF0\xDE\xFE\xFD\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uFFFD\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7" + }, + "macroman": { + "type": "_sbcs", + "chars": "\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u2126\xE6\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u2044\xA4\u2039\u203A\uFB01\uFB02\u2021\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uFFFD\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7" + }, + "macromania": { + "type": "_sbcs", + "chars": "\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\u0102\u015E\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u2126\u0103\u015F\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u2044\xA4\u2039\u203A\u0162\u0163\u2021\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uFFFD\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7" + }, + "macthai": { + "type": "_sbcs", + "chars": "\xAB\xBB\u2026\uF88C\uF88F\uF892\uF895\uF898\uF88B\uF88E\uF891\uF894\uF897\u201C\u201D\uF899\uFFFD\u2022\uF884\uF889\uF885\uF886\uF887\uF888\uF88A\uF88D\uF890\uF893\uF896\u2018\u2019\uFFFD\xA0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFEFF\u200B\u2013\u2014\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u2122\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\xAE\xA9\uFFFD\uFFFD\uFFFD\uFFFD" + }, + "macturkish": { + "type": "_sbcs", + "chars": "\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u2126\xE6\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u011E\u011F\u0130\u0131\u015E\u015F\u2021\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uFFFD\xD2\xDA\xDB\xD9\uFFFD\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7" + }, + "macukraine": { + "type": "_sbcs", + "chars": "\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u2020\xB0\u0490\xA3\xA7\u2022\xB6\u0406\xAE\xA9\u2122\u0402\u0452\u2260\u0403\u0453\u221E\xB1\u2264\u2265\u0456\xB5\u0491\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040A\u045A\u0458\u0405\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\u040B\u045B\u040C\u045C\u0455\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u201E\u040E\u045E\u040F\u045F\u2116\u0401\u0451\u044F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\xA4" + }, + "koi8r": { + "type": "_sbcs", + "chars": "\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\xA0\u2321\xB0\xB2\xB7\xF7\u2550\u2551\u2552\u0451\u2553\u2554\u2555\u2556\u2557\u2558\u2559\u255A\u255B\u255C\u255D\u255E\u255F\u2560\u2561\u0401\u2562\u2563\u2564\u2565\u2566\u2567\u2568\u2569\u256A\u256B\u256C\xA9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A" + }, + "koi8u": { + "type": "_sbcs", + "chars": "\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\xA0\u2321\xB0\xB2\xB7\xF7\u2550\u2551\u2552\u0451\u0454\u2554\u0456\u0457\u2557\u2558\u2559\u255A\u255B\u0491\u255D\u255E\u255F\u2560\u2561\u0401\u0404\u2563\u0406\u0407\u2566\u2567\u2568\u2569\u256A\u0490\u256C\xA9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A" + }, + "koi8ru": { + "type": "_sbcs", + "chars": "\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\xA0\u2321\xB0\xB2\xB7\xF7\u2550\u2551\u2552\u0451\u0454\u2554\u0456\u0457\u2557\u2558\u2559\u255A\u255B\u0491\u045E\u255E\u255F\u2560\u2561\u0401\u0404\u2563\u0406\u0407\u2566\u2567\u2568\u2569\u256A\u0490\u040E\xA9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A" + }, + "koi8t": { + "type": "_sbcs", + "chars": "\u049B\u0493\u201A\u0492\u201E\u2026\u2020\u2021\uFFFD\u2030\u04B3\u2039\u04B2\u04B7\u04B6\uFFFD\u049A\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u04EF\u04EE\u0451\xA4\u04E3\xA6\xA7\uFFFD\uFFFD\uFFFD\xAB\xAC\xAD\xAE\uFFFD\xB0\xB1\xB2\u0401\uFFFD\u04E2\xB6\xB7\uFFFD\u2116\uFFFD\xBB\uFFFD\uFFFD\uFFFD\xA9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A" + }, + "armscii8": { + "type": "_sbcs", + "chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\uFFFD\u0587\u0589)(\xBB\xAB\u2014.\u055D,-\u058A\u2026\u055C\u055B\u055E\u0531\u0561\u0532\u0562\u0533\u0563\u0534\u0564\u0535\u0565\u0536\u0566\u0537\u0567\u0538\u0568\u0539\u0569\u053A\u056A\u053B\u056B\u053C\u056C\u053D\u056D\u053E\u056E\u053F\u056F\u0540\u0570\u0541\u0571\u0542\u0572\u0543\u0573\u0544\u0574\u0545\u0575\u0546\u0576\u0547\u0577\u0548\u0578\u0549\u0579\u054A\u057A\u054B\u057B\u054C\u057C\u054D\u057D\u054E\u057E\u054F\u057F\u0550\u0580\u0551\u0581\u0552\u0582\u0553\u0583\u0554\u0584\u0555\u0585\u0556\u0586\u055A\uFFFD" + }, + "rk1048": { + "type": "_sbcs", + "chars": "\u0402\u0403\u201A\u0453\u201E\u2026\u2020\u2021\u20AC\u2030\u0409\u2039\u040A\u049A\u04BA\u040F\u0452\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0459\u203A\u045A\u049B\u04BB\u045F\xA0\u04B0\u04B1\u04D8\xA4\u04E8\xA6\xA7\u0401\xA9\u0492\xAB\xAC\xAD\xAE\u04AE\xB0\xB1\u0406\u0456\u04E9\xB5\xB6\xB7\u0451\u2116\u0493\xBB\u04D9\u04A2\u04A3\u04AF\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F" + }, + "tcvn": { + "type": "_sbcs", + "chars": "\0\xDA\u1EE4\u1EEA\u1EEC\u1EEE\x07\b \n\v\f\r\u1EE8\u1EF0\u1EF2\u1EF6\u1EF8\xDD\u1EF4 !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\xC0\u1EA2\xC3\xC1\u1EA0\u1EB6\u1EAC\xC8\u1EBA\u1EBC\xC9\u1EB8\u1EC6\xCC\u1EC8\u0128\xCD\u1ECA\xD2\u1ECE\xD5\xD3\u1ECC\u1ED8\u1EDC\u1EDE\u1EE0\u1EDA\u1EE2\xD9\u1EE6\u0168\xA0\u0102\xC2\xCA\xD4\u01A0\u01AF\u0110\u0103\xE2\xEA\xF4\u01A1\u01B0\u0111\u1EB0\u0300\u0309\u0303\u0301\u0323\xE0\u1EA3\xE3\xE1\u1EA1\u1EB2\u1EB1\u1EB3\u1EB5\u1EAF\u1EB4\u1EAE\u1EA6\u1EA8\u1EAA\u1EA4\u1EC0\u1EB7\u1EA7\u1EA9\u1EAB\u1EA5\u1EAD\xE8\u1EC2\u1EBB\u1EBD\xE9\u1EB9\u1EC1\u1EC3\u1EC5\u1EBF\u1EC7\xEC\u1EC9\u1EC4\u1EBE\u1ED2\u0129\xED\u1ECB\xF2\u1ED4\u1ECF\xF5\xF3\u1ECD\u1ED3\u1ED5\u1ED7\u1ED1\u1ED9\u1EDD\u1EDF\u1EE1\u1EDB\u1EE3\xF9\u1ED6\u1EE7\u0169\xFA\u1EE5\u1EEB\u1EED\u1EEF\u1EE9\u1EF1\u1EF3\u1EF7\u1EF9\xFD\u1EF5\u1ED0" + }, + "georgianacademy": { + "type": "_sbcs", + "chars": "\x80\x81\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\x8D\x8E\x8F\x90\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\x9D\x9E\u0178\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10D7\u10D8\u10D9\u10DA\u10DB\u10DC\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB\u10EC\u10ED\u10EE\u10EF\u10F0\u10F1\u10F2\u10F3\u10F4\u10F5\u10F6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF" + }, + "georgianps": { + "type": "_sbcs", + "chars": "\x80\x81\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\x8D\x8E\x8F\x90\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\x9D\x9E\u0178\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10F1\u10D7\u10D8\u10D9\u10DA\u10DB\u10DC\u10F2\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10F3\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB\u10EC\u10ED\u10EE\u10F4\u10EF\u10F0\u10F5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF" + }, + "pt154": { + "type": "_sbcs", + "chars": "\u0496\u0492\u04EE\u0493\u201E\u2026\u04B6\u04AE\u04B2\u04AF\u04A0\u04E2\u04A2\u049A\u04BA\u04B8\u0497\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u04B3\u04B7\u04A1\u04E3\u04A3\u049B\u04BB\u04B9\xA0\u040E\u045E\u0408\u04E8\u0498\u04B0\xA7\u0401\xA9\u04D8\xAB\xAC\u04EF\xAE\u049C\xB0\u04B1\u0406\u0456\u0499\u04E9\xB6\xB7\u0451\u2116\u04D9\xBB\u0458\u04AA\u04AB\u049D\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F" + }, + "viscii": { + "type": "_sbcs", + "chars": "\0\u1EB2\u1EB4\u1EAA\x07\b \n\v\f\r\u1EF6\u1EF8\u1EF4 !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\u1EA0\u1EAE\u1EB0\u1EB6\u1EA4\u1EA6\u1EA8\u1EAC\u1EBC\u1EB8\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EE2\u1EDA\u1EDC\u1EDE\u1ECA\u1ECE\u1ECC\u1EC8\u1EE6\u0168\u1EE4\u1EF2\xD5\u1EAF\u1EB1\u1EB7\u1EA5\u1EA7\u1EA9\u1EAD\u1EBD\u1EB9\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1ED1\u1ED3\u1ED5\u1ED7\u1EE0\u01A0\u1ED9\u1EDD\u1EDF\u1ECB\u1EF0\u1EE8\u1EEA\u1EEC\u01A1\u1EDB\u01AF\xC0\xC1\xC2\xC3\u1EA2\u0102\u1EB3\u1EB5\xC8\xC9\xCA\u1EBA\xCC\xCD\u0128\u1EF3\u0110\u1EE9\xD2\xD3\xD4\u1EA1\u1EF7\u1EEB\u1EED\xD9\xDA\u1EF9\u1EF5\xDD\u1EE1\u01B0\xE0\xE1\xE2\xE3\u1EA3\u0103\u1EEF\u1EAB\xE8\xE9\xEA\u1EBB\xEC\xED\u0129\u1EC9\u0111\u1EF1\xF2\xF3\xF4\xF5\u1ECF\u1ECD\u1EE5\xF9\xFA\u0169\u1EE7\xFD\u1EE3\u1EEE" + }, + "iso646cn": { + "type": "_sbcs", + "chars": "\0\x07\b \n\v\f\r !\"#\xA5%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}\u203E\x7F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" + }, + "iso646jp": { + "type": "_sbcs", + "chars": "\0\x07\b \n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\xA5]^_`abcdefghijklmnopqrstuvwxyz{|}\u203E\x7F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" + }, + "hproman8": { + "type": "_sbcs", + "chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xC0\xC2\xC8\xCA\xCB\xCE\xCF\xB4\u02CB\u02C6\xA8\u02DC\xD9\xDB\u20A4\xAF\xDD\xFD\xB0\xC7\xE7\xD1\xF1\xA1\xBF\xA4\xA3\xA5\xA7\u0192\xA2\xE2\xEA\xF4\xFB\xE1\xE9\xF3\xFA\xE0\xE8\xF2\xF9\xE4\xEB\xF6\xFC\xC5\xEE\xD8\xC6\xE5\xED\xF8\xE6\xC4\xEC\xD6\xDC\xC9\xEF\xDF\xD4\xC1\xC3\xE3\xD0\xF0\xCD\xCC\xD3\xD2\xD5\xF5\u0160\u0161\xDA\u0178\xFF\xDE\xFE\xB7\xB5\xB6\xBE\u2014\xBC\xBD\xAA\xBA\xAB\u25A0\xBB\xB1\uFFFD" + }, + "macintosh": { + "type": "_sbcs", + "chars": "\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u2126\xE6\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u2044\xA4\u2039\u203A\uFB01\uFB02\u2021\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uFFFD\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7" + }, + "ascii": { + "type": "_sbcs", + "chars": "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD" + }, + "tis620": { + "type": "_sbcs", + "chars": "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD" + } + }; + } +}); + +// node_modules/iconv-lite/encodings/dbcs-codec.js +var require_dbcs_codec = __commonJS({ + "node_modules/iconv-lite/encodings/dbcs-codec.js"(exports2) { + "use strict"; + var Buffer2 = require_safer().Buffer; + exports2._dbcs = DBCSCodec; + var UNASSIGNED = -1; + var GB18030_CODE = -2; + var SEQ_START = -10; + var NODE_START = -1e3; + var UNASSIGNED_NODE = new Array(256); + var DEF_CHAR = -1; + for (i = 0; i < 256; i++) + UNASSIGNED_NODE[i] = UNASSIGNED; + var i; + function DBCSCodec(codecOptions, iconv) { + this.encodingName = codecOptions.encodingName; + if (!codecOptions) + throw new Error("DBCS codec is called without the data."); + if (!codecOptions.table) + throw new Error("Encoding '" + this.encodingName + "' has no data."); + var mappingTable = codecOptions.table(); + this.decodeTables = []; + this.decodeTables[0] = UNASSIGNED_NODE.slice(0); + this.decodeTableSeq = []; + for (var i2 = 0; i2 < mappingTable.length; i2++) + this._addDecodeChunk(mappingTable[i2]); + this.defaultCharUnicode = iconv.defaultCharUnicode; + this.encodeTable = []; + this.encodeTableSeq = []; + var skipEncodeChars = {}; + if (codecOptions.encodeSkipVals) + for (var i2 = 0; i2 < codecOptions.encodeSkipVals.length; i2++) { + var val = codecOptions.encodeSkipVals[i2]; + if (typeof val === "number") + skipEncodeChars[val] = true; + else + for (var j = val.from; j <= val.to; j++) + skipEncodeChars[j] = true; + } + this._fillEncodeTable(0, 0, skipEncodeChars); + if (codecOptions.encodeAdd) { + for (var uChar in codecOptions.encodeAdd) + if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar)) + this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]); + } + this.defCharSB = this.encodeTable[0][iconv.defaultCharSingleByte.charCodeAt(0)]; + if (this.defCharSB === UNASSIGNED) + this.defCharSB = this.encodeTable[0]["?"]; + if (this.defCharSB === UNASSIGNED) + this.defCharSB = "?".charCodeAt(0); + if (typeof codecOptions.gb18030 === "function") { + this.gb18030 = codecOptions.gb18030(); + var thirdByteNodeIdx = this.decodeTables.length; + var thirdByteNode = this.decodeTables[thirdByteNodeIdx] = UNASSIGNED_NODE.slice(0); + var fourthByteNodeIdx = this.decodeTables.length; + var fourthByteNode = this.decodeTables[fourthByteNodeIdx] = UNASSIGNED_NODE.slice(0); + for (var i2 = 129; i2 <= 254; i2++) { + var secondByteNodeIdx = NODE_START - this.decodeTables[0][i2]; + var secondByteNode = this.decodeTables[secondByteNodeIdx]; + for (var j = 48; j <= 57; j++) + secondByteNode[j] = NODE_START - thirdByteNodeIdx; + } + for (var i2 = 129; i2 <= 254; i2++) + thirdByteNode[i2] = NODE_START - fourthByteNodeIdx; + for (var i2 = 48; i2 <= 57; i2++) + fourthByteNode[i2] = GB18030_CODE; + } + } + DBCSCodec.prototype.encoder = DBCSEncoder; + DBCSCodec.prototype.decoder = DBCSDecoder; + DBCSCodec.prototype._getDecodeTrieNode = function(addr) { + var bytes = []; + for (; addr > 0; addr >>= 8) + bytes.push(addr & 255); + if (bytes.length == 0) + bytes.push(0); + var node = this.decodeTables[0]; + for (var i2 = bytes.length - 1; i2 > 0; i2--) { + var val = node[bytes[i2]]; + if (val == UNASSIGNED) { + node[bytes[i2]] = NODE_START - this.decodeTables.length; + this.decodeTables.push(node = UNASSIGNED_NODE.slice(0)); + } else if (val <= NODE_START) { + node = this.decodeTables[NODE_START - val]; + } else + throw new Error("Overwrite byte in " + this.encodingName + ", addr: " + addr.toString(16)); + } + return node; + }; + DBCSCodec.prototype._addDecodeChunk = function(chunk) { + var curAddr = parseInt(chunk[0], 16); + var writeTable = this._getDecodeTrieNode(curAddr); + curAddr = curAddr & 255; + for (var k = 1; k < chunk.length; k++) { + var part = chunk[k]; + if (typeof part === "string") { + for (var l = 0; l < part.length; ) { + var code = part.charCodeAt(l++); + if (55296 <= code && code < 56320) { + var codeTrail = part.charCodeAt(l++); + if (56320 <= codeTrail && codeTrail < 57344) + writeTable[curAddr++] = 65536 + (code - 55296) * 1024 + (codeTrail - 56320); + else + throw new Error("Incorrect surrogate pair in " + this.encodingName + " at chunk " + chunk[0]); + } else if (4080 < code && code <= 4095) { + var len = 4095 - code + 2; + var seq = []; + for (var m = 0; m < len; m++) + seq.push(part.charCodeAt(l++)); + writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length; + this.decodeTableSeq.push(seq); + } else + writeTable[curAddr++] = code; + } + } else if (typeof part === "number") { + var charCode = writeTable[curAddr - 1] + 1; + for (var l = 0; l < part; l++) + writeTable[curAddr++] = charCode++; + } else + throw new Error("Incorrect type '" + typeof part + "' given in " + this.encodingName + " at chunk " + chunk[0]); + } + if (curAddr > 255) + throw new Error("Incorrect chunk in " + this.encodingName + " at addr " + chunk[0] + ": too long" + curAddr); + }; + DBCSCodec.prototype._getEncodeBucket = function(uCode) { + var high = uCode >> 8; + if (this.encodeTable[high] === void 0) + this.encodeTable[high] = UNASSIGNED_NODE.slice(0); + return this.encodeTable[high]; + }; + DBCSCodec.prototype._setEncodeChar = function(uCode, dbcsCode) { + var bucket = this._getEncodeBucket(uCode); + var low = uCode & 255; + if (bucket[low] <= SEQ_START) + this.encodeTableSeq[SEQ_START - bucket[low]][DEF_CHAR] = dbcsCode; + else if (bucket[low] == UNASSIGNED) + bucket[low] = dbcsCode; + }; + DBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) { + var uCode = seq[0]; + var bucket = this._getEncodeBucket(uCode); + var low = uCode & 255; + var node; + if (bucket[low] <= SEQ_START) { + node = this.encodeTableSeq[SEQ_START - bucket[low]]; + } else { + node = {}; + if (bucket[low] !== UNASSIGNED) + node[DEF_CHAR] = bucket[low]; + bucket[low] = SEQ_START - this.encodeTableSeq.length; + this.encodeTableSeq.push(node); + } + for (var j = 1; j < seq.length - 1; j++) { + var oldVal = node[uCode]; + if (typeof oldVal === "object") + node = oldVal; + else { + node = node[uCode] = {}; + if (oldVal !== void 0) + node[DEF_CHAR] = oldVal; + } + } + uCode = seq[seq.length - 1]; + node[uCode] = dbcsCode; + }; + DBCSCodec.prototype._fillEncodeTable = function(nodeIdx, prefix, skipEncodeChars) { + var node = this.decodeTables[nodeIdx]; + for (var i2 = 0; i2 < 256; i2++) { + var uCode = node[i2]; + var mbCode = prefix + i2; + if (skipEncodeChars[mbCode]) + continue; + if (uCode >= 0) + this._setEncodeChar(uCode, mbCode); + else if (uCode <= NODE_START) + this._fillEncodeTable(NODE_START - uCode, mbCode << 8, skipEncodeChars); + else if (uCode <= SEQ_START) + this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode); + } + }; + function DBCSEncoder(options, codec) { + this.leadSurrogate = -1; + this.seqObj = void 0; + this.encodeTable = codec.encodeTable; + this.encodeTableSeq = codec.encodeTableSeq; + this.defaultCharSingleByte = codec.defCharSB; + this.gb18030 = codec.gb18030; + } + DBCSEncoder.prototype.write = function(str) { + var newBuf = Buffer2.alloc(str.length * (this.gb18030 ? 4 : 3)), leadSurrogate = this.leadSurrogate, seqObj = this.seqObj, nextChar = -1, i2 = 0, j = 0; + while (true) { + if (nextChar === -1) { + if (i2 == str.length) + break; + var uCode = str.charCodeAt(i2++); + } else { + var uCode = nextChar; + nextChar = -1; + } + if (55296 <= uCode && uCode < 57344) { + if (uCode < 56320) { + if (leadSurrogate === -1) { + leadSurrogate = uCode; + continue; + } else { + leadSurrogate = uCode; + uCode = UNASSIGNED; + } + } else { + if (leadSurrogate !== -1) { + uCode = 65536 + (leadSurrogate - 55296) * 1024 + (uCode - 56320); + leadSurrogate = -1; + } else { + uCode = UNASSIGNED; + } + } + } else if (leadSurrogate !== -1) { + nextChar = uCode; + uCode = UNASSIGNED; + leadSurrogate = -1; + } + var dbcsCode = UNASSIGNED; + if (seqObj !== void 0 && uCode != UNASSIGNED) { + var resCode = seqObj[uCode]; + if (typeof resCode === "object") { + seqObj = resCode; + continue; + } else if (typeof resCode == "number") { + dbcsCode = resCode; + } else if (resCode == void 0) { + resCode = seqObj[DEF_CHAR]; + if (resCode !== void 0) { + dbcsCode = resCode; + nextChar = uCode; + } else { + } + } + seqObj = void 0; + } else if (uCode >= 0) { + var subtable = this.encodeTable[uCode >> 8]; + if (subtable !== void 0) + dbcsCode = subtable[uCode & 255]; + if (dbcsCode <= SEQ_START) { + seqObj = this.encodeTableSeq[SEQ_START - dbcsCode]; + continue; + } + if (dbcsCode == UNASSIGNED && this.gb18030) { + var idx = findIdx(this.gb18030.uChars, uCode); + if (idx != -1) { + var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]); + newBuf[j++] = 129 + Math.floor(dbcsCode / 12600); + dbcsCode = dbcsCode % 12600; + newBuf[j++] = 48 + Math.floor(dbcsCode / 1260); + dbcsCode = dbcsCode % 1260; + newBuf[j++] = 129 + Math.floor(dbcsCode / 10); + dbcsCode = dbcsCode % 10; + newBuf[j++] = 48 + dbcsCode; + continue; + } + } + } + if (dbcsCode === UNASSIGNED) + dbcsCode = this.defaultCharSingleByte; + if (dbcsCode < 256) { + newBuf[j++] = dbcsCode; + } else if (dbcsCode < 65536) { + newBuf[j++] = dbcsCode >> 8; + newBuf[j++] = dbcsCode & 255; + } else { + newBuf[j++] = dbcsCode >> 16; + newBuf[j++] = dbcsCode >> 8 & 255; + newBuf[j++] = dbcsCode & 255; + } + } + this.seqObj = seqObj; + this.leadSurrogate = leadSurrogate; + return newBuf.slice(0, j); + }; + DBCSEncoder.prototype.end = function() { + if (this.leadSurrogate === -1 && this.seqObj === void 0) + return; + var newBuf = Buffer2.alloc(10), j = 0; + if (this.seqObj) { + var dbcsCode = this.seqObj[DEF_CHAR]; + if (dbcsCode !== void 0) { + if (dbcsCode < 256) { + newBuf[j++] = dbcsCode; + } else { + newBuf[j++] = dbcsCode >> 8; + newBuf[j++] = dbcsCode & 255; + } + } else { + } + this.seqObj = void 0; + } + if (this.leadSurrogate !== -1) { + newBuf[j++] = this.defaultCharSingleByte; + this.leadSurrogate = -1; + } + return newBuf.slice(0, j); + }; + DBCSEncoder.prototype.findIdx = findIdx; + function DBCSDecoder(options, codec) { + this.nodeIdx = 0; + this.prevBuf = Buffer2.alloc(0); + this.decodeTables = codec.decodeTables; + this.decodeTableSeq = codec.decodeTableSeq; + this.defaultCharUnicode = codec.defaultCharUnicode; + this.gb18030 = codec.gb18030; + } + DBCSDecoder.prototype.write = function(buf) { + var newBuf = Buffer2.alloc(buf.length * 2), nodeIdx = this.nodeIdx, prevBuf = this.prevBuf, prevBufOffset = this.prevBuf.length, seqStart = -this.prevBuf.length, uCode; + if (prevBufOffset > 0) + prevBuf = Buffer2.concat([prevBuf, buf.slice(0, 10)]); + for (var i2 = 0, j = 0; i2 < buf.length; i2++) { + var curByte = i2 >= 0 ? buf[i2] : prevBuf[i2 + prevBufOffset]; + var uCode = this.decodeTables[nodeIdx][curByte]; + if (uCode >= 0) { + } else if (uCode === UNASSIGNED) { + i2 = seqStart; + uCode = this.defaultCharUnicode.charCodeAt(0); + } else if (uCode === GB18030_CODE) { + var curSeq = seqStart >= 0 ? buf.slice(seqStart, i2 + 1) : prevBuf.slice(seqStart + prevBufOffset, i2 + 1 + prevBufOffset); + var ptr = (curSeq[0] - 129) * 12600 + (curSeq[1] - 48) * 1260 + (curSeq[2] - 129) * 10 + (curSeq[3] - 48); + var idx = findIdx(this.gb18030.gbChars, ptr); + uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx]; + } else if (uCode <= NODE_START) { + nodeIdx = NODE_START - uCode; + continue; + } else if (uCode <= SEQ_START) { + var seq = this.decodeTableSeq[SEQ_START - uCode]; + for (var k = 0; k < seq.length - 1; k++) { + uCode = seq[k]; + newBuf[j++] = uCode & 255; + newBuf[j++] = uCode >> 8; + } + uCode = seq[seq.length - 1]; + } else + throw new Error("iconv-lite internal error: invalid decoding table value " + uCode + " at " + nodeIdx + "/" + curByte); + if (uCode > 65535) { + uCode -= 65536; + var uCodeLead = 55296 + Math.floor(uCode / 1024); + newBuf[j++] = uCodeLead & 255; + newBuf[j++] = uCodeLead >> 8; + uCode = 56320 + uCode % 1024; + } + newBuf[j++] = uCode & 255; + newBuf[j++] = uCode >> 8; + nodeIdx = 0; + seqStart = i2 + 1; + } + this.nodeIdx = nodeIdx; + this.prevBuf = seqStart >= 0 ? buf.slice(seqStart) : prevBuf.slice(seqStart + prevBufOffset); + return newBuf.slice(0, j).toString("ucs2"); + }; + DBCSDecoder.prototype.end = function() { + var ret = ""; + while (this.prevBuf.length > 0) { + ret += this.defaultCharUnicode; + var buf = this.prevBuf.slice(1); + this.prevBuf = Buffer2.alloc(0); + this.nodeIdx = 0; + if (buf.length > 0) + ret += this.write(buf); + } + this.nodeIdx = 0; + return ret; + }; + function findIdx(table, val) { + if (table[0] > val) + return -1; + var l = 0, r = table.length; + while (l < r - 1) { + var mid = l + Math.floor((r - l + 1) / 2); + if (table[mid] <= val) + l = mid; + else + r = mid; + } + return l; + } + } +}); + +// node_modules/iconv-lite/encodings/tables/shiftjis.json +var require_shiftjis = __commonJS({ + "node_modules/iconv-lite/encodings/tables/shiftjis.json"(exports2, module2) { + module2.exports = [ + ["0", "\0", 128], + ["a1", "\uFF61", 62], + ["8140", "\u3000\u3001\u3002\uFF0C\uFF0E\u30FB\uFF1A\uFF1B\uFF1F\uFF01\u309B\u309C\xB4\uFF40\xA8\uFF3E\uFFE3\uFF3F\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\u2015\u2010\uFF0F\uFF3C\uFF5E\u2225\uFF5C\u2026\u2025\u2018\u2019\u201C\u201D\uFF08\uFF09\u3014\u3015\uFF3B\uFF3D\uFF5B\uFF5D\u3008", 9, "\uFF0B\uFF0D\xB1\xD7"], + ["8180", "\xF7\uFF1D\u2260\uFF1C\uFF1E\u2266\u2267\u221E\u2234\u2642\u2640\xB0\u2032\u2033\u2103\uFFE5\uFF04\uFFE0\uFFE1\uFF05\uFF03\uFF06\uFF0A\uFF20\xA7\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u203B\u3012\u2192\u2190\u2191\u2193\u3013"], + ["81b8", "\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229"], + ["81c8", "\u2227\u2228\uFFE2\u21D2\u21D4\u2200\u2203"], + ["81da", "\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C"], + ["81f0", "\u212B\u2030\u266F\u266D\u266A\u2020\u2021\xB6"], + ["81fc", "\u25EF"], + ["824f", "\uFF10", 9], + ["8260", "\uFF21", 25], + ["8281", "\uFF41", 25], + ["829f", "\u3041", 82], + ["8340", "\u30A1", 62], + ["8380", "\u30E0", 22], + ["839f", "\u0391", 16, "\u03A3", 6], + ["83bf", "\u03B1", 16, "\u03C3", 6], + ["8440", "\u0410", 5, "\u0401\u0416", 25], + ["8470", "\u0430", 5, "\u0451\u0436", 7], + ["8480", "\u043E", 17], + ["849f", "\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542"], + ["8740", "\u2460", 19, "\u2160", 9], + ["875f", "\u3349\u3314\u3322\u334D\u3318\u3327\u3303\u3336\u3351\u3357\u330D\u3326\u3323\u332B\u334A\u333B\u339C\u339D\u339E\u338E\u338F\u33C4\u33A1"], + ["877e", "\u337B"], + ["8780", "\u301D\u301F\u2116\u33CD\u2121\u32A4", 4, "\u3231\u3232\u3239\u337E\u337D\u337C\u2252\u2261\u222B\u222E\u2211\u221A\u22A5\u2220\u221F\u22BF\u2235\u2229\u222A"], + ["889f", "\u4E9C\u5516\u5A03\u963F\u54C0\u611B\u6328\u59F6\u9022\u8475\u831C\u7A50\u60AA\u63E1\u6E25\u65ED\u8466\u82A6\u9BF5\u6893\u5727\u65A1\u6271\u5B9B\u59D0\u867B\u98F4\u7D62\u7DBE\u9B8E\u6216\u7C9F\u88B7\u5B89\u5EB5\u6309\u6697\u6848\u95C7\u978D\u674F\u4EE5\u4F0A\u4F4D\u4F9D\u5049\u56F2\u5937\u59D4\u5A01\u5C09\u60DF\u610F\u6170\u6613\u6905\u70BA\u754F\u7570\u79FB\u7DAD\u7DEF\u80C3\u840E\u8863\u8B02\u9055\u907A\u533B\u4E95\u4EA5\u57DF\u80B2\u90C1\u78EF\u4E00\u58F1\u6EA2\u9038\u7A32\u8328\u828B\u9C2F\u5141\u5370\u54BD\u54E1\u56E0\u59FB\u5F15\u98F2\u6DEB\u80E4\u852D"], + ["8940", "\u9662\u9670\u96A0\u97FB\u540B\u53F3\u5B87\u70CF\u7FBD\u8FC2\u96E8\u536F\u9D5C\u7ABA\u4E11\u7893\u81FC\u6E26\u5618\u5504\u6B1D\u851A\u9C3B\u59E5\u53A9\u6D66\u74DC\u958F\u5642\u4E91\u904B\u96F2\u834F\u990C\u53E1\u55B6\u5B30\u5F71\u6620\u66F3\u6804\u6C38\u6CF3\u6D29\u745B\u76C8\u7A4E\u9834\u82F1\u885B\u8A60\u92ED\u6DB2\u75AB\u76CA\u99C5\u60A6\u8B01\u8D8A\u95B2\u698E\u53AD\u5186"], + ["8980", "\u5712\u5830\u5944\u5BB4\u5EF6\u6028\u63A9\u63F4\u6CBF\u6F14\u708E\u7114\u7159\u71D5\u733F\u7E01\u8276\u82D1\u8597\u9060\u925B\u9D1B\u5869\u65BC\u6C5A\u7525\u51F9\u592E\u5965\u5F80\u5FDC\u62BC\u65FA\u6A2A\u6B27\u6BB4\u738B\u7FC1\u8956\u9D2C\u9D0E\u9EC4\u5CA1\u6C96\u837B\u5104\u5C4B\u61B6\u81C6\u6876\u7261\u4E59\u4FFA\u5378\u6069\u6E29\u7A4F\u97F3\u4E0B\u5316\u4EEE\u4F55\u4F3D\u4FA1\u4F73\u52A0\u53EF\u5609\u590F\u5AC1\u5BB6\u5BE1\u79D1\u6687\u679C\u67B6\u6B4C\u6CB3\u706B\u73C2\u798D\u79BE\u7A3C\u7B87\u82B1\u82DB\u8304\u8377\u83EF\u83D3\u8766\u8AB2\u5629\u8CA8\u8FE6\u904E\u971E\u868A\u4FC4\u5CE8\u6211\u7259\u753B\u81E5\u82BD\u86FE\u8CC0\u96C5\u9913\u99D5\u4ECB\u4F1A\u89E3\u56DE\u584A\u58CA\u5EFB\u5FEB\u602A\u6094\u6062\u61D0\u6212\u62D0\u6539"], + ["8a40", "\u9B41\u6666\u68B0\u6D77\u7070\u754C\u7686\u7D75\u82A5\u87F9\u958B\u968E\u8C9D\u51F1\u52BE\u5916\u54B3\u5BB3\u5D16\u6168\u6982\u6DAF\u788D\u84CB\u8857\u8A72\u93A7\u9AB8\u6D6C\u99A8\u86D9\u57A3\u67FF\u86CE\u920E\u5283\u5687\u5404\u5ED3\u62E1\u64B9\u683C\u6838\u6BBB\u7372\u78BA\u7A6B\u899A\u89D2\u8D6B\u8F03\u90ED\u95A3\u9694\u9769\u5B66\u5CB3\u697D\u984D\u984E\u639B\u7B20\u6A2B"], + ["8a80", "\u6A7F\u68B6\u9C0D\u6F5F\u5272\u559D\u6070\u62EC\u6D3B\u6E07\u6ED1\u845B\u8910\u8F44\u4E14\u9C39\u53F6\u691B\u6A3A\u9784\u682A\u515C\u7AC3\u84B2\u91DC\u938C\u565B\u9D28\u6822\u8305\u8431\u7CA5\u5208\u82C5\u74E6\u4E7E\u4F83\u51A0\u5BD2\u520A\u52D8\u52E7\u5DFB\u559A\u582A\u59E6\u5B8C\u5B98\u5BDB\u5E72\u5E79\u60A3\u611F\u6163\u61BE\u63DB\u6562\u67D1\u6853\u68FA\u6B3E\u6B53\u6C57\u6F22\u6F97\u6F45\u74B0\u7518\u76E3\u770B\u7AFF\u7BA1\u7C21\u7DE9\u7F36\u7FF0\u809D\u8266\u839E\u89B3\u8ACC\u8CAB\u9084\u9451\u9593\u9591\u95A2\u9665\u97D3\u9928\u8218\u4E38\u542B\u5CB8\u5DCC\u73A9\u764C\u773C\u5CA9\u7FEB\u8D0B\u96C1\u9811\u9854\u9858\u4F01\u4F0E\u5371\u559C\u5668\u57FA\u5947\u5B09\u5BC4\u5C90\u5E0C\u5E7E\u5FCC\u63EE\u673A\u65D7\u65E2\u671F\u68CB\u68C4"], + ["8b40", "\u6A5F\u5E30\u6BC5\u6C17\u6C7D\u757F\u7948\u5B63\u7A00\u7D00\u5FBD\u898F\u8A18\u8CB4\u8D77\u8ECC\u8F1D\u98E2\u9A0E\u9B3C\u4E80\u507D\u5100\u5993\u5B9C\u622F\u6280\u64EC\u6B3A\u72A0\u7591\u7947\u7FA9\u87FB\u8ABC\u8B70\u63AC\u83CA\u97A0\u5409\u5403\u55AB\u6854\u6A58\u8A70\u7827\u6775\u9ECD\u5374\u5BA2\u811A\u8650\u9006\u4E18\u4E45\u4EC7\u4F11\u53CA\u5438\u5BAE\u5F13\u6025\u6551"], + ["8b80", "\u673D\u6C42\u6C72\u6CE3\u7078\u7403\u7A76\u7AAE\u7B08\u7D1A\u7CFE\u7D66\u65E7\u725B\u53BB\u5C45\u5DE8\u62D2\u62E0\u6319\u6E20\u865A\u8A31\u8DDD\u92F8\u6F01\u79A6\u9B5A\u4EA8\u4EAB\u4EAC\u4F9B\u4FA0\u50D1\u5147\u7AF6\u5171\u51F6\u5354\u5321\u537F\u53EB\u55AC\u5883\u5CE1\u5F37\u5F4A\u602F\u6050\u606D\u631F\u6559\u6A4B\u6CC1\u72C2\u72ED\u77EF\u80F8\u8105\u8208\u854E\u90F7\u93E1\u97FF\u9957\u9A5A\u4EF0\u51DD\u5C2D\u6681\u696D\u5C40\u66F2\u6975\u7389\u6850\u7C81\u50C5\u52E4\u5747\u5DFE\u9326\u65A4\u6B23\u6B3D\u7434\u7981\u79BD\u7B4B\u7DCA\u82B9\u83CC\u887F\u895F\u8B39\u8FD1\u91D1\u541F\u9280\u4E5D\u5036\u53E5\u533A\u72D7\u7396\u77E9\u82E6\u8EAF\u99C6\u99C8\u99D2\u5177\u611A\u865E\u55B0\u7A7A\u5076\u5BD3\u9047\u9685\u4E32\u6ADB\u91E7\u5C51\u5C48"], + ["8c40", "\u6398\u7A9F\u6C93\u9774\u8F61\u7AAA\u718A\u9688\u7C82\u6817\u7E70\u6851\u936C\u52F2\u541B\u85AB\u8A13\u7FA4\u8ECD\u90E1\u5366\u8888\u7941\u4FC2\u50BE\u5211\u5144\u5553\u572D\u73EA\u578B\u5951\u5F62\u5F84\u6075\u6176\u6167\u61A9\u63B2\u643A\u656C\u666F\u6842\u6E13\u7566\u7A3D\u7CFB\u7D4C\u7D99\u7E4B\u7F6B\u830E\u834A\u86CD\u8A08\u8A63\u8B66\u8EFD\u981A\u9D8F\u82B8\u8FCE\u9BE8"], + ["8c80", "\u5287\u621F\u6483\u6FC0\u9699\u6841\u5091\u6B20\u6C7A\u6F54\u7A74\u7D50\u8840\u8A23\u6708\u4EF6\u5039\u5026\u5065\u517C\u5238\u5263\u55A7\u570F\u5805\u5ACC\u5EFA\u61B2\u61F8\u62F3\u6372\u691C\u6A29\u727D\u72AC\u732E\u7814\u786F\u7D79\u770C\u80A9\u898B\u8B19\u8CE2\u8ED2\u9063\u9375\u967A\u9855\u9A13\u9E78\u5143\u539F\u53B3\u5E7B\u5F26\u6E1B\u6E90\u7384\u73FE\u7D43\u8237\u8A00\u8AFA\u9650\u4E4E\u500B\u53E4\u547C\u56FA\u59D1\u5B64\u5DF1\u5EAB\u5F27\u6238\u6545\u67AF\u6E56\u72D0\u7CCA\u88B4\u80A1\u80E1\u83F0\u864E\u8A87\u8DE8\u9237\u96C7\u9867\u9F13\u4E94\u4E92\u4F0D\u5348\u5449\u543E\u5A2F\u5F8C\u5FA1\u609F\u68A7\u6A8E\u745A\u7881\u8A9E\u8AA4\u8B77\u9190\u4E5E\u9BC9\u4EA4\u4F7C\u4FAF\u5019\u5016\u5149\u516C\u529F\u52B9\u52FE\u539A\u53E3\u5411"], + ["8d40", "\u540E\u5589\u5751\u57A2\u597D\u5B54\u5B5D\u5B8F\u5DE5\u5DE7\u5DF7\u5E78\u5E83\u5E9A\u5EB7\u5F18\u6052\u614C\u6297\u62D8\u63A7\u653B\u6602\u6643\u66F4\u676D\u6821\u6897\u69CB\u6C5F\u6D2A\u6D69\u6E2F\u6E9D\u7532\u7687\u786C\u7A3F\u7CE0\u7D05\u7D18\u7D5E\u7DB1\u8015\u8003\u80AF\u80B1\u8154\u818F\u822A\u8352\u884C\u8861\u8B1B\u8CA2\u8CFC\u90CA\u9175\u9271\u783F\u92FC\u95A4\u964D"], + ["8d80", "\u9805\u9999\u9AD8\u9D3B\u525B\u52AB\u53F7\u5408\u58D5\u62F7\u6FE0\u8C6A\u8F5F\u9EB9\u514B\u523B\u544A\u56FD\u7A40\u9177\u9D60\u9ED2\u7344\u6F09\u8170\u7511\u5FFD\u60DA\u9AA8\u72DB\u8FBC\u6B64\u9803\u4ECA\u56F0\u5764\u58BE\u5A5A\u6068\u61C7\u660F\u6606\u6839\u68B1\u6DF7\u75D5\u7D3A\u826E\u9B42\u4E9B\u4F50\u53C9\u5506\u5D6F\u5DE6\u5DEE\u67FB\u6C99\u7473\u7802\u8A50\u9396\u88DF\u5750\u5EA7\u632B\u50B5\u50AC\u518D\u6700\u54C9\u585E\u59BB\u5BB0\u5F69\u624D\u63A1\u683D\u6B73\u6E08\u707D\u91C7\u7280\u7815\u7826\u796D\u658E\u7D30\u83DC\u88C1\u8F09\u969B\u5264\u5728\u6750\u7F6A\u8CA1\u51B4\u5742\u962A\u583A\u698A\u80B4\u54B2\u5D0E\u57FC\u7895\u9DFA\u4F5C\u524A\u548B\u643E\u6628\u6714\u67F5\u7A84\u7B56\u7D22\u932F\u685C\u9BAD\u7B39\u5319\u518A\u5237"], + ["8e40", "\u5BDF\u62F6\u64AE\u64E6\u672D\u6BBA\u85A9\u96D1\u7690\u9BD6\u634C\u9306\u9BAB\u76BF\u6652\u4E09\u5098\u53C2\u5C71\u60E8\u6492\u6563\u685F\u71E6\u73CA\u7523\u7B97\u7E82\u8695\u8B83\u8CDB\u9178\u9910\u65AC\u66AB\u6B8B\u4ED5\u4ED4\u4F3A\u4F7F\u523A\u53F8\u53F2\u55E3\u56DB\u58EB\u59CB\u59C9\u59FF\u5B50\u5C4D\u5E02\u5E2B\u5FD7\u601D\u6307\u652F\u5B5C\u65AF\u65BD\u65E8\u679D\u6B62"], + ["8e80", "\u6B7B\u6C0F\u7345\u7949\u79C1\u7CF8\u7D19\u7D2B\u80A2\u8102\u81F3\u8996\u8A5E\u8A69\u8A66\u8A8C\u8AEE\u8CC7\u8CDC\u96CC\u98FC\u6B6F\u4E8B\u4F3C\u4F8D\u5150\u5B57\u5BFA\u6148\u6301\u6642\u6B21\u6ECB\u6CBB\u723E\u74BD\u75D4\u78C1\u793A\u800C\u8033\u81EA\u8494\u8F9E\u6C50\u9E7F\u5F0F\u8B58\u9D2B\u7AFA\u8EF8\u5B8D\u96EB\u4E03\u53F1\u57F7\u5931\u5AC9\u5BA4\u6089\u6E7F\u6F06\u75BE\u8CEA\u5B9F\u8500\u7BE0\u5072\u67F4\u829D\u5C61\u854A\u7E1E\u820E\u5199\u5C04\u6368\u8D66\u659C\u716E\u793E\u7D17\u8005\u8B1D\u8ECA\u906E\u86C7\u90AA\u501F\u52FA\u5C3A\u6753\u707C\u7235\u914C\u91C8\u932B\u82E5\u5BC2\u5F31\u60F9\u4E3B\u53D6\u5B88\u624B\u6731\u6B8A\u72E9\u73E0\u7A2E\u816B\u8DA3\u9152\u9996\u5112\u53D7\u546A\u5BFF\u6388\u6A39\u7DAC\u9700\u56DA\u53CE\u5468"], + ["8f40", "\u5B97\u5C31\u5DDE\u4FEE\u6101\u62FE\u6D32\u79C0\u79CB\u7D42\u7E4D\u7FD2\u81ED\u821F\u8490\u8846\u8972\u8B90\u8E74\u8F2F\u9031\u914B\u916C\u96C6\u919C\u4EC0\u4F4F\u5145\u5341\u5F93\u620E\u67D4\u6C41\u6E0B\u7363\u7E26\u91CD\u9283\u53D4\u5919\u5BBF\u6DD1\u795D\u7E2E\u7C9B\u587E\u719F\u51FA\u8853\u8FF0\u4FCA\u5CFB\u6625\u77AC\u7AE3\u821C\u99FF\u51C6\u5FAA\u65EC\u696F\u6B89\u6DF3"], + ["8f80", "\u6E96\u6F64\u76FE\u7D14\u5DE1\u9075\u9187\u9806\u51E6\u521D\u6240\u6691\u66D9\u6E1A\u5EB6\u7DD2\u7F72\u66F8\u85AF\u85F7\u8AF8\u52A9\u53D9\u5973\u5E8F\u5F90\u6055\u92E4\u9664\u50B7\u511F\u52DD\u5320\u5347\u53EC\u54E8\u5546\u5531\u5617\u5968\u59BE\u5A3C\u5BB5\u5C06\u5C0F\u5C11\u5C1A\u5E84\u5E8A\u5EE0\u5F70\u627F\u6284\u62DB\u638C\u6377\u6607\u660C\u662D\u6676\u677E\u68A2\u6A1F\u6A35\u6CBC\u6D88\u6E09\u6E58\u713C\u7126\u7167\u75C7\u7701\u785D\u7901\u7965\u79F0\u7AE0\u7B11\u7CA7\u7D39\u8096\u83D6\u848B\u8549\u885D\u88F3\u8A1F\u8A3C\u8A54\u8A73\u8C61\u8CDE\u91A4\u9266\u937E\u9418\u969C\u9798\u4E0A\u4E08\u4E1E\u4E57\u5197\u5270\u57CE\u5834\u58CC\u5B22\u5E38\u60C5\u64FE\u6761\u6756\u6D44\u72B6\u7573\u7A63\u84B8\u8B72\u91B8\u9320\u5631\u57F4\u98FE"], + ["9040", "\u62ED\u690D\u6B96\u71ED\u7E54\u8077\u8272\u89E6\u98DF\u8755\u8FB1\u5C3B\u4F38\u4FE1\u4FB5\u5507\u5A20\u5BDD\u5BE9\u5FC3\u614E\u632F\u65B0\u664B\u68EE\u699B\u6D78\u6DF1\u7533\u75B9\u771F\u795E\u79E6\u7D33\u81E3\u82AF\u85AA\u89AA\u8A3A\u8EAB\u8F9B\u9032\u91DD\u9707\u4EBA\u4EC1\u5203\u5875\u58EC\u5C0B\u751A\u5C3D\u814E\u8A0A\u8FC5\u9663\u976D\u7B25\u8ACF\u9808\u9162\u56F3\u53A8"], + ["9080", "\u9017\u5439\u5782\u5E25\u63A8\u6C34\u708A\u7761\u7C8B\u7FE0\u8870\u9042\u9154\u9310\u9318\u968F\u745E\u9AC4\u5D07\u5D69\u6570\u67A2\u8DA8\u96DB\u636E\u6749\u6919\u83C5\u9817\u96C0\u88FE\u6F84\u647A\u5BF8\u4E16\u702C\u755D\u662F\u51C4\u5236\u52E2\u59D3\u5F81\u6027\u6210\u653F\u6574\u661F\u6674\u68F2\u6816\u6B63\u6E05\u7272\u751F\u76DB\u7CBE\u8056\u58F0\u88FD\u897F\u8AA0\u8A93\u8ACB\u901D\u9192\u9752\u9759\u6589\u7A0E\u8106\u96BB\u5E2D\u60DC\u621A\u65A5\u6614\u6790\u77F3\u7A4D\u7C4D\u7E3E\u810A\u8CAC\u8D64\u8DE1\u8E5F\u78A9\u5207\u62D9\u63A5\u6442\u6298\u8A2D\u7A83\u7BC0\u8AAC\u96EA\u7D76\u820C\u8749\u4ED9\u5148\u5343\u5360\u5BA3\u5C02\u5C16\u5DDD\u6226\u6247\u64B0\u6813\u6834\u6CC9\u6D45\u6D17\u67D3\u6F5C\u714E\u717D\u65CB\u7A7F\u7BAD\u7DDA"], + ["9140", "\u7E4A\u7FA8\u817A\u821B\u8239\u85A6\u8A6E\u8CCE\u8DF5\u9078\u9077\u92AD\u9291\u9583\u9BAE\u524D\u5584\u6F38\u7136\u5168\u7985\u7E55\u81B3\u7CCE\u564C\u5851\u5CA8\u63AA\u66FE\u66FD\u695A\u72D9\u758F\u758E\u790E\u7956\u79DF\u7C97\u7D20\u7D44\u8607\u8A34\u963B\u9061\u9F20\u50E7\u5275\u53CC\u53E2\u5009\u55AA\u58EE\u594F\u723D\u5B8B\u5C64\u531D\u60E3\u60F3\u635C\u6383\u633F\u63BB"], + ["9180", "\u64CD\u65E9\u66F9\u5DE3\u69CD\u69FD\u6F15\u71E5\u4E89\u75E9\u76F8\u7A93\u7CDF\u7DCF\u7D9C\u8061\u8349\u8358\u846C\u84BC\u85FB\u88C5\u8D70\u9001\u906D\u9397\u971C\u9A12\u50CF\u5897\u618E\u81D3\u8535\u8D08\u9020\u4FC3\u5074\u5247\u5373\u606F\u6349\u675F\u6E2C\u8DB3\u901F\u4FD7\u5C5E\u8CCA\u65CF\u7D9A\u5352\u8896\u5176\u63C3\u5B58\u5B6B\u5C0A\u640D\u6751\u905C\u4ED6\u591A\u592A\u6C70\u8A51\u553E\u5815\u59A5\u60F0\u6253\u67C1\u8235\u6955\u9640\u99C4\u9A28\u4F53\u5806\u5BFE\u8010\u5CB1\u5E2F\u5F85\u6020\u614B\u6234\u66FF\u6CF0\u6EDE\u80CE\u817F\u82D4\u888B\u8CB8\u9000\u902E\u968A\u9EDB\u9BDB\u4EE3\u53F0\u5927\u7B2C\u918D\u984C\u9DF9\u6EDD\u7027\u5353\u5544\u5B85\u6258\u629E\u62D3\u6CA2\u6FEF\u7422\u8A17\u9438\u6FC1\u8AFE\u8338\u51E7\u86F8\u53EA"], + ["9240", "\u53E9\u4F46\u9054\u8FB0\u596A\u8131\u5DFD\u7AEA\u8FBF\u68DA\u8C37\u72F8\u9C48\u6A3D\u8AB0\u4E39\u5358\u5606\u5766\u62C5\u63A2\u65E6\u6B4E\u6DE1\u6E5B\u70AD\u77ED\u7AEF\u7BAA\u7DBB\u803D\u80C6\u86CB\u8A95\u935B\u56E3\u58C7\u5F3E\u65AD\u6696\u6A80\u6BB5\u7537\u8AC7\u5024\u77E5\u5730\u5F1B\u6065\u667A\u6C60\u75F4\u7A1A\u7F6E\u81F4\u8718\u9045\u99B3\u7BC9\u755C\u7AF9\u7B51\u84C4"], + ["9280", "\u9010\u79E9\u7A92\u8336\u5AE1\u7740\u4E2D\u4EF2\u5B99\u5FE0\u62BD\u663C\u67F1\u6CE8\u866B\u8877\u8A3B\u914E\u92F3\u99D0\u6A17\u7026\u732A\u82E7\u8457\u8CAF\u4E01\u5146\u51CB\u558B\u5BF5\u5E16\u5E33\u5E81\u5F14\u5F35\u5F6B\u5FB4\u61F2\u6311\u66A2\u671D\u6F6E\u7252\u753A\u773A\u8074\u8139\u8178\u8776\u8ABF\u8ADC\u8D85\u8DF3\u929A\u9577\u9802\u9CE5\u52C5\u6357\u76F4\u6715\u6C88\u73CD\u8CC3\u93AE\u9673\u6D25\u589C\u690E\u69CC\u8FFD\u939A\u75DB\u901A\u585A\u6802\u63B4\u69FB\u4F43\u6F2C\u67D8\u8FBB\u8526\u7DB4\u9354\u693F\u6F70\u576A\u58F7\u5B2C\u7D2C\u722A\u540A\u91E3\u9DB4\u4EAD\u4F4E\u505C\u5075\u5243\u8C9E\u5448\u5824\u5B9A\u5E1D\u5E95\u5EAD\u5EF7\u5F1F\u608C\u62B5\u633A\u63D0\u68AF\u6C40\u7887\u798E\u7A0B\u7DE0\u8247\u8A02\u8AE6\u8E44\u9013"], + ["9340", "\u90B8\u912D\u91D8\u9F0E\u6CE5\u6458\u64E2\u6575\u6EF4\u7684\u7B1B\u9069\u93D1\u6EBA\u54F2\u5FB9\u64A4\u8F4D\u8FED\u9244\u5178\u586B\u5929\u5C55\u5E97\u6DFB\u7E8F\u751C\u8CBC\u8EE2\u985B\u70B9\u4F1D\u6BBF\u6FB1\u7530\u96FB\u514E\u5410\u5835\u5857\u59AC\u5C60\u5F92\u6597\u675C\u6E21\u767B\u83DF\u8CED\u9014\u90FD\u934D\u7825\u783A\u52AA\u5EA6\u571F\u5974\u6012\u5012\u515A\u51AC"], + ["9380", "\u51CD\u5200\u5510\u5854\u5858\u5957\u5B95\u5CF6\u5D8B\u60BC\u6295\u642D\u6771\u6843\u68BC\u68DF\u76D7\u6DD8\u6E6F\u6D9B\u706F\u71C8\u5F53\u75D8\u7977\u7B49\u7B54\u7B52\u7CD6\u7D71\u5230\u8463\u8569\u85E4\u8A0E\u8B04\u8C46\u8E0F\u9003\u900F\u9419\u9676\u982D\u9A30\u95D8\u50CD\u52D5\u540C\u5802\u5C0E\u61A7\u649E\u6D1E\u77B3\u7AE5\u80F4\u8404\u9053\u9285\u5CE0\u9D07\u533F\u5F97\u5FB3\u6D9C\u7279\u7763\u79BF\u7BE4\u6BD2\u72EC\u8AAD\u6803\u6A61\u51F8\u7A81\u6934\u5C4A\u9CF6\u82EB\u5BC5\u9149\u701E\u5678\u5C6F\u60C7\u6566\u6C8C\u8C5A\u9041\u9813\u5451\u66C7\u920D\u5948\u90A3\u5185\u4E4D\u51EA\u8599\u8B0E\u7058\u637A\u934B\u6962\u99B4\u7E04\u7577\u5357\u6960\u8EDF\u96E3\u6C5D\u4E8C\u5C3C\u5F10\u8FE9\u5302\u8CD1\u8089\u8679\u5EFF\u65E5\u4E73\u5165"], + ["9440", "\u5982\u5C3F\u97EE\u4EFB\u598A\u5FCD\u8A8D\u6FE1\u79B0\u7962\u5BE7\u8471\u732B\u71B1\u5E74\u5FF5\u637B\u649A\u71C3\u7C98\u4E43\u5EFC\u4E4B\u57DC\u56A2\u60A9\u6FC3\u7D0D\u80FD\u8133\u81BF\u8FB2\u8997\u86A4\u5DF4\u628A\u64AD\u8987\u6777\u6CE2\u6D3E\u7436\u7834\u5A46\u7F75\u82AD\u99AC\u4FF3\u5EC3\u62DD\u6392\u6557\u676F\u76C3\u724C\u80CC\u80BA\u8F29\u914D\u500D\u57F9\u5A92\u6885"], + ["9480", "\u6973\u7164\u72FD\u8CB7\u58F2\u8CE0\u966A\u9019\u877F\u79E4\u77E7\u8429\u4F2F\u5265\u535A\u62CD\u67CF\u6CCA\u767D\u7B94\u7C95\u8236\u8584\u8FEB\u66DD\u6F20\u7206\u7E1B\u83AB\u99C1\u9EA6\u51FD\u7BB1\u7872\u7BB8\u8087\u7B48\u6AE8\u5E61\u808C\u7551\u7560\u516B\u9262\u6E8C\u767A\u9197\u9AEA\u4F10\u7F70\u629C\u7B4F\u95A5\u9CE9\u567A\u5859\u86E4\u96BC\u4F34\u5224\u534A\u53CD\u53DB\u5E06\u642C\u6591\u677F\u6C3E\u6C4E\u7248\u72AF\u73ED\u7554\u7E41\u822C\u85E9\u8CA9\u7BC4\u91C6\u7169\u9812\u98EF\u633D\u6669\u756A\u76E4\u78D0\u8543\u86EE\u532A\u5351\u5426\u5983\u5E87\u5F7C\u60B2\u6249\u6279\u62AB\u6590\u6BD4\u6CCC\u75B2\u76AE\u7891\u79D8\u7DCB\u7F77\u80A5\u88AB\u8AB9\u8CBB\u907F\u975E\u98DB\u6A0B\u7C38\u5099\u5C3E\u5FAE\u6787\u6BD8\u7435\u7709\u7F8E"], + ["9540", "\u9F3B\u67CA\u7A17\u5339\u758B\u9AED\u5F66\u819D\u83F1\u8098\u5F3C\u5FC5\u7562\u7B46\u903C\u6867\u59EB\u5A9B\u7D10\u767E\u8B2C\u4FF5\u5F6A\u6A19\u6C37\u6F02\u74E2\u7968\u8868\u8A55\u8C79\u5EDF\u63CF\u75C5\u79D2\u82D7\u9328\u92F2\u849C\u86ED\u9C2D\u54C1\u5F6C\u658C\u6D5C\u7015\u8CA7\u8CD3\u983B\u654F\u74F6\u4E0D\u4ED8\u57E0\u592B\u5A66\u5BCC\u51A8\u5E03\u5E9C\u6016\u6276\u6577"], + ["9580", "\u65A7\u666E\u6D6E\u7236\u7B26\u8150\u819A\u8299\u8B5C\u8CA0\u8CE6\u8D74\u961C\u9644\u4FAE\u64AB\u6B66\u821E\u8461\u856A\u90E8\u5C01\u6953\u98A8\u847A\u8557\u4F0F\u526F\u5FA9\u5E45\u670D\u798F\u8179\u8907\u8986\u6DF5\u5F17\u6255\u6CB8\u4ECF\u7269\u9B92\u5206\u543B\u5674\u58B3\u61A4\u626E\u711A\u596E\u7C89\u7CDE\u7D1B\u96F0\u6587\u805E\u4E19\u4F75\u5175\u5840\u5E63\u5E73\u5F0A\u67C4\u4E26\u853D\u9589\u965B\u7C73\u9801\u50FB\u58C1\u7656\u78A7\u5225\u77A5\u8511\u7B86\u504F\u5909\u7247\u7BC7\u7DE8\u8FBA\u8FD4\u904D\u4FBF\u52C9\u5A29\u5F01\u97AD\u4FDD\u8217\u92EA\u5703\u6355\u6B69\u752B\u88DC\u8F14\u7A42\u52DF\u5893\u6155\u620A\u66AE\u6BCD\u7C3F\u83E9\u5023\u4FF8\u5305\u5446\u5831\u5949\u5B9D\u5CF0\u5CEF\u5D29\u5E96\u62B1\u6367\u653E\u65B9\u670B"], + ["9640", "\u6CD5\u6CE1\u70F9\u7832\u7E2B\u80DE\u82B3\u840C\u84EC\u8702\u8912\u8A2A\u8C4A\u90A6\u92D2\u98FD\u9CF3\u9D6C\u4E4F\u4EA1\u508D\u5256\u574A\u59A8\u5E3D\u5FD8\u5FD9\u623F\u66B4\u671B\u67D0\u68D2\u5192\u7D21\u80AA\u81A8\u8B00\u8C8C\u8CBF\u927E\u9632\u5420\u982C\u5317\u50D5\u535C\u58A8\u64B2\u6734\u7267\u7766\u7A46\u91E6\u52C3\u6CA1\u6B86\u5800\u5E4C\u5954\u672C\u7FFB\u51E1\u76C6"], + ["9680", "\u6469\u78E8\u9B54\u9EBB\u57CB\u59B9\u6627\u679A\u6BCE\u54E9\u69D9\u5E55\u819C\u6795\u9BAA\u67FE\u9C52\u685D\u4EA6\u4FE3\u53C8\u62B9\u672B\u6CAB\u8FC4\u4FAD\u7E6D\u9EBF\u4E07\u6162\u6E80\u6F2B\u8513\u5473\u672A\u9B45\u5DF3\u7B95\u5CAC\u5BC6\u871C\u6E4A\u84D1\u7A14\u8108\u5999\u7C8D\u6C11\u7720\u52D9\u5922\u7121\u725F\u77DB\u9727\u9D61\u690B\u5A7F\u5A18\u51A5\u540D\u547D\u660E\u76DF\u8FF7\u9298\u9CF4\u59EA\u725D\u6EC5\u514D\u68C9\u7DBF\u7DEC\u9762\u9EBA\u6478\u6A21\u8302\u5984\u5B5F\u6BDB\u731B\u76F2\u7DB2\u8017\u8499\u5132\u6728\u9ED9\u76EE\u6762\u52FF\u9905\u5C24\u623B\u7C7E\u8CB0\u554F\u60B6\u7D0B\u9580\u5301\u4E5F\u51B6\u591C\u723A\u8036\u91CE\u5F25\u77E2\u5384\u5F79\u7D04\u85AC\u8A33\u8E8D\u9756\u67F3\u85AE\u9453\u6109\u6108\u6CB9\u7652"], + ["9740", "\u8AED\u8F38\u552F\u4F51\u512A\u52C7\u53CB\u5BA5\u5E7D\u60A0\u6182\u63D6\u6709\u67DA\u6E67\u6D8C\u7336\u7337\u7531\u7950\u88D5\u8A98\u904A\u9091\u90F5\u96C4\u878D\u5915\u4E88\u4F59\u4E0E\u8A89\u8F3F\u9810\u50AD\u5E7C\u5996\u5BB9\u5EB8\u63DA\u63FA\u64C1\u66DC\u694A\u69D8\u6D0B\u6EB6\u7194\u7528\u7AAF\u7F8A\u8000\u8449\u84C9\u8981\u8B21\u8E0A\u9065\u967D\u990A\u617E\u6291\u6B32"], + ["9780", "\u6C83\u6D74\u7FCC\u7FFC\u6DC0\u7F85\u87BA\u88F8\u6765\u83B1\u983C\u96F7\u6D1B\u7D61\u843D\u916A\u4E71\u5375\u5D50\u6B04\u6FEB\u85CD\u862D\u89A7\u5229\u540F\u5C65\u674E\u68A8\u7406\u7483\u75E2\u88CF\u88E1\u91CC\u96E2\u9678\u5F8B\u7387\u7ACB\u844E\u63A0\u7565\u5289\u6D41\u6E9C\u7409\u7559\u786B\u7C92\u9686\u7ADC\u9F8D\u4FB6\u616E\u65C5\u865C\u4E86\u4EAE\u50DA\u4E21\u51CC\u5BEE\u6599\u6881\u6DBC\u731F\u7642\u77AD\u7A1C\u7CE7\u826F\u8AD2\u907C\u91CF\u9675\u9818\u529B\u7DD1\u502B\u5398\u6797\u6DCB\u71D0\u7433\u81E8\u8F2A\u96A3\u9C57\u9E9F\u7460\u5841\u6D99\u7D2F\u985E\u4EE4\u4F36\u4F8B\u51B7\u52B1\u5DBA\u601C\u73B2\u793C\u82D3\u9234\u96B7\u96F6\u970A\u9E97\u9F62\u66A6\u6B74\u5217\u52A3\u70C8\u88C2\u5EC9\u604B\u6190\u6F23\u7149\u7C3E\u7DF4\u806F"], + ["9840", "\u84EE\u9023\u932C\u5442\u9B6F\u6AD3\u7089\u8CC2\u8DEF\u9732\u52B4\u5A41\u5ECA\u5F04\u6717\u697C\u6994\u6D6A\u6F0F\u7262\u72FC\u7BED\u8001\u807E\u874B\u90CE\u516D\u9E93\u7984\u808B\u9332\u8AD6\u502D\u548C\u8A71\u6B6A\u8CC4\u8107\u60D1\u67A0\u9DF2\u4E99\u4E98\u9C10\u8A6B\u85C1\u8568\u6900\u6E7E\u7897\u8155"], + ["989f", "\u5F0C\u4E10\u4E15\u4E2A\u4E31\u4E36\u4E3C\u4E3F\u4E42\u4E56\u4E58\u4E82\u4E85\u8C6B\u4E8A\u8212\u5F0D\u4E8E\u4E9E\u4E9F\u4EA0\u4EA2\u4EB0\u4EB3\u4EB6\u4ECE\u4ECD\u4EC4\u4EC6\u4EC2\u4ED7\u4EDE\u4EED\u4EDF\u4EF7\u4F09\u4F5A\u4F30\u4F5B\u4F5D\u4F57\u4F47\u4F76\u4F88\u4F8F\u4F98\u4F7B\u4F69\u4F70\u4F91\u4F6F\u4F86\u4F96\u5118\u4FD4\u4FDF\u4FCE\u4FD8\u4FDB\u4FD1\u4FDA\u4FD0\u4FE4\u4FE5\u501A\u5028\u5014\u502A\u5025\u5005\u4F1C\u4FF6\u5021\u5029\u502C\u4FFE\u4FEF\u5011\u5006\u5043\u5047\u6703\u5055\u5050\u5048\u505A\u5056\u506C\u5078\u5080\u509A\u5085\u50B4\u50B2"], + ["9940", "\u50C9\u50CA\u50B3\u50C2\u50D6\u50DE\u50E5\u50ED\u50E3\u50EE\u50F9\u50F5\u5109\u5101\u5102\u5116\u5115\u5114\u511A\u5121\u513A\u5137\u513C\u513B\u513F\u5140\u5152\u514C\u5154\u5162\u7AF8\u5169\u516A\u516E\u5180\u5182\u56D8\u518C\u5189\u518F\u5191\u5193\u5195\u5196\u51A4\u51A6\u51A2\u51A9\u51AA\u51AB\u51B3\u51B1\u51B2\u51B0\u51B5\u51BD\u51C5\u51C9\u51DB\u51E0\u8655\u51E9\u51ED"], + ["9980", "\u51F0\u51F5\u51FE\u5204\u520B\u5214\u520E\u5227\u522A\u522E\u5233\u5239\u524F\u5244\u524B\u524C\u525E\u5254\u526A\u5274\u5269\u5273\u527F\u527D\u528D\u5294\u5292\u5271\u5288\u5291\u8FA8\u8FA7\u52AC\u52AD\u52BC\u52B5\u52C1\u52CD\u52D7\u52DE\u52E3\u52E6\u98ED\u52E0\u52F3\u52F5\u52F8\u52F9\u5306\u5308\u7538\u530D\u5310\u530F\u5315\u531A\u5323\u532F\u5331\u5333\u5338\u5340\u5346\u5345\u4E17\u5349\u534D\u51D6\u535E\u5369\u536E\u5918\u537B\u5377\u5382\u5396\u53A0\u53A6\u53A5\u53AE\u53B0\u53B6\u53C3\u7C12\u96D9\u53DF\u66FC\u71EE\u53EE\u53E8\u53ED\u53FA\u5401\u543D\u5440\u542C\u542D\u543C\u542E\u5436\u5429\u541D\u544E\u548F\u5475\u548E\u545F\u5471\u5477\u5470\u5492\u547B\u5480\u5476\u5484\u5490\u5486\u54C7\u54A2\u54B8\u54A5\u54AC\u54C4\u54C8\u54A8"], + ["9a40", "\u54AB\u54C2\u54A4\u54BE\u54BC\u54D8\u54E5\u54E6\u550F\u5514\u54FD\u54EE\u54ED\u54FA\u54E2\u5539\u5540\u5563\u554C\u552E\u555C\u5545\u5556\u5557\u5538\u5533\u555D\u5599\u5580\u54AF\u558A\u559F\u557B\u557E\u5598\u559E\u55AE\u557C\u5583\u55A9\u5587\u55A8\u55DA\u55C5\u55DF\u55C4\u55DC\u55E4\u55D4\u5614\u55F7\u5616\u55FE\u55FD\u561B\u55F9\u564E\u5650\u71DF\u5634\u5636\u5632\u5638"], + ["9a80", "\u566B\u5664\u562F\u566C\u566A\u5686\u5680\u568A\u56A0\u5694\u568F\u56A5\u56AE\u56B6\u56B4\u56C2\u56BC\u56C1\u56C3\u56C0\u56C8\u56CE\u56D1\u56D3\u56D7\u56EE\u56F9\u5700\u56FF\u5704\u5709\u5708\u570B\u570D\u5713\u5718\u5716\u55C7\u571C\u5726\u5737\u5738\u574E\u573B\u5740\u574F\u5769\u57C0\u5788\u5761\u577F\u5789\u5793\u57A0\u57B3\u57A4\u57AA\u57B0\u57C3\u57C6\u57D4\u57D2\u57D3\u580A\u57D6\u57E3\u580B\u5819\u581D\u5872\u5821\u5862\u584B\u5870\u6BC0\u5852\u583D\u5879\u5885\u58B9\u589F\u58AB\u58BA\u58DE\u58BB\u58B8\u58AE\u58C5\u58D3\u58D1\u58D7\u58D9\u58D8\u58E5\u58DC\u58E4\u58DF\u58EF\u58FA\u58F9\u58FB\u58FC\u58FD\u5902\u590A\u5910\u591B\u68A6\u5925\u592C\u592D\u5932\u5938\u593E\u7AD2\u5955\u5950\u594E\u595A\u5958\u5962\u5960\u5967\u596C\u5969"], + ["9b40", "\u5978\u5981\u599D\u4F5E\u4FAB\u59A3\u59B2\u59C6\u59E8\u59DC\u598D\u59D9\u59DA\u5A25\u5A1F\u5A11\u5A1C\u5A09\u5A1A\u5A40\u5A6C\u5A49\u5A35\u5A36\u5A62\u5A6A\u5A9A\u5ABC\u5ABE\u5ACB\u5AC2\u5ABD\u5AE3\u5AD7\u5AE6\u5AE9\u5AD6\u5AFA\u5AFB\u5B0C\u5B0B\u5B16\u5B32\u5AD0\u5B2A\u5B36\u5B3E\u5B43\u5B45\u5B40\u5B51\u5B55\u5B5A\u5B5B\u5B65\u5B69\u5B70\u5B73\u5B75\u5B78\u6588\u5B7A\u5B80"], + ["9b80", "\u5B83\u5BA6\u5BB8\u5BC3\u5BC7\u5BC9\u5BD4\u5BD0\u5BE4\u5BE6\u5BE2\u5BDE\u5BE5\u5BEB\u5BF0\u5BF6\u5BF3\u5C05\u5C07\u5C08\u5C0D\u5C13\u5C20\u5C22\u5C28\u5C38\u5C39\u5C41\u5C46\u5C4E\u5C53\u5C50\u5C4F\u5B71\u5C6C\u5C6E\u4E62\u5C76\u5C79\u5C8C\u5C91\u5C94\u599B\u5CAB\u5CBB\u5CB6\u5CBC\u5CB7\u5CC5\u5CBE\u5CC7\u5CD9\u5CE9\u5CFD\u5CFA\u5CED\u5D8C\u5CEA\u5D0B\u5D15\u5D17\u5D5C\u5D1F\u5D1B\u5D11\u5D14\u5D22\u5D1A\u5D19\u5D18\u5D4C\u5D52\u5D4E\u5D4B\u5D6C\u5D73\u5D76\u5D87\u5D84\u5D82\u5DA2\u5D9D\u5DAC\u5DAE\u5DBD\u5D90\u5DB7\u5DBC\u5DC9\u5DCD\u5DD3\u5DD2\u5DD6\u5DDB\u5DEB\u5DF2\u5DF5\u5E0B\u5E1A\u5E19\u5E11\u5E1B\u5E36\u5E37\u5E44\u5E43\u5E40\u5E4E\u5E57\u5E54\u5E5F\u5E62\u5E64\u5E47\u5E75\u5E76\u5E7A\u9EBC\u5E7F\u5EA0\u5EC1\u5EC2\u5EC8\u5ED0\u5ECF"], + ["9c40", "\u5ED6\u5EE3\u5EDD\u5EDA\u5EDB\u5EE2\u5EE1\u5EE8\u5EE9\u5EEC\u5EF1\u5EF3\u5EF0\u5EF4\u5EF8\u5EFE\u5F03\u5F09\u5F5D\u5F5C\u5F0B\u5F11\u5F16\u5F29\u5F2D\u5F38\u5F41\u5F48\u5F4C\u5F4E\u5F2F\u5F51\u5F56\u5F57\u5F59\u5F61\u5F6D\u5F73\u5F77\u5F83\u5F82\u5F7F\u5F8A\u5F88\u5F91\u5F87\u5F9E\u5F99\u5F98\u5FA0\u5FA8\u5FAD\u5FBC\u5FD6\u5FFB\u5FE4\u5FF8\u5FF1\u5FDD\u60B3\u5FFF\u6021\u6060"], + ["9c80", "\u6019\u6010\u6029\u600E\u6031\u601B\u6015\u602B\u6026\u600F\u603A\u605A\u6041\u606A\u6077\u605F\u604A\u6046\u604D\u6063\u6043\u6064\u6042\u606C\u606B\u6059\u6081\u608D\u60E7\u6083\u609A\u6084\u609B\u6096\u6097\u6092\u60A7\u608B\u60E1\u60B8\u60E0\u60D3\u60B4\u5FF0\u60BD\u60C6\u60B5\u60D8\u614D\u6115\u6106\u60F6\u60F7\u6100\u60F4\u60FA\u6103\u6121\u60FB\u60F1\u610D\u610E\u6147\u613E\u6128\u6127\u614A\u613F\u613C\u612C\u6134\u613D\u6142\u6144\u6173\u6177\u6158\u6159\u615A\u616B\u6174\u616F\u6165\u6171\u615F\u615D\u6153\u6175\u6199\u6196\u6187\u61AC\u6194\u619A\u618A\u6191\u61AB\u61AE\u61CC\u61CA\u61C9\u61F7\u61C8\u61C3\u61C6\u61BA\u61CB\u7F79\u61CD\u61E6\u61E3\u61F6\u61FA\u61F4\u61FF\u61FD\u61FC\u61FE\u6200\u6208\u6209\u620D\u620C\u6214\u621B"], + ["9d40", "\u621E\u6221\u622A\u622E\u6230\u6232\u6233\u6241\u624E\u625E\u6263\u625B\u6260\u6268\u627C\u6282\u6289\u627E\u6292\u6293\u6296\u62D4\u6283\u6294\u62D7\u62D1\u62BB\u62CF\u62FF\u62C6\u64D4\u62C8\u62DC\u62CC\u62CA\u62C2\u62C7\u629B\u62C9\u630C\u62EE\u62F1\u6327\u6302\u6308\u62EF\u62F5\u6350\u633E\u634D\u641C\u634F\u6396\u638E\u6380\u63AB\u6376\u63A3\u638F\u6389\u639F\u63B5\u636B"], + ["9d80", "\u6369\u63BE\u63E9\u63C0\u63C6\u63E3\u63C9\u63D2\u63F6\u63C4\u6416\u6434\u6406\u6413\u6426\u6436\u651D\u6417\u6428\u640F\u6467\u646F\u6476\u644E\u652A\u6495\u6493\u64A5\u64A9\u6488\u64BC\u64DA\u64D2\u64C5\u64C7\u64BB\u64D8\u64C2\u64F1\u64E7\u8209\u64E0\u64E1\u62AC\u64E3\u64EF\u652C\u64F6\u64F4\u64F2\u64FA\u6500\u64FD\u6518\u651C\u6505\u6524\u6523\u652B\u6534\u6535\u6537\u6536\u6538\u754B\u6548\u6556\u6555\u654D\u6558\u655E\u655D\u6572\u6578\u6582\u6583\u8B8A\u659B\u659F\u65AB\u65B7\u65C3\u65C6\u65C1\u65C4\u65CC\u65D2\u65DB\u65D9\u65E0\u65E1\u65F1\u6772\u660A\u6603\u65FB\u6773\u6635\u6636\u6634\u661C\u664F\u6644\u6649\u6641\u665E\u665D\u6664\u6667\u6668\u665F\u6662\u6670\u6683\u6688\u668E\u6689\u6684\u6698\u669D\u66C1\u66B9\u66C9\u66BE\u66BC"], + ["9e40", "\u66C4\u66B8\u66D6\u66DA\u66E0\u663F\u66E6\u66E9\u66F0\u66F5\u66F7\u670F\u6716\u671E\u6726\u6727\u9738\u672E\u673F\u6736\u6741\u6738\u6737\u6746\u675E\u6760\u6759\u6763\u6764\u6789\u6770\u67A9\u677C\u676A\u678C\u678B\u67A6\u67A1\u6785\u67B7\u67EF\u67B4\u67EC\u67B3\u67E9\u67B8\u67E4\u67DE\u67DD\u67E2\u67EE\u67B9\u67CE\u67C6\u67E7\u6A9C\u681E\u6846\u6829\u6840\u684D\u6832\u684E"], + ["9e80", "\u68B3\u682B\u6859\u6863\u6877\u687F\u689F\u688F\u68AD\u6894\u689D\u689B\u6883\u6AAE\u68B9\u6874\u68B5\u68A0\u68BA\u690F\u688D\u687E\u6901\u68CA\u6908\u68D8\u6922\u6926\u68E1\u690C\u68CD\u68D4\u68E7\u68D5\u6936\u6912\u6904\u68D7\u68E3\u6925\u68F9\u68E0\u68EF\u6928\u692A\u691A\u6923\u6921\u68C6\u6979\u6977\u695C\u6978\u696B\u6954\u697E\u696E\u6939\u6974\u693D\u6959\u6930\u6961\u695E\u695D\u6981\u696A\u69B2\u69AE\u69D0\u69BF\u69C1\u69D3\u69BE\u69CE\u5BE8\u69CA\u69DD\u69BB\u69C3\u69A7\u6A2E\u6991\u69A0\u699C\u6995\u69B4\u69DE\u69E8\u6A02\u6A1B\u69FF\u6B0A\u69F9\u69F2\u69E7\u6A05\u69B1\u6A1E\u69ED\u6A14\u69EB\u6A0A\u6A12\u6AC1\u6A23\u6A13\u6A44\u6A0C\u6A72\u6A36\u6A78\u6A47\u6A62\u6A59\u6A66\u6A48\u6A38\u6A22\u6A90\u6A8D\u6AA0\u6A84\u6AA2\u6AA3"], + ["9f40", "\u6A97\u8617\u6ABB\u6AC3\u6AC2\u6AB8\u6AB3\u6AAC\u6ADE\u6AD1\u6ADF\u6AAA\u6ADA\u6AEA\u6AFB\u6B05\u8616\u6AFA\u6B12\u6B16\u9B31\u6B1F\u6B38\u6B37\u76DC\u6B39\u98EE\u6B47\u6B43\u6B49\u6B50\u6B59\u6B54\u6B5B\u6B5F\u6B61\u6B78\u6B79\u6B7F\u6B80\u6B84\u6B83\u6B8D\u6B98\u6B95\u6B9E\u6BA4\u6BAA\u6BAB\u6BAF\u6BB2\u6BB1\u6BB3\u6BB7\u6BBC\u6BC6\u6BCB\u6BD3\u6BDF\u6BEC\u6BEB\u6BF3\u6BEF"], + ["9f80", "\u9EBE\u6C08\u6C13\u6C14\u6C1B\u6C24\u6C23\u6C5E\u6C55\u6C62\u6C6A\u6C82\u6C8D\u6C9A\u6C81\u6C9B\u6C7E\u6C68\u6C73\u6C92\u6C90\u6CC4\u6CF1\u6CD3\u6CBD\u6CD7\u6CC5\u6CDD\u6CAE\u6CB1\u6CBE\u6CBA\u6CDB\u6CEF\u6CD9\u6CEA\u6D1F\u884D\u6D36\u6D2B\u6D3D\u6D38\u6D19\u6D35\u6D33\u6D12\u6D0C\u6D63\u6D93\u6D64\u6D5A\u6D79\u6D59\u6D8E\u6D95\u6FE4\u6D85\u6DF9\u6E15\u6E0A\u6DB5\u6DC7\u6DE6\u6DB8\u6DC6\u6DEC\u6DDE\u6DCC\u6DE8\u6DD2\u6DC5\u6DFA\u6DD9\u6DE4\u6DD5\u6DEA\u6DEE\u6E2D\u6E6E\u6E2E\u6E19\u6E72\u6E5F\u6E3E\u6E23\u6E6B\u6E2B\u6E76\u6E4D\u6E1F\u6E43\u6E3A\u6E4E\u6E24\u6EFF\u6E1D\u6E38\u6E82\u6EAA\u6E98\u6EC9\u6EB7\u6ED3\u6EBD\u6EAF\u6EC4\u6EB2\u6ED4\u6ED5\u6E8F\u6EA5\u6EC2\u6E9F\u6F41\u6F11\u704C\u6EEC\u6EF8\u6EFE\u6F3F\u6EF2\u6F31\u6EEF\u6F32\u6ECC"], + ["e040", "\u6F3E\u6F13\u6EF7\u6F86\u6F7A\u6F78\u6F81\u6F80\u6F6F\u6F5B\u6FF3\u6F6D\u6F82\u6F7C\u6F58\u6F8E\u6F91\u6FC2\u6F66\u6FB3\u6FA3\u6FA1\u6FA4\u6FB9\u6FC6\u6FAA\u6FDF\u6FD5\u6FEC\u6FD4\u6FD8\u6FF1\u6FEE\u6FDB\u7009\u700B\u6FFA\u7011\u7001\u700F\u6FFE\u701B\u701A\u6F74\u701D\u7018\u701F\u7030\u703E\u7032\u7051\u7063\u7099\u7092\u70AF\u70F1\u70AC\u70B8\u70B3\u70AE\u70DF\u70CB\u70DD"], + ["e080", "\u70D9\u7109\u70FD\u711C\u7119\u7165\u7155\u7188\u7166\u7162\u714C\u7156\u716C\u718F\u71FB\u7184\u7195\u71A8\u71AC\u71D7\u71B9\u71BE\u71D2\u71C9\u71D4\u71CE\u71E0\u71EC\u71E7\u71F5\u71FC\u71F9\u71FF\u720D\u7210\u721B\u7228\u722D\u722C\u7230\u7232\u723B\u723C\u723F\u7240\u7246\u724B\u7258\u7274\u727E\u7282\u7281\u7287\u7292\u7296\u72A2\u72A7\u72B9\u72B2\u72C3\u72C6\u72C4\u72CE\u72D2\u72E2\u72E0\u72E1\u72F9\u72F7\u500F\u7317\u730A\u731C\u7316\u731D\u7334\u732F\u7329\u7325\u733E\u734E\u734F\u9ED8\u7357\u736A\u7368\u7370\u7378\u7375\u737B\u737A\u73C8\u73B3\u73CE\u73BB\u73C0\u73E5\u73EE\u73DE\u74A2\u7405\u746F\u7425\u73F8\u7432\u743A\u7455\u743F\u745F\u7459\u7441\u745C\u7469\u7470\u7463\u746A\u7476\u747E\u748B\u749E\u74A7\u74CA\u74CF\u74D4\u73F1"], + ["e140", "\u74E0\u74E3\u74E7\u74E9\u74EE\u74F2\u74F0\u74F1\u74F8\u74F7\u7504\u7503\u7505\u750C\u750E\u750D\u7515\u7513\u751E\u7526\u752C\u753C\u7544\u754D\u754A\u7549\u755B\u7546\u755A\u7569\u7564\u7567\u756B\u756D\u7578\u7576\u7586\u7587\u7574\u758A\u7589\u7582\u7594\u759A\u759D\u75A5\u75A3\u75C2\u75B3\u75C3\u75B5\u75BD\u75B8\u75BC\u75B1\u75CD\u75CA\u75D2\u75D9\u75E3\u75DE\u75FE\u75FF"], + ["e180", "\u75FC\u7601\u75F0\u75FA\u75F2\u75F3\u760B\u760D\u7609\u761F\u7627\u7620\u7621\u7622\u7624\u7634\u7630\u763B\u7647\u7648\u7646\u765C\u7658\u7661\u7662\u7668\u7669\u766A\u7667\u766C\u7670\u7672\u7676\u7678\u767C\u7680\u7683\u7688\u768B\u768E\u7696\u7693\u7699\u769A\u76B0\u76B4\u76B8\u76B9\u76BA\u76C2\u76CD\u76D6\u76D2\u76DE\u76E1\u76E5\u76E7\u76EA\u862F\u76FB\u7708\u7707\u7704\u7729\u7724\u771E\u7725\u7726\u771B\u7737\u7738\u7747\u775A\u7768\u776B\u775B\u7765\u777F\u777E\u7779\u778E\u778B\u7791\u77A0\u779E\u77B0\u77B6\u77B9\u77BF\u77BC\u77BD\u77BB\u77C7\u77CD\u77D7\u77DA\u77DC\u77E3\u77EE\u77FC\u780C\u7812\u7926\u7820\u792A\u7845\u788E\u7874\u7886\u787C\u789A\u788C\u78A3\u78B5\u78AA\u78AF\u78D1\u78C6\u78CB\u78D4\u78BE\u78BC\u78C5\u78CA\u78EC"], + ["e240", "\u78E7\u78DA\u78FD\u78F4\u7907\u7912\u7911\u7919\u792C\u792B\u7940\u7960\u7957\u795F\u795A\u7955\u7953\u797A\u797F\u798A\u799D\u79A7\u9F4B\u79AA\u79AE\u79B3\u79B9\u79BA\u79C9\u79D5\u79E7\u79EC\u79E1\u79E3\u7A08\u7A0D\u7A18\u7A19\u7A20\u7A1F\u7980\u7A31\u7A3B\u7A3E\u7A37\u7A43\u7A57\u7A49\u7A61\u7A62\u7A69\u9F9D\u7A70\u7A79\u7A7D\u7A88\u7A97\u7A95\u7A98\u7A96\u7AA9\u7AC8\u7AB0"], + ["e280", "\u7AB6\u7AC5\u7AC4\u7ABF\u9083\u7AC7\u7ACA\u7ACD\u7ACF\u7AD5\u7AD3\u7AD9\u7ADA\u7ADD\u7AE1\u7AE2\u7AE6\u7AED\u7AF0\u7B02\u7B0F\u7B0A\u7B06\u7B33\u7B18\u7B19\u7B1E\u7B35\u7B28\u7B36\u7B50\u7B7A\u7B04\u7B4D\u7B0B\u7B4C\u7B45\u7B75\u7B65\u7B74\u7B67\u7B70\u7B71\u7B6C\u7B6E\u7B9D\u7B98\u7B9F\u7B8D\u7B9C\u7B9A\u7B8B\u7B92\u7B8F\u7B5D\u7B99\u7BCB\u7BC1\u7BCC\u7BCF\u7BB4\u7BC6\u7BDD\u7BE9\u7C11\u7C14\u7BE6\u7BE5\u7C60\u7C00\u7C07\u7C13\u7BF3\u7BF7\u7C17\u7C0D\u7BF6\u7C23\u7C27\u7C2A\u7C1F\u7C37\u7C2B\u7C3D\u7C4C\u7C43\u7C54\u7C4F\u7C40\u7C50\u7C58\u7C5F\u7C64\u7C56\u7C65\u7C6C\u7C75\u7C83\u7C90\u7CA4\u7CAD\u7CA2\u7CAB\u7CA1\u7CA8\u7CB3\u7CB2\u7CB1\u7CAE\u7CB9\u7CBD\u7CC0\u7CC5\u7CC2\u7CD8\u7CD2\u7CDC\u7CE2\u9B3B\u7CEF\u7CF2\u7CF4\u7CF6\u7CFA\u7D06"], + ["e340", "\u7D02\u7D1C\u7D15\u7D0A\u7D45\u7D4B\u7D2E\u7D32\u7D3F\u7D35\u7D46\u7D73\u7D56\u7D4E\u7D72\u7D68\u7D6E\u7D4F\u7D63\u7D93\u7D89\u7D5B\u7D8F\u7D7D\u7D9B\u7DBA\u7DAE\u7DA3\u7DB5\u7DC7\u7DBD\u7DAB\u7E3D\u7DA2\u7DAF\u7DDC\u7DB8\u7D9F\u7DB0\u7DD8\u7DDD\u7DE4\u7DDE\u7DFB\u7DF2\u7DE1\u7E05\u7E0A\u7E23\u7E21\u7E12\u7E31\u7E1F\u7E09\u7E0B\u7E22\u7E46\u7E66\u7E3B\u7E35\u7E39\u7E43\u7E37"], + ["e380", "\u7E32\u7E3A\u7E67\u7E5D\u7E56\u7E5E\u7E59\u7E5A\u7E79\u7E6A\u7E69\u7E7C\u7E7B\u7E83\u7DD5\u7E7D\u8FAE\u7E7F\u7E88\u7E89\u7E8C\u7E92\u7E90\u7E93\u7E94\u7E96\u7E8E\u7E9B\u7E9C\u7F38\u7F3A\u7F45\u7F4C\u7F4D\u7F4E\u7F50\u7F51\u7F55\u7F54\u7F58\u7F5F\u7F60\u7F68\u7F69\u7F67\u7F78\u7F82\u7F86\u7F83\u7F88\u7F87\u7F8C\u7F94\u7F9E\u7F9D\u7F9A\u7FA3\u7FAF\u7FB2\u7FB9\u7FAE\u7FB6\u7FB8\u8B71\u7FC5\u7FC6\u7FCA\u7FD5\u7FD4\u7FE1\u7FE6\u7FE9\u7FF3\u7FF9\u98DC\u8006\u8004\u800B\u8012\u8018\u8019\u801C\u8021\u8028\u803F\u803B\u804A\u8046\u8052\u8058\u805A\u805F\u8062\u8068\u8073\u8072\u8070\u8076\u8079\u807D\u807F\u8084\u8086\u8085\u809B\u8093\u809A\u80AD\u5190\u80AC\u80DB\u80E5\u80D9\u80DD\u80C4\u80DA\u80D6\u8109\u80EF\u80F1\u811B\u8129\u8123\u812F\u814B"], + ["e440", "\u968B\u8146\u813E\u8153\u8151\u80FC\u8171\u816E\u8165\u8166\u8174\u8183\u8188\u818A\u8180\u8182\u81A0\u8195\u81A4\u81A3\u815F\u8193\u81A9\u81B0\u81B5\u81BE\u81B8\u81BD\u81C0\u81C2\u81BA\u81C9\u81CD\u81D1\u81D9\u81D8\u81C8\u81DA\u81DF\u81E0\u81E7\u81FA\u81FB\u81FE\u8201\u8202\u8205\u8207\u820A\u820D\u8210\u8216\u8229\u822B\u8238\u8233\u8240\u8259\u8258\u825D\u825A\u825F\u8264"], + ["e480", "\u8262\u8268\u826A\u826B\u822E\u8271\u8277\u8278\u827E\u828D\u8292\u82AB\u829F\u82BB\u82AC\u82E1\u82E3\u82DF\u82D2\u82F4\u82F3\u82FA\u8393\u8303\u82FB\u82F9\u82DE\u8306\u82DC\u8309\u82D9\u8335\u8334\u8316\u8332\u8331\u8340\u8339\u8350\u8345\u832F\u832B\u8317\u8318\u8385\u839A\u83AA\u839F\u83A2\u8396\u8323\u838E\u8387\u838A\u837C\u83B5\u8373\u8375\u83A0\u8389\u83A8\u83F4\u8413\u83EB\u83CE\u83FD\u8403\u83D8\u840B\u83C1\u83F7\u8407\u83E0\u83F2\u840D\u8422\u8420\u83BD\u8438\u8506\u83FB\u846D\u842A\u843C\u855A\u8484\u8477\u846B\u84AD\u846E\u8482\u8469\u8446\u842C\u846F\u8479\u8435\u84CA\u8462\u84B9\u84BF\u849F\u84D9\u84CD\u84BB\u84DA\u84D0\u84C1\u84C6\u84D6\u84A1\u8521\u84FF\u84F4\u8517\u8518\u852C\u851F\u8515\u8514\u84FC\u8540\u8563\u8558\u8548"], + ["e540", "\u8541\u8602\u854B\u8555\u8580\u85A4\u8588\u8591\u858A\u85A8\u856D\u8594\u859B\u85EA\u8587\u859C\u8577\u857E\u8590\u85C9\u85BA\u85CF\u85B9\u85D0\u85D5\u85DD\u85E5\u85DC\u85F9\u860A\u8613\u860B\u85FE\u85FA\u8606\u8622\u861A\u8630\u863F\u864D\u4E55\u8654\u865F\u8667\u8671\u8693\u86A3\u86A9\u86AA\u868B\u868C\u86B6\u86AF\u86C4\u86C6\u86B0\u86C9\u8823\u86AB\u86D4\u86DE\u86E9\u86EC"], + ["e580", "\u86DF\u86DB\u86EF\u8712\u8706\u8708\u8700\u8703\u86FB\u8711\u8709\u870D\u86F9\u870A\u8734\u873F\u8737\u873B\u8725\u8729\u871A\u8760\u875F\u8778\u874C\u874E\u8774\u8757\u8768\u876E\u8759\u8753\u8763\u876A\u8805\u87A2\u879F\u8782\u87AF\u87CB\u87BD\u87C0\u87D0\u96D6\u87AB\u87C4\u87B3\u87C7\u87C6\u87BB\u87EF\u87F2\u87E0\u880F\u880D\u87FE\u87F6\u87F7\u880E\u87D2\u8811\u8816\u8815\u8822\u8821\u8831\u8836\u8839\u8827\u883B\u8844\u8842\u8852\u8859\u885E\u8862\u886B\u8881\u887E\u889E\u8875\u887D\u88B5\u8872\u8882\u8897\u8892\u88AE\u8899\u88A2\u888D\u88A4\u88B0\u88BF\u88B1\u88C3\u88C4\u88D4\u88D8\u88D9\u88DD\u88F9\u8902\u88FC\u88F4\u88E8\u88F2\u8904\u890C\u890A\u8913\u8943\u891E\u8925\u892A\u892B\u8941\u8944\u893B\u8936\u8938\u894C\u891D\u8960\u895E"], + ["e640", "\u8966\u8964\u896D\u896A\u896F\u8974\u8977\u897E\u8983\u8988\u898A\u8993\u8998\u89A1\u89A9\u89A6\u89AC\u89AF\u89B2\u89BA\u89BD\u89BF\u89C0\u89DA\u89DC\u89DD\u89E7\u89F4\u89F8\u8A03\u8A16\u8A10\u8A0C\u8A1B\u8A1D\u8A25\u8A36\u8A41\u8A5B\u8A52\u8A46\u8A48\u8A7C\u8A6D\u8A6C\u8A62\u8A85\u8A82\u8A84\u8AA8\u8AA1\u8A91\u8AA5\u8AA6\u8A9A\u8AA3\u8AC4\u8ACD\u8AC2\u8ADA\u8AEB\u8AF3\u8AE7"], + ["e680", "\u8AE4\u8AF1\u8B14\u8AE0\u8AE2\u8AF7\u8ADE\u8ADB\u8B0C\u8B07\u8B1A\u8AE1\u8B16\u8B10\u8B17\u8B20\u8B33\u97AB\u8B26\u8B2B\u8B3E\u8B28\u8B41\u8B4C\u8B4F\u8B4E\u8B49\u8B56\u8B5B\u8B5A\u8B6B\u8B5F\u8B6C\u8B6F\u8B74\u8B7D\u8B80\u8B8C\u8B8E\u8B92\u8B93\u8B96\u8B99\u8B9A\u8C3A\u8C41\u8C3F\u8C48\u8C4C\u8C4E\u8C50\u8C55\u8C62\u8C6C\u8C78\u8C7A\u8C82\u8C89\u8C85\u8C8A\u8C8D\u8C8E\u8C94\u8C7C\u8C98\u621D\u8CAD\u8CAA\u8CBD\u8CB2\u8CB3\u8CAE\u8CB6\u8CC8\u8CC1\u8CE4\u8CE3\u8CDA\u8CFD\u8CFA\u8CFB\u8D04\u8D05\u8D0A\u8D07\u8D0F\u8D0D\u8D10\u9F4E\u8D13\u8CCD\u8D14\u8D16\u8D67\u8D6D\u8D71\u8D73\u8D81\u8D99\u8DC2\u8DBE\u8DBA\u8DCF\u8DDA\u8DD6\u8DCC\u8DDB\u8DCB\u8DEA\u8DEB\u8DDF\u8DE3\u8DFC\u8E08\u8E09\u8DFF\u8E1D\u8E1E\u8E10\u8E1F\u8E42\u8E35\u8E30\u8E34\u8E4A"], + ["e740", "\u8E47\u8E49\u8E4C\u8E50\u8E48\u8E59\u8E64\u8E60\u8E2A\u8E63\u8E55\u8E76\u8E72\u8E7C\u8E81\u8E87\u8E85\u8E84\u8E8B\u8E8A\u8E93\u8E91\u8E94\u8E99\u8EAA\u8EA1\u8EAC\u8EB0\u8EC6\u8EB1\u8EBE\u8EC5\u8EC8\u8ECB\u8EDB\u8EE3\u8EFC\u8EFB\u8EEB\u8EFE\u8F0A\u8F05\u8F15\u8F12\u8F19\u8F13\u8F1C\u8F1F\u8F1B\u8F0C\u8F26\u8F33\u8F3B\u8F39\u8F45\u8F42\u8F3E\u8F4C\u8F49\u8F46\u8F4E\u8F57\u8F5C"], + ["e780", "\u8F62\u8F63\u8F64\u8F9C\u8F9F\u8FA3\u8FAD\u8FAF\u8FB7\u8FDA\u8FE5\u8FE2\u8FEA\u8FEF\u9087\u8FF4\u9005\u8FF9\u8FFA\u9011\u9015\u9021\u900D\u901E\u9016\u900B\u9027\u9036\u9035\u9039\u8FF8\u904F\u9050\u9051\u9052\u900E\u9049\u903E\u9056\u9058\u905E\u9068\u906F\u9076\u96A8\u9072\u9082\u907D\u9081\u9080\u908A\u9089\u908F\u90A8\u90AF\u90B1\u90B5\u90E2\u90E4\u6248\u90DB\u9102\u9112\u9119\u9132\u9130\u914A\u9156\u9158\u9163\u9165\u9169\u9173\u9172\u918B\u9189\u9182\u91A2\u91AB\u91AF\u91AA\u91B5\u91B4\u91BA\u91C0\u91C1\u91C9\u91CB\u91D0\u91D6\u91DF\u91E1\u91DB\u91FC\u91F5\u91F6\u921E\u91FF\u9214\u922C\u9215\u9211\u925E\u9257\u9245\u9249\u9264\u9248\u9295\u923F\u924B\u9250\u929C\u9296\u9293\u929B\u925A\u92CF\u92B9\u92B7\u92E9\u930F\u92FA\u9344\u932E"], + ["e840", "\u9319\u9322\u931A\u9323\u933A\u9335\u933B\u935C\u9360\u937C\u936E\u9356\u93B0\u93AC\u93AD\u9394\u93B9\u93D6\u93D7\u93E8\u93E5\u93D8\u93C3\u93DD\u93D0\u93C8\u93E4\u941A\u9414\u9413\u9403\u9407\u9410\u9436\u942B\u9435\u9421\u943A\u9441\u9452\u9444\u945B\u9460\u9462\u945E\u946A\u9229\u9470\u9475\u9477\u947D\u945A\u947C\u947E\u9481\u947F\u9582\u9587\u958A\u9594\u9596\u9598\u9599"], + ["e880", "\u95A0\u95A8\u95A7\u95AD\u95BC\u95BB\u95B9\u95BE\u95CA\u6FF6\u95C3\u95CD\u95CC\u95D5\u95D4\u95D6\u95DC\u95E1\u95E5\u95E2\u9621\u9628\u962E\u962F\u9642\u964C\u964F\u964B\u9677\u965C\u965E\u965D\u965F\u9666\u9672\u966C\u968D\u9698\u9695\u9697\u96AA\u96A7\u96B1\u96B2\u96B0\u96B4\u96B6\u96B8\u96B9\u96CE\u96CB\u96C9\u96CD\u894D\u96DC\u970D\u96D5\u96F9\u9704\u9706\u9708\u9713\u970E\u9711\u970F\u9716\u9719\u9724\u972A\u9730\u9739\u973D\u973E\u9744\u9746\u9748\u9742\u9749\u975C\u9760\u9764\u9766\u9768\u52D2\u976B\u9771\u9779\u9785\u977C\u9781\u977A\u9786\u978B\u978F\u9790\u979C\u97A8\u97A6\u97A3\u97B3\u97B4\u97C3\u97C6\u97C8\u97CB\u97DC\u97ED\u9F4F\u97F2\u7ADF\u97F6\u97F5\u980F\u980C\u9838\u9824\u9821\u9837\u983D\u9846\u984F\u984B\u986B\u986F\u9870"], + ["e940", "\u9871\u9874\u9873\u98AA\u98AF\u98B1\u98B6\u98C4\u98C3\u98C6\u98E9\u98EB\u9903\u9909\u9912\u9914\u9918\u9921\u991D\u991E\u9924\u9920\u992C\u992E\u993D\u993E\u9942\u9949\u9945\u9950\u994B\u9951\u9952\u994C\u9955\u9997\u9998\u99A5\u99AD\u99AE\u99BC\u99DF\u99DB\u99DD\u99D8\u99D1\u99ED\u99EE\u99F1\u99F2\u99FB\u99F8\u9A01\u9A0F\u9A05\u99E2\u9A19\u9A2B\u9A37\u9A45\u9A42\u9A40\u9A43"], + ["e980", "\u9A3E\u9A55\u9A4D\u9A5B\u9A57\u9A5F\u9A62\u9A65\u9A64\u9A69\u9A6B\u9A6A\u9AAD\u9AB0\u9ABC\u9AC0\u9ACF\u9AD1\u9AD3\u9AD4\u9ADE\u9ADF\u9AE2\u9AE3\u9AE6\u9AEF\u9AEB\u9AEE\u9AF4\u9AF1\u9AF7\u9AFB\u9B06\u9B18\u9B1A\u9B1F\u9B22\u9B23\u9B25\u9B27\u9B28\u9B29\u9B2A\u9B2E\u9B2F\u9B32\u9B44\u9B43\u9B4F\u9B4D\u9B4E\u9B51\u9B58\u9B74\u9B93\u9B83\u9B91\u9B96\u9B97\u9B9F\u9BA0\u9BA8\u9BB4\u9BC0\u9BCA\u9BB9\u9BC6\u9BCF\u9BD1\u9BD2\u9BE3\u9BE2\u9BE4\u9BD4\u9BE1\u9C3A\u9BF2\u9BF1\u9BF0\u9C15\u9C14\u9C09\u9C13\u9C0C\u9C06\u9C08\u9C12\u9C0A\u9C04\u9C2E\u9C1B\u9C25\u9C24\u9C21\u9C30\u9C47\u9C32\u9C46\u9C3E\u9C5A\u9C60\u9C67\u9C76\u9C78\u9CE7\u9CEC\u9CF0\u9D09\u9D08\u9CEB\u9D03\u9D06\u9D2A\u9D26\u9DAF\u9D23\u9D1F\u9D44\u9D15\u9D12\u9D41\u9D3F\u9D3E\u9D46\u9D48"], + ["ea40", "\u9D5D\u9D5E\u9D64\u9D51\u9D50\u9D59\u9D72\u9D89\u9D87\u9DAB\u9D6F\u9D7A\u9D9A\u9DA4\u9DA9\u9DB2\u9DC4\u9DC1\u9DBB\u9DB8\u9DBA\u9DC6\u9DCF\u9DC2\u9DD9\u9DD3\u9DF8\u9DE6\u9DED\u9DEF\u9DFD\u9E1A\u9E1B\u9E1E\u9E75\u9E79\u9E7D\u9E81\u9E88\u9E8B\u9E8C\u9E92\u9E95\u9E91\u9E9D\u9EA5\u9EA9\u9EB8\u9EAA\u9EAD\u9761\u9ECC\u9ECE\u9ECF\u9ED0\u9ED4\u9EDC\u9EDE\u9EDD\u9EE0\u9EE5\u9EE8\u9EEF"], + ["ea80", "\u9EF4\u9EF6\u9EF7\u9EF9\u9EFB\u9EFC\u9EFD\u9F07\u9F08\u76B7\u9F15\u9F21\u9F2C\u9F3E\u9F4A\u9F52\u9F54\u9F63\u9F5F\u9F60\u9F61\u9F66\u9F67\u9F6C\u9F6A\u9F77\u9F72\u9F76\u9F95\u9F9C\u9FA0\u582F\u69C7\u9059\u7464\u51DC\u7199"], + ["ed40", "\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F"], + ["ed80", "\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1"], + ["ee40", "\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559"], + ["ee80", "\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1"], + ["eeef", "\u2170", 9, "\uFFE2\uFFE4\uFF07\uFF02"], + ["f040", "\uE000", 62], + ["f080", "\uE03F", 124], + ["f140", "\uE0BC", 62], + ["f180", "\uE0FB", 124], + ["f240", "\uE178", 62], + ["f280", "\uE1B7", 124], + ["f340", "\uE234", 62], + ["f380", "\uE273", 124], + ["f440", "\uE2F0", 62], + ["f480", "\uE32F", 124], + ["f540", "\uE3AC", 62], + ["f580", "\uE3EB", 124], + ["f640", "\uE468", 62], + ["f680", "\uE4A7", 124], + ["f740", "\uE524", 62], + ["f780", "\uE563", 124], + ["f840", "\uE5E0", 62], + ["f880", "\uE61F", 124], + ["f940", "\uE69C"], + ["fa40", "\u2170", 9, "\u2160", 9, "\uFFE2\uFFE4\uFF07\uFF02\u3231\u2116\u2121\u2235\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A"], + ["fa80", "\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F"], + ["fb40", "\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19"], + ["fb80", "\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9"], + ["fc40", "\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1"] + ]; + } +}); + +// node_modules/iconv-lite/encodings/tables/eucjp.json +var require_eucjp = __commonJS({ + "node_modules/iconv-lite/encodings/tables/eucjp.json"(exports2, module2) { + module2.exports = [ + ["0", "\0", 127], + ["8ea1", "\uFF61", 62], + ["a1a1", "\u3000\u3001\u3002\uFF0C\uFF0E\u30FB\uFF1A\uFF1B\uFF1F\uFF01\u309B\u309C\xB4\uFF40\xA8\uFF3E\uFFE3\uFF3F\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\u2015\u2010\uFF0F\uFF3C\uFF5E\u2225\uFF5C\u2026\u2025\u2018\u2019\u201C\u201D\uFF08\uFF09\u3014\u3015\uFF3B\uFF3D\uFF5B\uFF5D\u3008", 9, "\uFF0B\uFF0D\xB1\xD7\xF7\uFF1D\u2260\uFF1C\uFF1E\u2266\u2267\u221E\u2234\u2642\u2640\xB0\u2032\u2033\u2103\uFFE5\uFF04\uFFE0\uFFE1\uFF05\uFF03\uFF06\uFF0A\uFF20\xA7\u2606\u2605\u25CB\u25CF\u25CE\u25C7"], + ["a2a1", "\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u203B\u3012\u2192\u2190\u2191\u2193\u3013"], + ["a2ba", "\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229"], + ["a2ca", "\u2227\u2228\uFFE2\u21D2\u21D4\u2200\u2203"], + ["a2dc", "\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C"], + ["a2f2", "\u212B\u2030\u266F\u266D\u266A\u2020\u2021\xB6"], + ["a2fe", "\u25EF"], + ["a3b0", "\uFF10", 9], + ["a3c1", "\uFF21", 25], + ["a3e1", "\uFF41", 25], + ["a4a1", "\u3041", 82], + ["a5a1", "\u30A1", 85], + ["a6a1", "\u0391", 16, "\u03A3", 6], + ["a6c1", "\u03B1", 16, "\u03C3", 6], + ["a7a1", "\u0410", 5, "\u0401\u0416", 25], + ["a7d1", "\u0430", 5, "\u0451\u0436", 25], + ["a8a1", "\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542"], + ["ada1", "\u2460", 19, "\u2160", 9], + ["adc0", "\u3349\u3314\u3322\u334D\u3318\u3327\u3303\u3336\u3351\u3357\u330D\u3326\u3323\u332B\u334A\u333B\u339C\u339D\u339E\u338E\u338F\u33C4\u33A1"], + ["addf", "\u337B\u301D\u301F\u2116\u33CD\u2121\u32A4", 4, "\u3231\u3232\u3239\u337E\u337D\u337C\u2252\u2261\u222B\u222E\u2211\u221A\u22A5\u2220\u221F\u22BF\u2235\u2229\u222A"], + ["b0a1", "\u4E9C\u5516\u5A03\u963F\u54C0\u611B\u6328\u59F6\u9022\u8475\u831C\u7A50\u60AA\u63E1\u6E25\u65ED\u8466\u82A6\u9BF5\u6893\u5727\u65A1\u6271\u5B9B\u59D0\u867B\u98F4\u7D62\u7DBE\u9B8E\u6216\u7C9F\u88B7\u5B89\u5EB5\u6309\u6697\u6848\u95C7\u978D\u674F\u4EE5\u4F0A\u4F4D\u4F9D\u5049\u56F2\u5937\u59D4\u5A01\u5C09\u60DF\u610F\u6170\u6613\u6905\u70BA\u754F\u7570\u79FB\u7DAD\u7DEF\u80C3\u840E\u8863\u8B02\u9055\u907A\u533B\u4E95\u4EA5\u57DF\u80B2\u90C1\u78EF\u4E00\u58F1\u6EA2\u9038\u7A32\u8328\u828B\u9C2F\u5141\u5370\u54BD\u54E1\u56E0\u59FB\u5F15\u98F2\u6DEB\u80E4\u852D"], + ["b1a1", "\u9662\u9670\u96A0\u97FB\u540B\u53F3\u5B87\u70CF\u7FBD\u8FC2\u96E8\u536F\u9D5C\u7ABA\u4E11\u7893\u81FC\u6E26\u5618\u5504\u6B1D\u851A\u9C3B\u59E5\u53A9\u6D66\u74DC\u958F\u5642\u4E91\u904B\u96F2\u834F\u990C\u53E1\u55B6\u5B30\u5F71\u6620\u66F3\u6804\u6C38\u6CF3\u6D29\u745B\u76C8\u7A4E\u9834\u82F1\u885B\u8A60\u92ED\u6DB2\u75AB\u76CA\u99C5\u60A6\u8B01\u8D8A\u95B2\u698E\u53AD\u5186\u5712\u5830\u5944\u5BB4\u5EF6\u6028\u63A9\u63F4\u6CBF\u6F14\u708E\u7114\u7159\u71D5\u733F\u7E01\u8276\u82D1\u8597\u9060\u925B\u9D1B\u5869\u65BC\u6C5A\u7525\u51F9\u592E\u5965\u5F80\u5FDC"], + ["b2a1", "\u62BC\u65FA\u6A2A\u6B27\u6BB4\u738B\u7FC1\u8956\u9D2C\u9D0E\u9EC4\u5CA1\u6C96\u837B\u5104\u5C4B\u61B6\u81C6\u6876\u7261\u4E59\u4FFA\u5378\u6069\u6E29\u7A4F\u97F3\u4E0B\u5316\u4EEE\u4F55\u4F3D\u4FA1\u4F73\u52A0\u53EF\u5609\u590F\u5AC1\u5BB6\u5BE1\u79D1\u6687\u679C\u67B6\u6B4C\u6CB3\u706B\u73C2\u798D\u79BE\u7A3C\u7B87\u82B1\u82DB\u8304\u8377\u83EF\u83D3\u8766\u8AB2\u5629\u8CA8\u8FE6\u904E\u971E\u868A\u4FC4\u5CE8\u6211\u7259\u753B\u81E5\u82BD\u86FE\u8CC0\u96C5\u9913\u99D5\u4ECB\u4F1A\u89E3\u56DE\u584A\u58CA\u5EFB\u5FEB\u602A\u6094\u6062\u61D0\u6212\u62D0\u6539"], + ["b3a1", "\u9B41\u6666\u68B0\u6D77\u7070\u754C\u7686\u7D75\u82A5\u87F9\u958B\u968E\u8C9D\u51F1\u52BE\u5916\u54B3\u5BB3\u5D16\u6168\u6982\u6DAF\u788D\u84CB\u8857\u8A72\u93A7\u9AB8\u6D6C\u99A8\u86D9\u57A3\u67FF\u86CE\u920E\u5283\u5687\u5404\u5ED3\u62E1\u64B9\u683C\u6838\u6BBB\u7372\u78BA\u7A6B\u899A\u89D2\u8D6B\u8F03\u90ED\u95A3\u9694\u9769\u5B66\u5CB3\u697D\u984D\u984E\u639B\u7B20\u6A2B\u6A7F\u68B6\u9C0D\u6F5F\u5272\u559D\u6070\u62EC\u6D3B\u6E07\u6ED1\u845B\u8910\u8F44\u4E14\u9C39\u53F6\u691B\u6A3A\u9784\u682A\u515C\u7AC3\u84B2\u91DC\u938C\u565B\u9D28\u6822\u8305\u8431"], + ["b4a1", "\u7CA5\u5208\u82C5\u74E6\u4E7E\u4F83\u51A0\u5BD2\u520A\u52D8\u52E7\u5DFB\u559A\u582A\u59E6\u5B8C\u5B98\u5BDB\u5E72\u5E79\u60A3\u611F\u6163\u61BE\u63DB\u6562\u67D1\u6853\u68FA\u6B3E\u6B53\u6C57\u6F22\u6F97\u6F45\u74B0\u7518\u76E3\u770B\u7AFF\u7BA1\u7C21\u7DE9\u7F36\u7FF0\u809D\u8266\u839E\u89B3\u8ACC\u8CAB\u9084\u9451\u9593\u9591\u95A2\u9665\u97D3\u9928\u8218\u4E38\u542B\u5CB8\u5DCC\u73A9\u764C\u773C\u5CA9\u7FEB\u8D0B\u96C1\u9811\u9854\u9858\u4F01\u4F0E\u5371\u559C\u5668\u57FA\u5947\u5B09\u5BC4\u5C90\u5E0C\u5E7E\u5FCC\u63EE\u673A\u65D7\u65E2\u671F\u68CB\u68C4"], + ["b5a1", "\u6A5F\u5E30\u6BC5\u6C17\u6C7D\u757F\u7948\u5B63\u7A00\u7D00\u5FBD\u898F\u8A18\u8CB4\u8D77\u8ECC\u8F1D\u98E2\u9A0E\u9B3C\u4E80\u507D\u5100\u5993\u5B9C\u622F\u6280\u64EC\u6B3A\u72A0\u7591\u7947\u7FA9\u87FB\u8ABC\u8B70\u63AC\u83CA\u97A0\u5409\u5403\u55AB\u6854\u6A58\u8A70\u7827\u6775\u9ECD\u5374\u5BA2\u811A\u8650\u9006\u4E18\u4E45\u4EC7\u4F11\u53CA\u5438\u5BAE\u5F13\u6025\u6551\u673D\u6C42\u6C72\u6CE3\u7078\u7403\u7A76\u7AAE\u7B08\u7D1A\u7CFE\u7D66\u65E7\u725B\u53BB\u5C45\u5DE8\u62D2\u62E0\u6319\u6E20\u865A\u8A31\u8DDD\u92F8\u6F01\u79A6\u9B5A\u4EA8\u4EAB\u4EAC"], + ["b6a1", "\u4F9B\u4FA0\u50D1\u5147\u7AF6\u5171\u51F6\u5354\u5321\u537F\u53EB\u55AC\u5883\u5CE1\u5F37\u5F4A\u602F\u6050\u606D\u631F\u6559\u6A4B\u6CC1\u72C2\u72ED\u77EF\u80F8\u8105\u8208\u854E\u90F7\u93E1\u97FF\u9957\u9A5A\u4EF0\u51DD\u5C2D\u6681\u696D\u5C40\u66F2\u6975\u7389\u6850\u7C81\u50C5\u52E4\u5747\u5DFE\u9326\u65A4\u6B23\u6B3D\u7434\u7981\u79BD\u7B4B\u7DCA\u82B9\u83CC\u887F\u895F\u8B39\u8FD1\u91D1\u541F\u9280\u4E5D\u5036\u53E5\u533A\u72D7\u7396\u77E9\u82E6\u8EAF\u99C6\u99C8\u99D2\u5177\u611A\u865E\u55B0\u7A7A\u5076\u5BD3\u9047\u9685\u4E32\u6ADB\u91E7\u5C51\u5C48"], + ["b7a1", "\u6398\u7A9F\u6C93\u9774\u8F61\u7AAA\u718A\u9688\u7C82\u6817\u7E70\u6851\u936C\u52F2\u541B\u85AB\u8A13\u7FA4\u8ECD\u90E1\u5366\u8888\u7941\u4FC2\u50BE\u5211\u5144\u5553\u572D\u73EA\u578B\u5951\u5F62\u5F84\u6075\u6176\u6167\u61A9\u63B2\u643A\u656C\u666F\u6842\u6E13\u7566\u7A3D\u7CFB\u7D4C\u7D99\u7E4B\u7F6B\u830E\u834A\u86CD\u8A08\u8A63\u8B66\u8EFD\u981A\u9D8F\u82B8\u8FCE\u9BE8\u5287\u621F\u6483\u6FC0\u9699\u6841\u5091\u6B20\u6C7A\u6F54\u7A74\u7D50\u8840\u8A23\u6708\u4EF6\u5039\u5026\u5065\u517C\u5238\u5263\u55A7\u570F\u5805\u5ACC\u5EFA\u61B2\u61F8\u62F3\u6372"], + ["b8a1", "\u691C\u6A29\u727D\u72AC\u732E\u7814\u786F\u7D79\u770C\u80A9\u898B\u8B19\u8CE2\u8ED2\u9063\u9375\u967A\u9855\u9A13\u9E78\u5143\u539F\u53B3\u5E7B\u5F26\u6E1B\u6E90\u7384\u73FE\u7D43\u8237\u8A00\u8AFA\u9650\u4E4E\u500B\u53E4\u547C\u56FA\u59D1\u5B64\u5DF1\u5EAB\u5F27\u6238\u6545\u67AF\u6E56\u72D0\u7CCA\u88B4\u80A1\u80E1\u83F0\u864E\u8A87\u8DE8\u9237\u96C7\u9867\u9F13\u4E94\u4E92\u4F0D\u5348\u5449\u543E\u5A2F\u5F8C\u5FA1\u609F\u68A7\u6A8E\u745A\u7881\u8A9E\u8AA4\u8B77\u9190\u4E5E\u9BC9\u4EA4\u4F7C\u4FAF\u5019\u5016\u5149\u516C\u529F\u52B9\u52FE\u539A\u53E3\u5411"], + ["b9a1", "\u540E\u5589\u5751\u57A2\u597D\u5B54\u5B5D\u5B8F\u5DE5\u5DE7\u5DF7\u5E78\u5E83\u5E9A\u5EB7\u5F18\u6052\u614C\u6297\u62D8\u63A7\u653B\u6602\u6643\u66F4\u676D\u6821\u6897\u69CB\u6C5F\u6D2A\u6D69\u6E2F\u6E9D\u7532\u7687\u786C\u7A3F\u7CE0\u7D05\u7D18\u7D5E\u7DB1\u8015\u8003\u80AF\u80B1\u8154\u818F\u822A\u8352\u884C\u8861\u8B1B\u8CA2\u8CFC\u90CA\u9175\u9271\u783F\u92FC\u95A4\u964D\u9805\u9999\u9AD8\u9D3B\u525B\u52AB\u53F7\u5408\u58D5\u62F7\u6FE0\u8C6A\u8F5F\u9EB9\u514B\u523B\u544A\u56FD\u7A40\u9177\u9D60\u9ED2\u7344\u6F09\u8170\u7511\u5FFD\u60DA\u9AA8\u72DB\u8FBC"], + ["baa1", "\u6B64\u9803\u4ECA\u56F0\u5764\u58BE\u5A5A\u6068\u61C7\u660F\u6606\u6839\u68B1\u6DF7\u75D5\u7D3A\u826E\u9B42\u4E9B\u4F50\u53C9\u5506\u5D6F\u5DE6\u5DEE\u67FB\u6C99\u7473\u7802\u8A50\u9396\u88DF\u5750\u5EA7\u632B\u50B5\u50AC\u518D\u6700\u54C9\u585E\u59BB\u5BB0\u5F69\u624D\u63A1\u683D\u6B73\u6E08\u707D\u91C7\u7280\u7815\u7826\u796D\u658E\u7D30\u83DC\u88C1\u8F09\u969B\u5264\u5728\u6750\u7F6A\u8CA1\u51B4\u5742\u962A\u583A\u698A\u80B4\u54B2\u5D0E\u57FC\u7895\u9DFA\u4F5C\u524A\u548B\u643E\u6628\u6714\u67F5\u7A84\u7B56\u7D22\u932F\u685C\u9BAD\u7B39\u5319\u518A\u5237"], + ["bba1", "\u5BDF\u62F6\u64AE\u64E6\u672D\u6BBA\u85A9\u96D1\u7690\u9BD6\u634C\u9306\u9BAB\u76BF\u6652\u4E09\u5098\u53C2\u5C71\u60E8\u6492\u6563\u685F\u71E6\u73CA\u7523\u7B97\u7E82\u8695\u8B83\u8CDB\u9178\u9910\u65AC\u66AB\u6B8B\u4ED5\u4ED4\u4F3A\u4F7F\u523A\u53F8\u53F2\u55E3\u56DB\u58EB\u59CB\u59C9\u59FF\u5B50\u5C4D\u5E02\u5E2B\u5FD7\u601D\u6307\u652F\u5B5C\u65AF\u65BD\u65E8\u679D\u6B62\u6B7B\u6C0F\u7345\u7949\u79C1\u7CF8\u7D19\u7D2B\u80A2\u8102\u81F3\u8996\u8A5E\u8A69\u8A66\u8A8C\u8AEE\u8CC7\u8CDC\u96CC\u98FC\u6B6F\u4E8B\u4F3C\u4F8D\u5150\u5B57\u5BFA\u6148\u6301\u6642"], + ["bca1", "\u6B21\u6ECB\u6CBB\u723E\u74BD\u75D4\u78C1\u793A\u800C\u8033\u81EA\u8494\u8F9E\u6C50\u9E7F\u5F0F\u8B58\u9D2B\u7AFA\u8EF8\u5B8D\u96EB\u4E03\u53F1\u57F7\u5931\u5AC9\u5BA4\u6089\u6E7F\u6F06\u75BE\u8CEA\u5B9F\u8500\u7BE0\u5072\u67F4\u829D\u5C61\u854A\u7E1E\u820E\u5199\u5C04\u6368\u8D66\u659C\u716E\u793E\u7D17\u8005\u8B1D\u8ECA\u906E\u86C7\u90AA\u501F\u52FA\u5C3A\u6753\u707C\u7235\u914C\u91C8\u932B\u82E5\u5BC2\u5F31\u60F9\u4E3B\u53D6\u5B88\u624B\u6731\u6B8A\u72E9\u73E0\u7A2E\u816B\u8DA3\u9152\u9996\u5112\u53D7\u546A\u5BFF\u6388\u6A39\u7DAC\u9700\u56DA\u53CE\u5468"], + ["bda1", "\u5B97\u5C31\u5DDE\u4FEE\u6101\u62FE\u6D32\u79C0\u79CB\u7D42\u7E4D\u7FD2\u81ED\u821F\u8490\u8846\u8972\u8B90\u8E74\u8F2F\u9031\u914B\u916C\u96C6\u919C\u4EC0\u4F4F\u5145\u5341\u5F93\u620E\u67D4\u6C41\u6E0B\u7363\u7E26\u91CD\u9283\u53D4\u5919\u5BBF\u6DD1\u795D\u7E2E\u7C9B\u587E\u719F\u51FA\u8853\u8FF0\u4FCA\u5CFB\u6625\u77AC\u7AE3\u821C\u99FF\u51C6\u5FAA\u65EC\u696F\u6B89\u6DF3\u6E96\u6F64\u76FE\u7D14\u5DE1\u9075\u9187\u9806\u51E6\u521D\u6240\u6691\u66D9\u6E1A\u5EB6\u7DD2\u7F72\u66F8\u85AF\u85F7\u8AF8\u52A9\u53D9\u5973\u5E8F\u5F90\u6055\u92E4\u9664\u50B7\u511F"], + ["bea1", "\u52DD\u5320\u5347\u53EC\u54E8\u5546\u5531\u5617\u5968\u59BE\u5A3C\u5BB5\u5C06\u5C0F\u5C11\u5C1A\u5E84\u5E8A\u5EE0\u5F70\u627F\u6284\u62DB\u638C\u6377\u6607\u660C\u662D\u6676\u677E\u68A2\u6A1F\u6A35\u6CBC\u6D88\u6E09\u6E58\u713C\u7126\u7167\u75C7\u7701\u785D\u7901\u7965\u79F0\u7AE0\u7B11\u7CA7\u7D39\u8096\u83D6\u848B\u8549\u885D\u88F3\u8A1F\u8A3C\u8A54\u8A73\u8C61\u8CDE\u91A4\u9266\u937E\u9418\u969C\u9798\u4E0A\u4E08\u4E1E\u4E57\u5197\u5270\u57CE\u5834\u58CC\u5B22\u5E38\u60C5\u64FE\u6761\u6756\u6D44\u72B6\u7573\u7A63\u84B8\u8B72\u91B8\u9320\u5631\u57F4\u98FE"], + ["bfa1", "\u62ED\u690D\u6B96\u71ED\u7E54\u8077\u8272\u89E6\u98DF\u8755\u8FB1\u5C3B\u4F38\u4FE1\u4FB5\u5507\u5A20\u5BDD\u5BE9\u5FC3\u614E\u632F\u65B0\u664B\u68EE\u699B\u6D78\u6DF1\u7533\u75B9\u771F\u795E\u79E6\u7D33\u81E3\u82AF\u85AA\u89AA\u8A3A\u8EAB\u8F9B\u9032\u91DD\u9707\u4EBA\u4EC1\u5203\u5875\u58EC\u5C0B\u751A\u5C3D\u814E\u8A0A\u8FC5\u9663\u976D\u7B25\u8ACF\u9808\u9162\u56F3\u53A8\u9017\u5439\u5782\u5E25\u63A8\u6C34\u708A\u7761\u7C8B\u7FE0\u8870\u9042\u9154\u9310\u9318\u968F\u745E\u9AC4\u5D07\u5D69\u6570\u67A2\u8DA8\u96DB\u636E\u6749\u6919\u83C5\u9817\u96C0\u88FE"], + ["c0a1", "\u6F84\u647A\u5BF8\u4E16\u702C\u755D\u662F\u51C4\u5236\u52E2\u59D3\u5F81\u6027\u6210\u653F\u6574\u661F\u6674\u68F2\u6816\u6B63\u6E05\u7272\u751F\u76DB\u7CBE\u8056\u58F0\u88FD\u897F\u8AA0\u8A93\u8ACB\u901D\u9192\u9752\u9759\u6589\u7A0E\u8106\u96BB\u5E2D\u60DC\u621A\u65A5\u6614\u6790\u77F3\u7A4D\u7C4D\u7E3E\u810A\u8CAC\u8D64\u8DE1\u8E5F\u78A9\u5207\u62D9\u63A5\u6442\u6298\u8A2D\u7A83\u7BC0\u8AAC\u96EA\u7D76\u820C\u8749\u4ED9\u5148\u5343\u5360\u5BA3\u5C02\u5C16\u5DDD\u6226\u6247\u64B0\u6813\u6834\u6CC9\u6D45\u6D17\u67D3\u6F5C\u714E\u717D\u65CB\u7A7F\u7BAD\u7DDA"], + ["c1a1", "\u7E4A\u7FA8\u817A\u821B\u8239\u85A6\u8A6E\u8CCE\u8DF5\u9078\u9077\u92AD\u9291\u9583\u9BAE\u524D\u5584\u6F38\u7136\u5168\u7985\u7E55\u81B3\u7CCE\u564C\u5851\u5CA8\u63AA\u66FE\u66FD\u695A\u72D9\u758F\u758E\u790E\u7956\u79DF\u7C97\u7D20\u7D44\u8607\u8A34\u963B\u9061\u9F20\u50E7\u5275\u53CC\u53E2\u5009\u55AA\u58EE\u594F\u723D\u5B8B\u5C64\u531D\u60E3\u60F3\u635C\u6383\u633F\u63BB\u64CD\u65E9\u66F9\u5DE3\u69CD\u69FD\u6F15\u71E5\u4E89\u75E9\u76F8\u7A93\u7CDF\u7DCF\u7D9C\u8061\u8349\u8358\u846C\u84BC\u85FB\u88C5\u8D70\u9001\u906D\u9397\u971C\u9A12\u50CF\u5897\u618E"], + ["c2a1", "\u81D3\u8535\u8D08\u9020\u4FC3\u5074\u5247\u5373\u606F\u6349\u675F\u6E2C\u8DB3\u901F\u4FD7\u5C5E\u8CCA\u65CF\u7D9A\u5352\u8896\u5176\u63C3\u5B58\u5B6B\u5C0A\u640D\u6751\u905C\u4ED6\u591A\u592A\u6C70\u8A51\u553E\u5815\u59A5\u60F0\u6253\u67C1\u8235\u6955\u9640\u99C4\u9A28\u4F53\u5806\u5BFE\u8010\u5CB1\u5E2F\u5F85\u6020\u614B\u6234\u66FF\u6CF0\u6EDE\u80CE\u817F\u82D4\u888B\u8CB8\u9000\u902E\u968A\u9EDB\u9BDB\u4EE3\u53F0\u5927\u7B2C\u918D\u984C\u9DF9\u6EDD\u7027\u5353\u5544\u5B85\u6258\u629E\u62D3\u6CA2\u6FEF\u7422\u8A17\u9438\u6FC1\u8AFE\u8338\u51E7\u86F8\u53EA"], + ["c3a1", "\u53E9\u4F46\u9054\u8FB0\u596A\u8131\u5DFD\u7AEA\u8FBF\u68DA\u8C37\u72F8\u9C48\u6A3D\u8AB0\u4E39\u5358\u5606\u5766\u62C5\u63A2\u65E6\u6B4E\u6DE1\u6E5B\u70AD\u77ED\u7AEF\u7BAA\u7DBB\u803D\u80C6\u86CB\u8A95\u935B\u56E3\u58C7\u5F3E\u65AD\u6696\u6A80\u6BB5\u7537\u8AC7\u5024\u77E5\u5730\u5F1B\u6065\u667A\u6C60\u75F4\u7A1A\u7F6E\u81F4\u8718\u9045\u99B3\u7BC9\u755C\u7AF9\u7B51\u84C4\u9010\u79E9\u7A92\u8336\u5AE1\u7740\u4E2D\u4EF2\u5B99\u5FE0\u62BD\u663C\u67F1\u6CE8\u866B\u8877\u8A3B\u914E\u92F3\u99D0\u6A17\u7026\u732A\u82E7\u8457\u8CAF\u4E01\u5146\u51CB\u558B\u5BF5"], + ["c4a1", "\u5E16\u5E33\u5E81\u5F14\u5F35\u5F6B\u5FB4\u61F2\u6311\u66A2\u671D\u6F6E\u7252\u753A\u773A\u8074\u8139\u8178\u8776\u8ABF\u8ADC\u8D85\u8DF3\u929A\u9577\u9802\u9CE5\u52C5\u6357\u76F4\u6715\u6C88\u73CD\u8CC3\u93AE\u9673\u6D25\u589C\u690E\u69CC\u8FFD\u939A\u75DB\u901A\u585A\u6802\u63B4\u69FB\u4F43\u6F2C\u67D8\u8FBB\u8526\u7DB4\u9354\u693F\u6F70\u576A\u58F7\u5B2C\u7D2C\u722A\u540A\u91E3\u9DB4\u4EAD\u4F4E\u505C\u5075\u5243\u8C9E\u5448\u5824\u5B9A\u5E1D\u5E95\u5EAD\u5EF7\u5F1F\u608C\u62B5\u633A\u63D0\u68AF\u6C40\u7887\u798E\u7A0B\u7DE0\u8247\u8A02\u8AE6\u8E44\u9013"], + ["c5a1", "\u90B8\u912D\u91D8\u9F0E\u6CE5\u6458\u64E2\u6575\u6EF4\u7684\u7B1B\u9069\u93D1\u6EBA\u54F2\u5FB9\u64A4\u8F4D\u8FED\u9244\u5178\u586B\u5929\u5C55\u5E97\u6DFB\u7E8F\u751C\u8CBC\u8EE2\u985B\u70B9\u4F1D\u6BBF\u6FB1\u7530\u96FB\u514E\u5410\u5835\u5857\u59AC\u5C60\u5F92\u6597\u675C\u6E21\u767B\u83DF\u8CED\u9014\u90FD\u934D\u7825\u783A\u52AA\u5EA6\u571F\u5974\u6012\u5012\u515A\u51AC\u51CD\u5200\u5510\u5854\u5858\u5957\u5B95\u5CF6\u5D8B\u60BC\u6295\u642D\u6771\u6843\u68BC\u68DF\u76D7\u6DD8\u6E6F\u6D9B\u706F\u71C8\u5F53\u75D8\u7977\u7B49\u7B54\u7B52\u7CD6\u7D71\u5230"], + ["c6a1", "\u8463\u8569\u85E4\u8A0E\u8B04\u8C46\u8E0F\u9003\u900F\u9419\u9676\u982D\u9A30\u95D8\u50CD\u52D5\u540C\u5802\u5C0E\u61A7\u649E\u6D1E\u77B3\u7AE5\u80F4\u8404\u9053\u9285\u5CE0\u9D07\u533F\u5F97\u5FB3\u6D9C\u7279\u7763\u79BF\u7BE4\u6BD2\u72EC\u8AAD\u6803\u6A61\u51F8\u7A81\u6934\u5C4A\u9CF6\u82EB\u5BC5\u9149\u701E\u5678\u5C6F\u60C7\u6566\u6C8C\u8C5A\u9041\u9813\u5451\u66C7\u920D\u5948\u90A3\u5185\u4E4D\u51EA\u8599\u8B0E\u7058\u637A\u934B\u6962\u99B4\u7E04\u7577\u5357\u6960\u8EDF\u96E3\u6C5D\u4E8C\u5C3C\u5F10\u8FE9\u5302\u8CD1\u8089\u8679\u5EFF\u65E5\u4E73\u5165"], + ["c7a1", "\u5982\u5C3F\u97EE\u4EFB\u598A\u5FCD\u8A8D\u6FE1\u79B0\u7962\u5BE7\u8471\u732B\u71B1\u5E74\u5FF5\u637B\u649A\u71C3\u7C98\u4E43\u5EFC\u4E4B\u57DC\u56A2\u60A9\u6FC3\u7D0D\u80FD\u8133\u81BF\u8FB2\u8997\u86A4\u5DF4\u628A\u64AD\u8987\u6777\u6CE2\u6D3E\u7436\u7834\u5A46\u7F75\u82AD\u99AC\u4FF3\u5EC3\u62DD\u6392\u6557\u676F\u76C3\u724C\u80CC\u80BA\u8F29\u914D\u500D\u57F9\u5A92\u6885\u6973\u7164\u72FD\u8CB7\u58F2\u8CE0\u966A\u9019\u877F\u79E4\u77E7\u8429\u4F2F\u5265\u535A\u62CD\u67CF\u6CCA\u767D\u7B94\u7C95\u8236\u8584\u8FEB\u66DD\u6F20\u7206\u7E1B\u83AB\u99C1\u9EA6"], + ["c8a1", "\u51FD\u7BB1\u7872\u7BB8\u8087\u7B48\u6AE8\u5E61\u808C\u7551\u7560\u516B\u9262\u6E8C\u767A\u9197\u9AEA\u4F10\u7F70\u629C\u7B4F\u95A5\u9CE9\u567A\u5859\u86E4\u96BC\u4F34\u5224\u534A\u53CD\u53DB\u5E06\u642C\u6591\u677F\u6C3E\u6C4E\u7248\u72AF\u73ED\u7554\u7E41\u822C\u85E9\u8CA9\u7BC4\u91C6\u7169\u9812\u98EF\u633D\u6669\u756A\u76E4\u78D0\u8543\u86EE\u532A\u5351\u5426\u5983\u5E87\u5F7C\u60B2\u6249\u6279\u62AB\u6590\u6BD4\u6CCC\u75B2\u76AE\u7891\u79D8\u7DCB\u7F77\u80A5\u88AB\u8AB9\u8CBB\u907F\u975E\u98DB\u6A0B\u7C38\u5099\u5C3E\u5FAE\u6787\u6BD8\u7435\u7709\u7F8E"], + ["c9a1", "\u9F3B\u67CA\u7A17\u5339\u758B\u9AED\u5F66\u819D\u83F1\u8098\u5F3C\u5FC5\u7562\u7B46\u903C\u6867\u59EB\u5A9B\u7D10\u767E\u8B2C\u4FF5\u5F6A\u6A19\u6C37\u6F02\u74E2\u7968\u8868\u8A55\u8C79\u5EDF\u63CF\u75C5\u79D2\u82D7\u9328\u92F2\u849C\u86ED\u9C2D\u54C1\u5F6C\u658C\u6D5C\u7015\u8CA7\u8CD3\u983B\u654F\u74F6\u4E0D\u4ED8\u57E0\u592B\u5A66\u5BCC\u51A8\u5E03\u5E9C\u6016\u6276\u6577\u65A7\u666E\u6D6E\u7236\u7B26\u8150\u819A\u8299\u8B5C\u8CA0\u8CE6\u8D74\u961C\u9644\u4FAE\u64AB\u6B66\u821E\u8461\u856A\u90E8\u5C01\u6953\u98A8\u847A\u8557\u4F0F\u526F\u5FA9\u5E45\u670D"], + ["caa1", "\u798F\u8179\u8907\u8986\u6DF5\u5F17\u6255\u6CB8\u4ECF\u7269\u9B92\u5206\u543B\u5674\u58B3\u61A4\u626E\u711A\u596E\u7C89\u7CDE\u7D1B\u96F0\u6587\u805E\u4E19\u4F75\u5175\u5840\u5E63\u5E73\u5F0A\u67C4\u4E26\u853D\u9589\u965B\u7C73\u9801\u50FB\u58C1\u7656\u78A7\u5225\u77A5\u8511\u7B86\u504F\u5909\u7247\u7BC7\u7DE8\u8FBA\u8FD4\u904D\u4FBF\u52C9\u5A29\u5F01\u97AD\u4FDD\u8217\u92EA\u5703\u6355\u6B69\u752B\u88DC\u8F14\u7A42\u52DF\u5893\u6155\u620A\u66AE\u6BCD\u7C3F\u83E9\u5023\u4FF8\u5305\u5446\u5831\u5949\u5B9D\u5CF0\u5CEF\u5D29\u5E96\u62B1\u6367\u653E\u65B9\u670B"], + ["cba1", "\u6CD5\u6CE1\u70F9\u7832\u7E2B\u80DE\u82B3\u840C\u84EC\u8702\u8912\u8A2A\u8C4A\u90A6\u92D2\u98FD\u9CF3\u9D6C\u4E4F\u4EA1\u508D\u5256\u574A\u59A8\u5E3D\u5FD8\u5FD9\u623F\u66B4\u671B\u67D0\u68D2\u5192\u7D21\u80AA\u81A8\u8B00\u8C8C\u8CBF\u927E\u9632\u5420\u982C\u5317\u50D5\u535C\u58A8\u64B2\u6734\u7267\u7766\u7A46\u91E6\u52C3\u6CA1\u6B86\u5800\u5E4C\u5954\u672C\u7FFB\u51E1\u76C6\u6469\u78E8\u9B54\u9EBB\u57CB\u59B9\u6627\u679A\u6BCE\u54E9\u69D9\u5E55\u819C\u6795\u9BAA\u67FE\u9C52\u685D\u4EA6\u4FE3\u53C8\u62B9\u672B\u6CAB\u8FC4\u4FAD\u7E6D\u9EBF\u4E07\u6162\u6E80"], + ["cca1", "\u6F2B\u8513\u5473\u672A\u9B45\u5DF3\u7B95\u5CAC\u5BC6\u871C\u6E4A\u84D1\u7A14\u8108\u5999\u7C8D\u6C11\u7720\u52D9\u5922\u7121\u725F\u77DB\u9727\u9D61\u690B\u5A7F\u5A18\u51A5\u540D\u547D\u660E\u76DF\u8FF7\u9298\u9CF4\u59EA\u725D\u6EC5\u514D\u68C9\u7DBF\u7DEC\u9762\u9EBA\u6478\u6A21\u8302\u5984\u5B5F\u6BDB\u731B\u76F2\u7DB2\u8017\u8499\u5132\u6728\u9ED9\u76EE\u6762\u52FF\u9905\u5C24\u623B\u7C7E\u8CB0\u554F\u60B6\u7D0B\u9580\u5301\u4E5F\u51B6\u591C\u723A\u8036\u91CE\u5F25\u77E2\u5384\u5F79\u7D04\u85AC\u8A33\u8E8D\u9756\u67F3\u85AE\u9453\u6109\u6108\u6CB9\u7652"], + ["cda1", "\u8AED\u8F38\u552F\u4F51\u512A\u52C7\u53CB\u5BA5\u5E7D\u60A0\u6182\u63D6\u6709\u67DA\u6E67\u6D8C\u7336\u7337\u7531\u7950\u88D5\u8A98\u904A\u9091\u90F5\u96C4\u878D\u5915\u4E88\u4F59\u4E0E\u8A89\u8F3F\u9810\u50AD\u5E7C\u5996\u5BB9\u5EB8\u63DA\u63FA\u64C1\u66DC\u694A\u69D8\u6D0B\u6EB6\u7194\u7528\u7AAF\u7F8A\u8000\u8449\u84C9\u8981\u8B21\u8E0A\u9065\u967D\u990A\u617E\u6291\u6B32\u6C83\u6D74\u7FCC\u7FFC\u6DC0\u7F85\u87BA\u88F8\u6765\u83B1\u983C\u96F7\u6D1B\u7D61\u843D\u916A\u4E71\u5375\u5D50\u6B04\u6FEB\u85CD\u862D\u89A7\u5229\u540F\u5C65\u674E\u68A8\u7406\u7483"], + ["cea1", "\u75E2\u88CF\u88E1\u91CC\u96E2\u9678\u5F8B\u7387\u7ACB\u844E\u63A0\u7565\u5289\u6D41\u6E9C\u7409\u7559\u786B\u7C92\u9686\u7ADC\u9F8D\u4FB6\u616E\u65C5\u865C\u4E86\u4EAE\u50DA\u4E21\u51CC\u5BEE\u6599\u6881\u6DBC\u731F\u7642\u77AD\u7A1C\u7CE7\u826F\u8AD2\u907C\u91CF\u9675\u9818\u529B\u7DD1\u502B\u5398\u6797\u6DCB\u71D0\u7433\u81E8\u8F2A\u96A3\u9C57\u9E9F\u7460\u5841\u6D99\u7D2F\u985E\u4EE4\u4F36\u4F8B\u51B7\u52B1\u5DBA\u601C\u73B2\u793C\u82D3\u9234\u96B7\u96F6\u970A\u9E97\u9F62\u66A6\u6B74\u5217\u52A3\u70C8\u88C2\u5EC9\u604B\u6190\u6F23\u7149\u7C3E\u7DF4\u806F"], + ["cfa1", "\u84EE\u9023\u932C\u5442\u9B6F\u6AD3\u7089\u8CC2\u8DEF\u9732\u52B4\u5A41\u5ECA\u5F04\u6717\u697C\u6994\u6D6A\u6F0F\u7262\u72FC\u7BED\u8001\u807E\u874B\u90CE\u516D\u9E93\u7984\u808B\u9332\u8AD6\u502D\u548C\u8A71\u6B6A\u8CC4\u8107\u60D1\u67A0\u9DF2\u4E99\u4E98\u9C10\u8A6B\u85C1\u8568\u6900\u6E7E\u7897\u8155"], + ["d0a1", "\u5F0C\u4E10\u4E15\u4E2A\u4E31\u4E36\u4E3C\u4E3F\u4E42\u4E56\u4E58\u4E82\u4E85\u8C6B\u4E8A\u8212\u5F0D\u4E8E\u4E9E\u4E9F\u4EA0\u4EA2\u4EB0\u4EB3\u4EB6\u4ECE\u4ECD\u4EC4\u4EC6\u4EC2\u4ED7\u4EDE\u4EED\u4EDF\u4EF7\u4F09\u4F5A\u4F30\u4F5B\u4F5D\u4F57\u4F47\u4F76\u4F88\u4F8F\u4F98\u4F7B\u4F69\u4F70\u4F91\u4F6F\u4F86\u4F96\u5118\u4FD4\u4FDF\u4FCE\u4FD8\u4FDB\u4FD1\u4FDA\u4FD0\u4FE4\u4FE5\u501A\u5028\u5014\u502A\u5025\u5005\u4F1C\u4FF6\u5021\u5029\u502C\u4FFE\u4FEF\u5011\u5006\u5043\u5047\u6703\u5055\u5050\u5048\u505A\u5056\u506C\u5078\u5080\u509A\u5085\u50B4\u50B2"], + ["d1a1", "\u50C9\u50CA\u50B3\u50C2\u50D6\u50DE\u50E5\u50ED\u50E3\u50EE\u50F9\u50F5\u5109\u5101\u5102\u5116\u5115\u5114\u511A\u5121\u513A\u5137\u513C\u513B\u513F\u5140\u5152\u514C\u5154\u5162\u7AF8\u5169\u516A\u516E\u5180\u5182\u56D8\u518C\u5189\u518F\u5191\u5193\u5195\u5196\u51A4\u51A6\u51A2\u51A9\u51AA\u51AB\u51B3\u51B1\u51B2\u51B0\u51B5\u51BD\u51C5\u51C9\u51DB\u51E0\u8655\u51E9\u51ED\u51F0\u51F5\u51FE\u5204\u520B\u5214\u520E\u5227\u522A\u522E\u5233\u5239\u524F\u5244\u524B\u524C\u525E\u5254\u526A\u5274\u5269\u5273\u527F\u527D\u528D\u5294\u5292\u5271\u5288\u5291\u8FA8"], + ["d2a1", "\u8FA7\u52AC\u52AD\u52BC\u52B5\u52C1\u52CD\u52D7\u52DE\u52E3\u52E6\u98ED\u52E0\u52F3\u52F5\u52F8\u52F9\u5306\u5308\u7538\u530D\u5310\u530F\u5315\u531A\u5323\u532F\u5331\u5333\u5338\u5340\u5346\u5345\u4E17\u5349\u534D\u51D6\u535E\u5369\u536E\u5918\u537B\u5377\u5382\u5396\u53A0\u53A6\u53A5\u53AE\u53B0\u53B6\u53C3\u7C12\u96D9\u53DF\u66FC\u71EE\u53EE\u53E8\u53ED\u53FA\u5401\u543D\u5440\u542C\u542D\u543C\u542E\u5436\u5429\u541D\u544E\u548F\u5475\u548E\u545F\u5471\u5477\u5470\u5492\u547B\u5480\u5476\u5484\u5490\u5486\u54C7\u54A2\u54B8\u54A5\u54AC\u54C4\u54C8\u54A8"], + ["d3a1", "\u54AB\u54C2\u54A4\u54BE\u54BC\u54D8\u54E5\u54E6\u550F\u5514\u54FD\u54EE\u54ED\u54FA\u54E2\u5539\u5540\u5563\u554C\u552E\u555C\u5545\u5556\u5557\u5538\u5533\u555D\u5599\u5580\u54AF\u558A\u559F\u557B\u557E\u5598\u559E\u55AE\u557C\u5583\u55A9\u5587\u55A8\u55DA\u55C5\u55DF\u55C4\u55DC\u55E4\u55D4\u5614\u55F7\u5616\u55FE\u55FD\u561B\u55F9\u564E\u5650\u71DF\u5634\u5636\u5632\u5638\u566B\u5664\u562F\u566C\u566A\u5686\u5680\u568A\u56A0\u5694\u568F\u56A5\u56AE\u56B6\u56B4\u56C2\u56BC\u56C1\u56C3\u56C0\u56C8\u56CE\u56D1\u56D3\u56D7\u56EE\u56F9\u5700\u56FF\u5704\u5709"], + ["d4a1", "\u5708\u570B\u570D\u5713\u5718\u5716\u55C7\u571C\u5726\u5737\u5738\u574E\u573B\u5740\u574F\u5769\u57C0\u5788\u5761\u577F\u5789\u5793\u57A0\u57B3\u57A4\u57AA\u57B0\u57C3\u57C6\u57D4\u57D2\u57D3\u580A\u57D6\u57E3\u580B\u5819\u581D\u5872\u5821\u5862\u584B\u5870\u6BC0\u5852\u583D\u5879\u5885\u58B9\u589F\u58AB\u58BA\u58DE\u58BB\u58B8\u58AE\u58C5\u58D3\u58D1\u58D7\u58D9\u58D8\u58E5\u58DC\u58E4\u58DF\u58EF\u58FA\u58F9\u58FB\u58FC\u58FD\u5902\u590A\u5910\u591B\u68A6\u5925\u592C\u592D\u5932\u5938\u593E\u7AD2\u5955\u5950\u594E\u595A\u5958\u5962\u5960\u5967\u596C\u5969"], + ["d5a1", "\u5978\u5981\u599D\u4F5E\u4FAB\u59A3\u59B2\u59C6\u59E8\u59DC\u598D\u59D9\u59DA\u5A25\u5A1F\u5A11\u5A1C\u5A09\u5A1A\u5A40\u5A6C\u5A49\u5A35\u5A36\u5A62\u5A6A\u5A9A\u5ABC\u5ABE\u5ACB\u5AC2\u5ABD\u5AE3\u5AD7\u5AE6\u5AE9\u5AD6\u5AFA\u5AFB\u5B0C\u5B0B\u5B16\u5B32\u5AD0\u5B2A\u5B36\u5B3E\u5B43\u5B45\u5B40\u5B51\u5B55\u5B5A\u5B5B\u5B65\u5B69\u5B70\u5B73\u5B75\u5B78\u6588\u5B7A\u5B80\u5B83\u5BA6\u5BB8\u5BC3\u5BC7\u5BC9\u5BD4\u5BD0\u5BE4\u5BE6\u5BE2\u5BDE\u5BE5\u5BEB\u5BF0\u5BF6\u5BF3\u5C05\u5C07\u5C08\u5C0D\u5C13\u5C20\u5C22\u5C28\u5C38\u5C39\u5C41\u5C46\u5C4E\u5C53"], + ["d6a1", "\u5C50\u5C4F\u5B71\u5C6C\u5C6E\u4E62\u5C76\u5C79\u5C8C\u5C91\u5C94\u599B\u5CAB\u5CBB\u5CB6\u5CBC\u5CB7\u5CC5\u5CBE\u5CC7\u5CD9\u5CE9\u5CFD\u5CFA\u5CED\u5D8C\u5CEA\u5D0B\u5D15\u5D17\u5D5C\u5D1F\u5D1B\u5D11\u5D14\u5D22\u5D1A\u5D19\u5D18\u5D4C\u5D52\u5D4E\u5D4B\u5D6C\u5D73\u5D76\u5D87\u5D84\u5D82\u5DA2\u5D9D\u5DAC\u5DAE\u5DBD\u5D90\u5DB7\u5DBC\u5DC9\u5DCD\u5DD3\u5DD2\u5DD6\u5DDB\u5DEB\u5DF2\u5DF5\u5E0B\u5E1A\u5E19\u5E11\u5E1B\u5E36\u5E37\u5E44\u5E43\u5E40\u5E4E\u5E57\u5E54\u5E5F\u5E62\u5E64\u5E47\u5E75\u5E76\u5E7A\u9EBC\u5E7F\u5EA0\u5EC1\u5EC2\u5EC8\u5ED0\u5ECF"], + ["d7a1", "\u5ED6\u5EE3\u5EDD\u5EDA\u5EDB\u5EE2\u5EE1\u5EE8\u5EE9\u5EEC\u5EF1\u5EF3\u5EF0\u5EF4\u5EF8\u5EFE\u5F03\u5F09\u5F5D\u5F5C\u5F0B\u5F11\u5F16\u5F29\u5F2D\u5F38\u5F41\u5F48\u5F4C\u5F4E\u5F2F\u5F51\u5F56\u5F57\u5F59\u5F61\u5F6D\u5F73\u5F77\u5F83\u5F82\u5F7F\u5F8A\u5F88\u5F91\u5F87\u5F9E\u5F99\u5F98\u5FA0\u5FA8\u5FAD\u5FBC\u5FD6\u5FFB\u5FE4\u5FF8\u5FF1\u5FDD\u60B3\u5FFF\u6021\u6060\u6019\u6010\u6029\u600E\u6031\u601B\u6015\u602B\u6026\u600F\u603A\u605A\u6041\u606A\u6077\u605F\u604A\u6046\u604D\u6063\u6043\u6064\u6042\u606C\u606B\u6059\u6081\u608D\u60E7\u6083\u609A"], + ["d8a1", "\u6084\u609B\u6096\u6097\u6092\u60A7\u608B\u60E1\u60B8\u60E0\u60D3\u60B4\u5FF0\u60BD\u60C6\u60B5\u60D8\u614D\u6115\u6106\u60F6\u60F7\u6100\u60F4\u60FA\u6103\u6121\u60FB\u60F1\u610D\u610E\u6147\u613E\u6128\u6127\u614A\u613F\u613C\u612C\u6134\u613D\u6142\u6144\u6173\u6177\u6158\u6159\u615A\u616B\u6174\u616F\u6165\u6171\u615F\u615D\u6153\u6175\u6199\u6196\u6187\u61AC\u6194\u619A\u618A\u6191\u61AB\u61AE\u61CC\u61CA\u61C9\u61F7\u61C8\u61C3\u61C6\u61BA\u61CB\u7F79\u61CD\u61E6\u61E3\u61F6\u61FA\u61F4\u61FF\u61FD\u61FC\u61FE\u6200\u6208\u6209\u620D\u620C\u6214\u621B"], + ["d9a1", "\u621E\u6221\u622A\u622E\u6230\u6232\u6233\u6241\u624E\u625E\u6263\u625B\u6260\u6268\u627C\u6282\u6289\u627E\u6292\u6293\u6296\u62D4\u6283\u6294\u62D7\u62D1\u62BB\u62CF\u62FF\u62C6\u64D4\u62C8\u62DC\u62CC\u62CA\u62C2\u62C7\u629B\u62C9\u630C\u62EE\u62F1\u6327\u6302\u6308\u62EF\u62F5\u6350\u633E\u634D\u641C\u634F\u6396\u638E\u6380\u63AB\u6376\u63A3\u638F\u6389\u639F\u63B5\u636B\u6369\u63BE\u63E9\u63C0\u63C6\u63E3\u63C9\u63D2\u63F6\u63C4\u6416\u6434\u6406\u6413\u6426\u6436\u651D\u6417\u6428\u640F\u6467\u646F\u6476\u644E\u652A\u6495\u6493\u64A5\u64A9\u6488\u64BC"], + ["daa1", "\u64DA\u64D2\u64C5\u64C7\u64BB\u64D8\u64C2\u64F1\u64E7\u8209\u64E0\u64E1\u62AC\u64E3\u64EF\u652C\u64F6\u64F4\u64F2\u64FA\u6500\u64FD\u6518\u651C\u6505\u6524\u6523\u652B\u6534\u6535\u6537\u6536\u6538\u754B\u6548\u6556\u6555\u654D\u6558\u655E\u655D\u6572\u6578\u6582\u6583\u8B8A\u659B\u659F\u65AB\u65B7\u65C3\u65C6\u65C1\u65C4\u65CC\u65D2\u65DB\u65D9\u65E0\u65E1\u65F1\u6772\u660A\u6603\u65FB\u6773\u6635\u6636\u6634\u661C\u664F\u6644\u6649\u6641\u665E\u665D\u6664\u6667\u6668\u665F\u6662\u6670\u6683\u6688\u668E\u6689\u6684\u6698\u669D\u66C1\u66B9\u66C9\u66BE\u66BC"], + ["dba1", "\u66C4\u66B8\u66D6\u66DA\u66E0\u663F\u66E6\u66E9\u66F0\u66F5\u66F7\u670F\u6716\u671E\u6726\u6727\u9738\u672E\u673F\u6736\u6741\u6738\u6737\u6746\u675E\u6760\u6759\u6763\u6764\u6789\u6770\u67A9\u677C\u676A\u678C\u678B\u67A6\u67A1\u6785\u67B7\u67EF\u67B4\u67EC\u67B3\u67E9\u67B8\u67E4\u67DE\u67DD\u67E2\u67EE\u67B9\u67CE\u67C6\u67E7\u6A9C\u681E\u6846\u6829\u6840\u684D\u6832\u684E\u68B3\u682B\u6859\u6863\u6877\u687F\u689F\u688F\u68AD\u6894\u689D\u689B\u6883\u6AAE\u68B9\u6874\u68B5\u68A0\u68BA\u690F\u688D\u687E\u6901\u68CA\u6908\u68D8\u6922\u6926\u68E1\u690C\u68CD"], + ["dca1", "\u68D4\u68E7\u68D5\u6936\u6912\u6904\u68D7\u68E3\u6925\u68F9\u68E0\u68EF\u6928\u692A\u691A\u6923\u6921\u68C6\u6979\u6977\u695C\u6978\u696B\u6954\u697E\u696E\u6939\u6974\u693D\u6959\u6930\u6961\u695E\u695D\u6981\u696A\u69B2\u69AE\u69D0\u69BF\u69C1\u69D3\u69BE\u69CE\u5BE8\u69CA\u69DD\u69BB\u69C3\u69A7\u6A2E\u6991\u69A0\u699C\u6995\u69B4\u69DE\u69E8\u6A02\u6A1B\u69FF\u6B0A\u69F9\u69F2\u69E7\u6A05\u69B1\u6A1E\u69ED\u6A14\u69EB\u6A0A\u6A12\u6AC1\u6A23\u6A13\u6A44\u6A0C\u6A72\u6A36\u6A78\u6A47\u6A62\u6A59\u6A66\u6A48\u6A38\u6A22\u6A90\u6A8D\u6AA0\u6A84\u6AA2\u6AA3"], + ["dda1", "\u6A97\u8617\u6ABB\u6AC3\u6AC2\u6AB8\u6AB3\u6AAC\u6ADE\u6AD1\u6ADF\u6AAA\u6ADA\u6AEA\u6AFB\u6B05\u8616\u6AFA\u6B12\u6B16\u9B31\u6B1F\u6B38\u6B37\u76DC\u6B39\u98EE\u6B47\u6B43\u6B49\u6B50\u6B59\u6B54\u6B5B\u6B5F\u6B61\u6B78\u6B79\u6B7F\u6B80\u6B84\u6B83\u6B8D\u6B98\u6B95\u6B9E\u6BA4\u6BAA\u6BAB\u6BAF\u6BB2\u6BB1\u6BB3\u6BB7\u6BBC\u6BC6\u6BCB\u6BD3\u6BDF\u6BEC\u6BEB\u6BF3\u6BEF\u9EBE\u6C08\u6C13\u6C14\u6C1B\u6C24\u6C23\u6C5E\u6C55\u6C62\u6C6A\u6C82\u6C8D\u6C9A\u6C81\u6C9B\u6C7E\u6C68\u6C73\u6C92\u6C90\u6CC4\u6CF1\u6CD3\u6CBD\u6CD7\u6CC5\u6CDD\u6CAE\u6CB1\u6CBE"], + ["dea1", "\u6CBA\u6CDB\u6CEF\u6CD9\u6CEA\u6D1F\u884D\u6D36\u6D2B\u6D3D\u6D38\u6D19\u6D35\u6D33\u6D12\u6D0C\u6D63\u6D93\u6D64\u6D5A\u6D79\u6D59\u6D8E\u6D95\u6FE4\u6D85\u6DF9\u6E15\u6E0A\u6DB5\u6DC7\u6DE6\u6DB8\u6DC6\u6DEC\u6DDE\u6DCC\u6DE8\u6DD2\u6DC5\u6DFA\u6DD9\u6DE4\u6DD5\u6DEA\u6DEE\u6E2D\u6E6E\u6E2E\u6E19\u6E72\u6E5F\u6E3E\u6E23\u6E6B\u6E2B\u6E76\u6E4D\u6E1F\u6E43\u6E3A\u6E4E\u6E24\u6EFF\u6E1D\u6E38\u6E82\u6EAA\u6E98\u6EC9\u6EB7\u6ED3\u6EBD\u6EAF\u6EC4\u6EB2\u6ED4\u6ED5\u6E8F\u6EA5\u6EC2\u6E9F\u6F41\u6F11\u704C\u6EEC\u6EF8\u6EFE\u6F3F\u6EF2\u6F31\u6EEF\u6F32\u6ECC"], + ["dfa1", "\u6F3E\u6F13\u6EF7\u6F86\u6F7A\u6F78\u6F81\u6F80\u6F6F\u6F5B\u6FF3\u6F6D\u6F82\u6F7C\u6F58\u6F8E\u6F91\u6FC2\u6F66\u6FB3\u6FA3\u6FA1\u6FA4\u6FB9\u6FC6\u6FAA\u6FDF\u6FD5\u6FEC\u6FD4\u6FD8\u6FF1\u6FEE\u6FDB\u7009\u700B\u6FFA\u7011\u7001\u700F\u6FFE\u701B\u701A\u6F74\u701D\u7018\u701F\u7030\u703E\u7032\u7051\u7063\u7099\u7092\u70AF\u70F1\u70AC\u70B8\u70B3\u70AE\u70DF\u70CB\u70DD\u70D9\u7109\u70FD\u711C\u7119\u7165\u7155\u7188\u7166\u7162\u714C\u7156\u716C\u718F\u71FB\u7184\u7195\u71A8\u71AC\u71D7\u71B9\u71BE\u71D2\u71C9\u71D4\u71CE\u71E0\u71EC\u71E7\u71F5\u71FC"], + ["e0a1", "\u71F9\u71FF\u720D\u7210\u721B\u7228\u722D\u722C\u7230\u7232\u723B\u723C\u723F\u7240\u7246\u724B\u7258\u7274\u727E\u7282\u7281\u7287\u7292\u7296\u72A2\u72A7\u72B9\u72B2\u72C3\u72C6\u72C4\u72CE\u72D2\u72E2\u72E0\u72E1\u72F9\u72F7\u500F\u7317\u730A\u731C\u7316\u731D\u7334\u732F\u7329\u7325\u733E\u734E\u734F\u9ED8\u7357\u736A\u7368\u7370\u7378\u7375\u737B\u737A\u73C8\u73B3\u73CE\u73BB\u73C0\u73E5\u73EE\u73DE\u74A2\u7405\u746F\u7425\u73F8\u7432\u743A\u7455\u743F\u745F\u7459\u7441\u745C\u7469\u7470\u7463\u746A\u7476\u747E\u748B\u749E\u74A7\u74CA\u74CF\u74D4\u73F1"], + ["e1a1", "\u74E0\u74E3\u74E7\u74E9\u74EE\u74F2\u74F0\u74F1\u74F8\u74F7\u7504\u7503\u7505\u750C\u750E\u750D\u7515\u7513\u751E\u7526\u752C\u753C\u7544\u754D\u754A\u7549\u755B\u7546\u755A\u7569\u7564\u7567\u756B\u756D\u7578\u7576\u7586\u7587\u7574\u758A\u7589\u7582\u7594\u759A\u759D\u75A5\u75A3\u75C2\u75B3\u75C3\u75B5\u75BD\u75B8\u75BC\u75B1\u75CD\u75CA\u75D2\u75D9\u75E3\u75DE\u75FE\u75FF\u75FC\u7601\u75F0\u75FA\u75F2\u75F3\u760B\u760D\u7609\u761F\u7627\u7620\u7621\u7622\u7624\u7634\u7630\u763B\u7647\u7648\u7646\u765C\u7658\u7661\u7662\u7668\u7669\u766A\u7667\u766C\u7670"], + ["e2a1", "\u7672\u7676\u7678\u767C\u7680\u7683\u7688\u768B\u768E\u7696\u7693\u7699\u769A\u76B0\u76B4\u76B8\u76B9\u76BA\u76C2\u76CD\u76D6\u76D2\u76DE\u76E1\u76E5\u76E7\u76EA\u862F\u76FB\u7708\u7707\u7704\u7729\u7724\u771E\u7725\u7726\u771B\u7737\u7738\u7747\u775A\u7768\u776B\u775B\u7765\u777F\u777E\u7779\u778E\u778B\u7791\u77A0\u779E\u77B0\u77B6\u77B9\u77BF\u77BC\u77BD\u77BB\u77C7\u77CD\u77D7\u77DA\u77DC\u77E3\u77EE\u77FC\u780C\u7812\u7926\u7820\u792A\u7845\u788E\u7874\u7886\u787C\u789A\u788C\u78A3\u78B5\u78AA\u78AF\u78D1\u78C6\u78CB\u78D4\u78BE\u78BC\u78C5\u78CA\u78EC"], + ["e3a1", "\u78E7\u78DA\u78FD\u78F4\u7907\u7912\u7911\u7919\u792C\u792B\u7940\u7960\u7957\u795F\u795A\u7955\u7953\u797A\u797F\u798A\u799D\u79A7\u9F4B\u79AA\u79AE\u79B3\u79B9\u79BA\u79C9\u79D5\u79E7\u79EC\u79E1\u79E3\u7A08\u7A0D\u7A18\u7A19\u7A20\u7A1F\u7980\u7A31\u7A3B\u7A3E\u7A37\u7A43\u7A57\u7A49\u7A61\u7A62\u7A69\u9F9D\u7A70\u7A79\u7A7D\u7A88\u7A97\u7A95\u7A98\u7A96\u7AA9\u7AC8\u7AB0\u7AB6\u7AC5\u7AC4\u7ABF\u9083\u7AC7\u7ACA\u7ACD\u7ACF\u7AD5\u7AD3\u7AD9\u7ADA\u7ADD\u7AE1\u7AE2\u7AE6\u7AED\u7AF0\u7B02\u7B0F\u7B0A\u7B06\u7B33\u7B18\u7B19\u7B1E\u7B35\u7B28\u7B36\u7B50"], + ["e4a1", "\u7B7A\u7B04\u7B4D\u7B0B\u7B4C\u7B45\u7B75\u7B65\u7B74\u7B67\u7B70\u7B71\u7B6C\u7B6E\u7B9D\u7B98\u7B9F\u7B8D\u7B9C\u7B9A\u7B8B\u7B92\u7B8F\u7B5D\u7B99\u7BCB\u7BC1\u7BCC\u7BCF\u7BB4\u7BC6\u7BDD\u7BE9\u7C11\u7C14\u7BE6\u7BE5\u7C60\u7C00\u7C07\u7C13\u7BF3\u7BF7\u7C17\u7C0D\u7BF6\u7C23\u7C27\u7C2A\u7C1F\u7C37\u7C2B\u7C3D\u7C4C\u7C43\u7C54\u7C4F\u7C40\u7C50\u7C58\u7C5F\u7C64\u7C56\u7C65\u7C6C\u7C75\u7C83\u7C90\u7CA4\u7CAD\u7CA2\u7CAB\u7CA1\u7CA8\u7CB3\u7CB2\u7CB1\u7CAE\u7CB9\u7CBD\u7CC0\u7CC5\u7CC2\u7CD8\u7CD2\u7CDC\u7CE2\u9B3B\u7CEF\u7CF2\u7CF4\u7CF6\u7CFA\u7D06"], + ["e5a1", "\u7D02\u7D1C\u7D15\u7D0A\u7D45\u7D4B\u7D2E\u7D32\u7D3F\u7D35\u7D46\u7D73\u7D56\u7D4E\u7D72\u7D68\u7D6E\u7D4F\u7D63\u7D93\u7D89\u7D5B\u7D8F\u7D7D\u7D9B\u7DBA\u7DAE\u7DA3\u7DB5\u7DC7\u7DBD\u7DAB\u7E3D\u7DA2\u7DAF\u7DDC\u7DB8\u7D9F\u7DB0\u7DD8\u7DDD\u7DE4\u7DDE\u7DFB\u7DF2\u7DE1\u7E05\u7E0A\u7E23\u7E21\u7E12\u7E31\u7E1F\u7E09\u7E0B\u7E22\u7E46\u7E66\u7E3B\u7E35\u7E39\u7E43\u7E37\u7E32\u7E3A\u7E67\u7E5D\u7E56\u7E5E\u7E59\u7E5A\u7E79\u7E6A\u7E69\u7E7C\u7E7B\u7E83\u7DD5\u7E7D\u8FAE\u7E7F\u7E88\u7E89\u7E8C\u7E92\u7E90\u7E93\u7E94\u7E96\u7E8E\u7E9B\u7E9C\u7F38\u7F3A"], + ["e6a1", "\u7F45\u7F4C\u7F4D\u7F4E\u7F50\u7F51\u7F55\u7F54\u7F58\u7F5F\u7F60\u7F68\u7F69\u7F67\u7F78\u7F82\u7F86\u7F83\u7F88\u7F87\u7F8C\u7F94\u7F9E\u7F9D\u7F9A\u7FA3\u7FAF\u7FB2\u7FB9\u7FAE\u7FB6\u7FB8\u8B71\u7FC5\u7FC6\u7FCA\u7FD5\u7FD4\u7FE1\u7FE6\u7FE9\u7FF3\u7FF9\u98DC\u8006\u8004\u800B\u8012\u8018\u8019\u801C\u8021\u8028\u803F\u803B\u804A\u8046\u8052\u8058\u805A\u805F\u8062\u8068\u8073\u8072\u8070\u8076\u8079\u807D\u807F\u8084\u8086\u8085\u809B\u8093\u809A\u80AD\u5190\u80AC\u80DB\u80E5\u80D9\u80DD\u80C4\u80DA\u80D6\u8109\u80EF\u80F1\u811B\u8129\u8123\u812F\u814B"], + ["e7a1", "\u968B\u8146\u813E\u8153\u8151\u80FC\u8171\u816E\u8165\u8166\u8174\u8183\u8188\u818A\u8180\u8182\u81A0\u8195\u81A4\u81A3\u815F\u8193\u81A9\u81B0\u81B5\u81BE\u81B8\u81BD\u81C0\u81C2\u81BA\u81C9\u81CD\u81D1\u81D9\u81D8\u81C8\u81DA\u81DF\u81E0\u81E7\u81FA\u81FB\u81FE\u8201\u8202\u8205\u8207\u820A\u820D\u8210\u8216\u8229\u822B\u8238\u8233\u8240\u8259\u8258\u825D\u825A\u825F\u8264\u8262\u8268\u826A\u826B\u822E\u8271\u8277\u8278\u827E\u828D\u8292\u82AB\u829F\u82BB\u82AC\u82E1\u82E3\u82DF\u82D2\u82F4\u82F3\u82FA\u8393\u8303\u82FB\u82F9\u82DE\u8306\u82DC\u8309\u82D9"], + ["e8a1", "\u8335\u8334\u8316\u8332\u8331\u8340\u8339\u8350\u8345\u832F\u832B\u8317\u8318\u8385\u839A\u83AA\u839F\u83A2\u8396\u8323\u838E\u8387\u838A\u837C\u83B5\u8373\u8375\u83A0\u8389\u83A8\u83F4\u8413\u83EB\u83CE\u83FD\u8403\u83D8\u840B\u83C1\u83F7\u8407\u83E0\u83F2\u840D\u8422\u8420\u83BD\u8438\u8506\u83FB\u846D\u842A\u843C\u855A\u8484\u8477\u846B\u84AD\u846E\u8482\u8469\u8446\u842C\u846F\u8479\u8435\u84CA\u8462\u84B9\u84BF\u849F\u84D9\u84CD\u84BB\u84DA\u84D0\u84C1\u84C6\u84D6\u84A1\u8521\u84FF\u84F4\u8517\u8518\u852C\u851F\u8515\u8514\u84FC\u8540\u8563\u8558\u8548"], + ["e9a1", "\u8541\u8602\u854B\u8555\u8580\u85A4\u8588\u8591\u858A\u85A8\u856D\u8594\u859B\u85EA\u8587\u859C\u8577\u857E\u8590\u85C9\u85BA\u85CF\u85B9\u85D0\u85D5\u85DD\u85E5\u85DC\u85F9\u860A\u8613\u860B\u85FE\u85FA\u8606\u8622\u861A\u8630\u863F\u864D\u4E55\u8654\u865F\u8667\u8671\u8693\u86A3\u86A9\u86AA\u868B\u868C\u86B6\u86AF\u86C4\u86C6\u86B0\u86C9\u8823\u86AB\u86D4\u86DE\u86E9\u86EC\u86DF\u86DB\u86EF\u8712\u8706\u8708\u8700\u8703\u86FB\u8711\u8709\u870D\u86F9\u870A\u8734\u873F\u8737\u873B\u8725\u8729\u871A\u8760\u875F\u8778\u874C\u874E\u8774\u8757\u8768\u876E\u8759"], + ["eaa1", "\u8753\u8763\u876A\u8805\u87A2\u879F\u8782\u87AF\u87CB\u87BD\u87C0\u87D0\u96D6\u87AB\u87C4\u87B3\u87C7\u87C6\u87BB\u87EF\u87F2\u87E0\u880F\u880D\u87FE\u87F6\u87F7\u880E\u87D2\u8811\u8816\u8815\u8822\u8821\u8831\u8836\u8839\u8827\u883B\u8844\u8842\u8852\u8859\u885E\u8862\u886B\u8881\u887E\u889E\u8875\u887D\u88B5\u8872\u8882\u8897\u8892\u88AE\u8899\u88A2\u888D\u88A4\u88B0\u88BF\u88B1\u88C3\u88C4\u88D4\u88D8\u88D9\u88DD\u88F9\u8902\u88FC\u88F4\u88E8\u88F2\u8904\u890C\u890A\u8913\u8943\u891E\u8925\u892A\u892B\u8941\u8944\u893B\u8936\u8938\u894C\u891D\u8960\u895E"], + ["eba1", "\u8966\u8964\u896D\u896A\u896F\u8974\u8977\u897E\u8983\u8988\u898A\u8993\u8998\u89A1\u89A9\u89A6\u89AC\u89AF\u89B2\u89BA\u89BD\u89BF\u89C0\u89DA\u89DC\u89DD\u89E7\u89F4\u89F8\u8A03\u8A16\u8A10\u8A0C\u8A1B\u8A1D\u8A25\u8A36\u8A41\u8A5B\u8A52\u8A46\u8A48\u8A7C\u8A6D\u8A6C\u8A62\u8A85\u8A82\u8A84\u8AA8\u8AA1\u8A91\u8AA5\u8AA6\u8A9A\u8AA3\u8AC4\u8ACD\u8AC2\u8ADA\u8AEB\u8AF3\u8AE7\u8AE4\u8AF1\u8B14\u8AE0\u8AE2\u8AF7\u8ADE\u8ADB\u8B0C\u8B07\u8B1A\u8AE1\u8B16\u8B10\u8B17\u8B20\u8B33\u97AB\u8B26\u8B2B\u8B3E\u8B28\u8B41\u8B4C\u8B4F\u8B4E\u8B49\u8B56\u8B5B\u8B5A\u8B6B"], + ["eca1", "\u8B5F\u8B6C\u8B6F\u8B74\u8B7D\u8B80\u8B8C\u8B8E\u8B92\u8B93\u8B96\u8B99\u8B9A\u8C3A\u8C41\u8C3F\u8C48\u8C4C\u8C4E\u8C50\u8C55\u8C62\u8C6C\u8C78\u8C7A\u8C82\u8C89\u8C85\u8C8A\u8C8D\u8C8E\u8C94\u8C7C\u8C98\u621D\u8CAD\u8CAA\u8CBD\u8CB2\u8CB3\u8CAE\u8CB6\u8CC8\u8CC1\u8CE4\u8CE3\u8CDA\u8CFD\u8CFA\u8CFB\u8D04\u8D05\u8D0A\u8D07\u8D0F\u8D0D\u8D10\u9F4E\u8D13\u8CCD\u8D14\u8D16\u8D67\u8D6D\u8D71\u8D73\u8D81\u8D99\u8DC2\u8DBE\u8DBA\u8DCF\u8DDA\u8DD6\u8DCC\u8DDB\u8DCB\u8DEA\u8DEB\u8DDF\u8DE3\u8DFC\u8E08\u8E09\u8DFF\u8E1D\u8E1E\u8E10\u8E1F\u8E42\u8E35\u8E30\u8E34\u8E4A"], + ["eda1", "\u8E47\u8E49\u8E4C\u8E50\u8E48\u8E59\u8E64\u8E60\u8E2A\u8E63\u8E55\u8E76\u8E72\u8E7C\u8E81\u8E87\u8E85\u8E84\u8E8B\u8E8A\u8E93\u8E91\u8E94\u8E99\u8EAA\u8EA1\u8EAC\u8EB0\u8EC6\u8EB1\u8EBE\u8EC5\u8EC8\u8ECB\u8EDB\u8EE3\u8EFC\u8EFB\u8EEB\u8EFE\u8F0A\u8F05\u8F15\u8F12\u8F19\u8F13\u8F1C\u8F1F\u8F1B\u8F0C\u8F26\u8F33\u8F3B\u8F39\u8F45\u8F42\u8F3E\u8F4C\u8F49\u8F46\u8F4E\u8F57\u8F5C\u8F62\u8F63\u8F64\u8F9C\u8F9F\u8FA3\u8FAD\u8FAF\u8FB7\u8FDA\u8FE5\u8FE2\u8FEA\u8FEF\u9087\u8FF4\u9005\u8FF9\u8FFA\u9011\u9015\u9021\u900D\u901E\u9016\u900B\u9027\u9036\u9035\u9039\u8FF8"], + ["eea1", "\u904F\u9050\u9051\u9052\u900E\u9049\u903E\u9056\u9058\u905E\u9068\u906F\u9076\u96A8\u9072\u9082\u907D\u9081\u9080\u908A\u9089\u908F\u90A8\u90AF\u90B1\u90B5\u90E2\u90E4\u6248\u90DB\u9102\u9112\u9119\u9132\u9130\u914A\u9156\u9158\u9163\u9165\u9169\u9173\u9172\u918B\u9189\u9182\u91A2\u91AB\u91AF\u91AA\u91B5\u91B4\u91BA\u91C0\u91C1\u91C9\u91CB\u91D0\u91D6\u91DF\u91E1\u91DB\u91FC\u91F5\u91F6\u921E\u91FF\u9214\u922C\u9215\u9211\u925E\u9257\u9245\u9249\u9264\u9248\u9295\u923F\u924B\u9250\u929C\u9296\u9293\u929B\u925A\u92CF\u92B9\u92B7\u92E9\u930F\u92FA\u9344\u932E"], + ["efa1", "\u9319\u9322\u931A\u9323\u933A\u9335\u933B\u935C\u9360\u937C\u936E\u9356\u93B0\u93AC\u93AD\u9394\u93B9\u93D6\u93D7\u93E8\u93E5\u93D8\u93C3\u93DD\u93D0\u93C8\u93E4\u941A\u9414\u9413\u9403\u9407\u9410\u9436\u942B\u9435\u9421\u943A\u9441\u9452\u9444\u945B\u9460\u9462\u945E\u946A\u9229\u9470\u9475\u9477\u947D\u945A\u947C\u947E\u9481\u947F\u9582\u9587\u958A\u9594\u9596\u9598\u9599\u95A0\u95A8\u95A7\u95AD\u95BC\u95BB\u95B9\u95BE\u95CA\u6FF6\u95C3\u95CD\u95CC\u95D5\u95D4\u95D6\u95DC\u95E1\u95E5\u95E2\u9621\u9628\u962E\u962F\u9642\u964C\u964F\u964B\u9677\u965C\u965E"], + ["f0a1", "\u965D\u965F\u9666\u9672\u966C\u968D\u9698\u9695\u9697\u96AA\u96A7\u96B1\u96B2\u96B0\u96B4\u96B6\u96B8\u96B9\u96CE\u96CB\u96C9\u96CD\u894D\u96DC\u970D\u96D5\u96F9\u9704\u9706\u9708\u9713\u970E\u9711\u970F\u9716\u9719\u9724\u972A\u9730\u9739\u973D\u973E\u9744\u9746\u9748\u9742\u9749\u975C\u9760\u9764\u9766\u9768\u52D2\u976B\u9771\u9779\u9785\u977C\u9781\u977A\u9786\u978B\u978F\u9790\u979C\u97A8\u97A6\u97A3\u97B3\u97B4\u97C3\u97C6\u97C8\u97CB\u97DC\u97ED\u9F4F\u97F2\u7ADF\u97F6\u97F5\u980F\u980C\u9838\u9824\u9821\u9837\u983D\u9846\u984F\u984B\u986B\u986F\u9870"], + ["f1a1", "\u9871\u9874\u9873\u98AA\u98AF\u98B1\u98B6\u98C4\u98C3\u98C6\u98E9\u98EB\u9903\u9909\u9912\u9914\u9918\u9921\u991D\u991E\u9924\u9920\u992C\u992E\u993D\u993E\u9942\u9949\u9945\u9950\u994B\u9951\u9952\u994C\u9955\u9997\u9998\u99A5\u99AD\u99AE\u99BC\u99DF\u99DB\u99DD\u99D8\u99D1\u99ED\u99EE\u99F1\u99F2\u99FB\u99F8\u9A01\u9A0F\u9A05\u99E2\u9A19\u9A2B\u9A37\u9A45\u9A42\u9A40\u9A43\u9A3E\u9A55\u9A4D\u9A5B\u9A57\u9A5F\u9A62\u9A65\u9A64\u9A69\u9A6B\u9A6A\u9AAD\u9AB0\u9ABC\u9AC0\u9ACF\u9AD1\u9AD3\u9AD4\u9ADE\u9ADF\u9AE2\u9AE3\u9AE6\u9AEF\u9AEB\u9AEE\u9AF4\u9AF1\u9AF7"], + ["f2a1", "\u9AFB\u9B06\u9B18\u9B1A\u9B1F\u9B22\u9B23\u9B25\u9B27\u9B28\u9B29\u9B2A\u9B2E\u9B2F\u9B32\u9B44\u9B43\u9B4F\u9B4D\u9B4E\u9B51\u9B58\u9B74\u9B93\u9B83\u9B91\u9B96\u9B97\u9B9F\u9BA0\u9BA8\u9BB4\u9BC0\u9BCA\u9BB9\u9BC6\u9BCF\u9BD1\u9BD2\u9BE3\u9BE2\u9BE4\u9BD4\u9BE1\u9C3A\u9BF2\u9BF1\u9BF0\u9C15\u9C14\u9C09\u9C13\u9C0C\u9C06\u9C08\u9C12\u9C0A\u9C04\u9C2E\u9C1B\u9C25\u9C24\u9C21\u9C30\u9C47\u9C32\u9C46\u9C3E\u9C5A\u9C60\u9C67\u9C76\u9C78\u9CE7\u9CEC\u9CF0\u9D09\u9D08\u9CEB\u9D03\u9D06\u9D2A\u9D26\u9DAF\u9D23\u9D1F\u9D44\u9D15\u9D12\u9D41\u9D3F\u9D3E\u9D46\u9D48"], + ["f3a1", "\u9D5D\u9D5E\u9D64\u9D51\u9D50\u9D59\u9D72\u9D89\u9D87\u9DAB\u9D6F\u9D7A\u9D9A\u9DA4\u9DA9\u9DB2\u9DC4\u9DC1\u9DBB\u9DB8\u9DBA\u9DC6\u9DCF\u9DC2\u9DD9\u9DD3\u9DF8\u9DE6\u9DED\u9DEF\u9DFD\u9E1A\u9E1B\u9E1E\u9E75\u9E79\u9E7D\u9E81\u9E88\u9E8B\u9E8C\u9E92\u9E95\u9E91\u9E9D\u9EA5\u9EA9\u9EB8\u9EAA\u9EAD\u9761\u9ECC\u9ECE\u9ECF\u9ED0\u9ED4\u9EDC\u9EDE\u9EDD\u9EE0\u9EE5\u9EE8\u9EEF\u9EF4\u9EF6\u9EF7\u9EF9\u9EFB\u9EFC\u9EFD\u9F07\u9F08\u76B7\u9F15\u9F21\u9F2C\u9F3E\u9F4A\u9F52\u9F54\u9F63\u9F5F\u9F60\u9F61\u9F66\u9F67\u9F6C\u9F6A\u9F77\u9F72\u9F76\u9F95\u9F9C\u9FA0"], + ["f4a1", "\u582F\u69C7\u9059\u7464\u51DC\u7199"], + ["f9a1", "\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7"], + ["faa1", "\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1"], + ["fba1", "\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA"], + ["fca1", "\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1"], + ["fcf1", "\u2170", 9, "\uFFE2\uFFE4\uFF07\uFF02"], + ["8fa2af", "\u02D8\u02C7\xB8\u02D9\u02DD\xAF\u02DB\u02DA\uFF5E\u0384\u0385"], + ["8fa2c2", "\xA1\xA6\xBF"], + ["8fa2eb", "\xBA\xAA\xA9\xAE\u2122\xA4\u2116"], + ["8fa6e1", "\u0386\u0388\u0389\u038A\u03AA"], + ["8fa6e7", "\u038C"], + ["8fa6e9", "\u038E\u03AB"], + ["8fa6ec", "\u038F"], + ["8fa6f1", "\u03AC\u03AD\u03AE\u03AF\u03CA\u0390\u03CC\u03C2\u03CD\u03CB\u03B0\u03CE"], + ["8fa7c2", "\u0402", 10, "\u040E\u040F"], + ["8fa7f2", "\u0452", 10, "\u045E\u045F"], + ["8fa9a1", "\xC6\u0110"], + ["8fa9a4", "\u0126"], + ["8fa9a6", "\u0132"], + ["8fa9a8", "\u0141\u013F"], + ["8fa9ab", "\u014A\xD8\u0152"], + ["8fa9af", "\u0166\xDE"], + ["8fa9c1", "\xE6\u0111\xF0\u0127\u0131\u0133\u0138\u0142\u0140\u0149\u014B\xF8\u0153\xDF\u0167\xFE"], + ["8faaa1", "\xC1\xC0\xC4\xC2\u0102\u01CD\u0100\u0104\xC5\xC3\u0106\u0108\u010C\xC7\u010A\u010E\xC9\xC8\xCB\xCA\u011A\u0116\u0112\u0118"], + ["8faaba", "\u011C\u011E\u0122\u0120\u0124\xCD\xCC\xCF\xCE\u01CF\u0130\u012A\u012E\u0128\u0134\u0136\u0139\u013D\u013B\u0143\u0147\u0145\xD1\xD3\xD2\xD6\xD4\u01D1\u0150\u014C\xD5\u0154\u0158\u0156\u015A\u015C\u0160\u015E\u0164\u0162\xDA\xD9\xDC\xDB\u016C\u01D3\u0170\u016A\u0172\u016E\u0168\u01D7\u01DB\u01D9\u01D5\u0174\xDD\u0178\u0176\u0179\u017D\u017B"], + ["8faba1", "\xE1\xE0\xE4\xE2\u0103\u01CE\u0101\u0105\xE5\xE3\u0107\u0109\u010D\xE7\u010B\u010F\xE9\xE8\xEB\xEA\u011B\u0117\u0113\u0119\u01F5\u011D\u011F"], + ["8fabbd", "\u0121\u0125\xED\xEC\xEF\xEE\u01D0"], + ["8fabc5", "\u012B\u012F\u0129\u0135\u0137\u013A\u013E\u013C\u0144\u0148\u0146\xF1\xF3\xF2\xF6\xF4\u01D2\u0151\u014D\xF5\u0155\u0159\u0157\u015B\u015D\u0161\u015F\u0165\u0163\xFA\xF9\xFC\xFB\u016D\u01D4\u0171\u016B\u0173\u016F\u0169\u01D8\u01DC\u01DA\u01D6\u0175\xFD\xFF\u0177\u017A\u017E\u017C"], + ["8fb0a1", "\u4E02\u4E04\u4E05\u4E0C\u4E12\u4E1F\u4E23\u4E24\u4E28\u4E2B\u4E2E\u4E2F\u4E30\u4E35\u4E40\u4E41\u4E44\u4E47\u4E51\u4E5A\u4E5C\u4E63\u4E68\u4E69\u4E74\u4E75\u4E79\u4E7F\u4E8D\u4E96\u4E97\u4E9D\u4EAF\u4EB9\u4EC3\u4ED0\u4EDA\u4EDB\u4EE0\u4EE1\u4EE2\u4EE8\u4EEF\u4EF1\u4EF3\u4EF5\u4EFD\u4EFE\u4EFF\u4F00\u4F02\u4F03\u4F08\u4F0B\u4F0C\u4F12\u4F15\u4F16\u4F17\u4F19\u4F2E\u4F31\u4F60\u4F33\u4F35\u4F37\u4F39\u4F3B\u4F3E\u4F40\u4F42\u4F48\u4F49\u4F4B\u4F4C\u4F52\u4F54\u4F56\u4F58\u4F5F\u4F63\u4F6A\u4F6C\u4F6E\u4F71\u4F77\u4F78\u4F79\u4F7A\u4F7D\u4F7E\u4F81\u4F82\u4F84"], + ["8fb1a1", "\u4F85\u4F89\u4F8A\u4F8C\u4F8E\u4F90\u4F92\u4F93\u4F94\u4F97\u4F99\u4F9A\u4F9E\u4F9F\u4FB2\u4FB7\u4FB9\u4FBB\u4FBC\u4FBD\u4FBE\u4FC0\u4FC1\u4FC5\u4FC6\u4FC8\u4FC9\u4FCB\u4FCC\u4FCD\u4FCF\u4FD2\u4FDC\u4FE0\u4FE2\u4FF0\u4FF2\u4FFC\u4FFD\u4FFF\u5000\u5001\u5004\u5007\u500A\u500C\u500E\u5010\u5013\u5017\u5018\u501B\u501C\u501D\u501E\u5022\u5027\u502E\u5030\u5032\u5033\u5035\u5040\u5041\u5042\u5045\u5046\u504A\u504C\u504E\u5051\u5052\u5053\u5057\u5059\u505F\u5060\u5062\u5063\u5066\u5067\u506A\u506D\u5070\u5071\u503B\u5081\u5083\u5084\u5086\u508A\u508E\u508F\u5090"], + ["8fb2a1", "\u5092\u5093\u5094\u5096\u509B\u509C\u509E", 4, "\u50AA\u50AF\u50B0\u50B9\u50BA\u50BD\u50C0\u50C3\u50C4\u50C7\u50CC\u50CE\u50D0\u50D3\u50D4\u50D8\u50DC\u50DD\u50DF\u50E2\u50E4\u50E6\u50E8\u50E9\u50EF\u50F1\u50F6\u50FA\u50FE\u5103\u5106\u5107\u5108\u510B\u510C\u510D\u510E\u50F2\u5110\u5117\u5119\u511B\u511C\u511D\u511E\u5123\u5127\u5128\u512C\u512D\u512F\u5131\u5133\u5134\u5135\u5138\u5139\u5142\u514A\u514F\u5153\u5155\u5157\u5158\u515F\u5164\u5166\u517E\u5183\u5184\u518B\u518E\u5198\u519D\u51A1\u51A3\u51AD\u51B8\u51BA\u51BC\u51BE\u51BF\u51C2"], + ["8fb3a1", "\u51C8\u51CF\u51D1\u51D2\u51D3\u51D5\u51D8\u51DE\u51E2\u51E5\u51EE\u51F2\u51F3\u51F4\u51F7\u5201\u5202\u5205\u5212\u5213\u5215\u5216\u5218\u5222\u5228\u5231\u5232\u5235\u523C\u5245\u5249\u5255\u5257\u5258\u525A\u525C\u525F\u5260\u5261\u5266\u526E\u5277\u5278\u5279\u5280\u5282\u5285\u528A\u528C\u5293\u5295\u5296\u5297\u5298\u529A\u529C\u52A4\u52A5\u52A6\u52A7\u52AF\u52B0\u52B6\u52B7\u52B8\u52BA\u52BB\u52BD\u52C0\u52C4\u52C6\u52C8\u52CC\u52CF\u52D1\u52D4\u52D6\u52DB\u52DC\u52E1\u52E5\u52E8\u52E9\u52EA\u52EC\u52F0\u52F1\u52F4\u52F6\u52F7\u5300\u5303\u530A\u530B"], + ["8fb4a1", "\u530C\u5311\u5313\u5318\u531B\u531C\u531E\u531F\u5325\u5327\u5328\u5329\u532B\u532C\u532D\u5330\u5332\u5335\u533C\u533D\u533E\u5342\u534C\u534B\u5359\u535B\u5361\u5363\u5365\u536C\u536D\u5372\u5379\u537E\u5383\u5387\u5388\u538E\u5393\u5394\u5399\u539D\u53A1\u53A4\u53AA\u53AB\u53AF\u53B2\u53B4\u53B5\u53B7\u53B8\u53BA\u53BD\u53C0\u53C5\u53CF\u53D2\u53D3\u53D5\u53DA\u53DD\u53DE\u53E0\u53E6\u53E7\u53F5\u5402\u5413\u541A\u5421\u5427\u5428\u542A\u542F\u5431\u5434\u5435\u5443\u5444\u5447\u544D\u544F\u545E\u5462\u5464\u5466\u5467\u5469\u546B\u546D\u546E\u5474\u547F"], + ["8fb5a1", "\u5481\u5483\u5485\u5488\u5489\u548D\u5491\u5495\u5496\u549C\u549F\u54A1\u54A6\u54A7\u54A9\u54AA\u54AD\u54AE\u54B1\u54B7\u54B9\u54BA\u54BB\u54BF\u54C6\u54CA\u54CD\u54CE\u54E0\u54EA\u54EC\u54EF\u54F6\u54FC\u54FE\u54FF\u5500\u5501\u5505\u5508\u5509\u550C\u550D\u550E\u5515\u552A\u552B\u5532\u5535\u5536\u553B\u553C\u553D\u5541\u5547\u5549\u554A\u554D\u5550\u5551\u5558\u555A\u555B\u555E\u5560\u5561\u5564\u5566\u557F\u5581\u5582\u5586\u5588\u558E\u558F\u5591\u5592\u5593\u5594\u5597\u55A3\u55A4\u55AD\u55B2\u55BF\u55C1\u55C3\u55C6\u55C9\u55CB\u55CC\u55CE\u55D1\u55D2"], + ["8fb6a1", "\u55D3\u55D7\u55D8\u55DB\u55DE\u55E2\u55E9\u55F6\u55FF\u5605\u5608\u560A\u560D", 5, "\u5619\u562C\u5630\u5633\u5635\u5637\u5639\u563B\u563C\u563D\u563F\u5640\u5641\u5643\u5644\u5646\u5649\u564B\u564D\u564F\u5654\u565E\u5660\u5661\u5662\u5663\u5666\u5669\u566D\u566F\u5671\u5672\u5675\u5684\u5685\u5688\u568B\u568C\u5695\u5699\u569A\u569D\u569E\u569F\u56A6\u56A7\u56A8\u56A9\u56AB\u56AC\u56AD\u56B1\u56B3\u56B7\u56BE\u56C5\u56C9\u56CA\u56CB\u56CF\u56D0\u56CC\u56CD\u56D9\u56DC\u56DD\u56DF\u56E1\u56E4", 4, "\u56F1\u56EB\u56ED"], + ["8fb7a1", "\u56F6\u56F7\u5701\u5702\u5707\u570A\u570C\u5711\u5715\u571A\u571B\u571D\u5720\u5722\u5723\u5724\u5725\u5729\u572A\u572C\u572E\u572F\u5733\u5734\u573D\u573E\u573F\u5745\u5746\u574C\u574D\u5752\u5762\u5765\u5767\u5768\u576B\u576D", 4, "\u5773\u5774\u5775\u5777\u5779\u577A\u577B\u577C\u577E\u5781\u5783\u578C\u5794\u5797\u5799\u579A\u579C\u579D\u579E\u579F\u57A1\u5795\u57A7\u57A8\u57A9\u57AC\u57B8\u57BD\u57C7\u57C8\u57CC\u57CF\u57D5\u57DD\u57DE\u57E4\u57E6\u57E7\u57E9\u57ED\u57F0\u57F5\u57F6\u57F8\u57FD\u57FE\u57FF\u5803\u5804\u5808\u5809\u57E1"], + ["8fb8a1", "\u580C\u580D\u581B\u581E\u581F\u5820\u5826\u5827\u582D\u5832\u5839\u583F\u5849\u584C\u584D\u584F\u5850\u5855\u585F\u5861\u5864\u5867\u5868\u5878\u587C\u587F\u5880\u5881\u5887\u5888\u5889\u588A\u588C\u588D\u588F\u5890\u5894\u5896\u589D\u58A0\u58A1\u58A2\u58A6\u58A9\u58B1\u58B2\u58C4\u58BC\u58C2\u58C8\u58CD\u58CE\u58D0\u58D2\u58D4\u58D6\u58DA\u58DD\u58E1\u58E2\u58E9\u58F3\u5905\u5906\u590B\u590C\u5912\u5913\u5914\u8641\u591D\u5921\u5923\u5924\u5928\u592F\u5930\u5933\u5935\u5936\u593F\u5943\u5946\u5952\u5953\u5959\u595B\u595D\u595E\u595F\u5961\u5963\u596B\u596D"], + ["8fb9a1", "\u596F\u5972\u5975\u5976\u5979\u597B\u597C\u598B\u598C\u598E\u5992\u5995\u5997\u599F\u59A4\u59A7\u59AD\u59AE\u59AF\u59B0\u59B3\u59B7\u59BA\u59BC\u59C1\u59C3\u59C4\u59C8\u59CA\u59CD\u59D2\u59DD\u59DE\u59DF\u59E3\u59E4\u59E7\u59EE\u59EF\u59F1\u59F2\u59F4\u59F7\u5A00\u5A04\u5A0C\u5A0D\u5A0E\u5A12\u5A13\u5A1E\u5A23\u5A24\u5A27\u5A28\u5A2A\u5A2D\u5A30\u5A44\u5A45\u5A47\u5A48\u5A4C\u5A50\u5A55\u5A5E\u5A63\u5A65\u5A67\u5A6D\u5A77\u5A7A\u5A7B\u5A7E\u5A8B\u5A90\u5A93\u5A96\u5A99\u5A9C\u5A9E\u5A9F\u5AA0\u5AA2\u5AA7\u5AAC\u5AB1\u5AB2\u5AB3\u5AB5\u5AB8\u5ABA\u5ABB\u5ABF"], + ["8fbaa1", "\u5AC4\u5AC6\u5AC8\u5ACF\u5ADA\u5ADC\u5AE0\u5AE5\u5AEA\u5AEE\u5AF5\u5AF6\u5AFD\u5B00\u5B01\u5B08\u5B17\u5B34\u5B19\u5B1B\u5B1D\u5B21\u5B25\u5B2D\u5B38\u5B41\u5B4B\u5B4C\u5B52\u5B56\u5B5E\u5B68\u5B6E\u5B6F\u5B7C\u5B7D\u5B7E\u5B7F\u5B81\u5B84\u5B86\u5B8A\u5B8E\u5B90\u5B91\u5B93\u5B94\u5B96\u5BA8\u5BA9\u5BAC\u5BAD\u5BAF\u5BB1\u5BB2\u5BB7\u5BBA\u5BBC\u5BC0\u5BC1\u5BCD\u5BCF\u5BD6", 4, "\u5BE0\u5BEF\u5BF1\u5BF4\u5BFD\u5C0C\u5C17\u5C1E\u5C1F\u5C23\u5C26\u5C29\u5C2B\u5C2C\u5C2E\u5C30\u5C32\u5C35\u5C36\u5C59\u5C5A\u5C5C\u5C62\u5C63\u5C67\u5C68\u5C69"], + ["8fbba1", "\u5C6D\u5C70\u5C74\u5C75\u5C7A\u5C7B\u5C7C\u5C7D\u5C87\u5C88\u5C8A\u5C8F\u5C92\u5C9D\u5C9F\u5CA0\u5CA2\u5CA3\u5CA6\u5CAA\u5CB2\u5CB4\u5CB5\u5CBA\u5CC9\u5CCB\u5CD2\u5CDD\u5CD7\u5CEE\u5CF1\u5CF2\u5CF4\u5D01\u5D06\u5D0D\u5D12\u5D2B\u5D23\u5D24\u5D26\u5D27\u5D31\u5D34\u5D39\u5D3D\u5D3F\u5D42\u5D43\u5D46\u5D48\u5D55\u5D51\u5D59\u5D4A\u5D5F\u5D60\u5D61\u5D62\u5D64\u5D6A\u5D6D\u5D70\u5D79\u5D7A\u5D7E\u5D7F\u5D81\u5D83\u5D88\u5D8A\u5D92\u5D93\u5D94\u5D95\u5D99\u5D9B\u5D9F\u5DA0\u5DA7\u5DAB\u5DB0\u5DB4\u5DB8\u5DB9\u5DC3\u5DC7\u5DCB\u5DD0\u5DCE\u5DD8\u5DD9\u5DE0\u5DE4"], + ["8fbca1", "\u5DE9\u5DF8\u5DF9\u5E00\u5E07\u5E0D\u5E12\u5E14\u5E15\u5E18\u5E1F\u5E20\u5E2E\u5E28\u5E32\u5E35\u5E3E\u5E4B\u5E50\u5E49\u5E51\u5E56\u5E58\u5E5B\u5E5C\u5E5E\u5E68\u5E6A", 4, "\u5E70\u5E80\u5E8B\u5E8E\u5EA2\u5EA4\u5EA5\u5EA8\u5EAA\u5EAC\u5EB1\u5EB3\u5EBD\u5EBE\u5EBF\u5EC6\u5ECC\u5ECB\u5ECE\u5ED1\u5ED2\u5ED4\u5ED5\u5EDC\u5EDE\u5EE5\u5EEB\u5F02\u5F06\u5F07\u5F08\u5F0E\u5F19\u5F1C\u5F1D\u5F21\u5F22\u5F23\u5F24\u5F28\u5F2B\u5F2C\u5F2E\u5F30\u5F34\u5F36\u5F3B\u5F3D\u5F3F\u5F40\u5F44\u5F45\u5F47\u5F4D\u5F50\u5F54\u5F58\u5F5B\u5F60\u5F63\u5F64\u5F67"], + ["8fbda1", "\u5F6F\u5F72\u5F74\u5F75\u5F78\u5F7A\u5F7D\u5F7E\u5F89\u5F8D\u5F8F\u5F96\u5F9C\u5F9D\u5FA2\u5FA7\u5FAB\u5FA4\u5FAC\u5FAF\u5FB0\u5FB1\u5FB8\u5FC4\u5FC7\u5FC8\u5FC9\u5FCB\u5FD0", 4, "\u5FDE\u5FE1\u5FE2\u5FE8\u5FE9\u5FEA\u5FEC\u5FED\u5FEE\u5FEF\u5FF2\u5FF3\u5FF6\u5FFA\u5FFC\u6007\u600A\u600D\u6013\u6014\u6017\u6018\u601A\u601F\u6024\u602D\u6033\u6035\u6040\u6047\u6048\u6049\u604C\u6051\u6054\u6056\u6057\u605D\u6061\u6067\u6071\u607E\u607F\u6082\u6086\u6088\u608A\u608E\u6091\u6093\u6095\u6098\u609D\u609E\u60A2\u60A4\u60A5\u60A8\u60B0\u60B1\u60B7"], + ["8fbea1", "\u60BB\u60BE\u60C2\u60C4\u60C8\u60C9\u60CA\u60CB\u60CE\u60CF\u60D4\u60D5\u60D9\u60DB\u60DD\u60DE\u60E2\u60E5\u60F2\u60F5\u60F8\u60FC\u60FD\u6102\u6107\u610A\u610C\u6110", 4, "\u6116\u6117\u6119\u611C\u611E\u6122\u612A\u612B\u6130\u6131\u6135\u6136\u6137\u6139\u6141\u6145\u6146\u6149\u615E\u6160\u616C\u6172\u6178\u617B\u617C\u617F\u6180\u6181\u6183\u6184\u618B\u618D\u6192\u6193\u6197\u6198\u619C\u619D\u619F\u61A0\u61A5\u61A8\u61AA\u61AD\u61B8\u61B9\u61BC\u61C0\u61C1\u61C2\u61CE\u61CF\u61D5\u61DC\u61DD\u61DE\u61DF\u61E1\u61E2\u61E7\u61E9\u61E5"], + ["8fbfa1", "\u61EC\u61ED\u61EF\u6201\u6203\u6204\u6207\u6213\u6215\u621C\u6220\u6222\u6223\u6227\u6229\u622B\u6239\u623D\u6242\u6243\u6244\u6246\u624C\u6250\u6251\u6252\u6254\u6256\u625A\u625C\u6264\u626D\u626F\u6273\u627A\u627D\u628D\u628E\u628F\u6290\u62A6\u62A8\u62B3\u62B6\u62B7\u62BA\u62BE\u62BF\u62C4\u62CE\u62D5\u62D6\u62DA\u62EA\u62F2\u62F4\u62FC\u62FD\u6303\u6304\u630A\u630B\u630D\u6310\u6313\u6316\u6318\u6329\u632A\u632D\u6335\u6336\u6339\u633C\u6341\u6342\u6343\u6344\u6346\u634A\u634B\u634E\u6352\u6353\u6354\u6358\u635B\u6365\u6366\u636C\u636D\u6371\u6374\u6375"], + ["8fc0a1", "\u6378\u637C\u637D\u637F\u6382\u6384\u6387\u638A\u6390\u6394\u6395\u6399\u639A\u639E\u63A4\u63A6\u63AD\u63AE\u63AF\u63BD\u63C1\u63C5\u63C8\u63CE\u63D1\u63D3\u63D4\u63D5\u63DC\u63E0\u63E5\u63EA\u63EC\u63F2\u63F3\u63F5\u63F8\u63F9\u6409\u640A\u6410\u6412\u6414\u6418\u641E\u6420\u6422\u6424\u6425\u6429\u642A\u642F\u6430\u6435\u643D\u643F\u644B\u644F\u6451\u6452\u6453\u6454\u645A\u645B\u645C\u645D\u645F\u6460\u6461\u6463\u646D\u6473\u6474\u647B\u647D\u6485\u6487\u648F\u6490\u6491\u6498\u6499\u649B\u649D\u649F\u64A1\u64A3\u64A6\u64A8\u64AC\u64B3\u64BD\u64BE\u64BF"], + ["8fc1a1", "\u64C4\u64C9\u64CA\u64CB\u64CC\u64CE\u64D0\u64D1\u64D5\u64D7\u64E4\u64E5\u64E9\u64EA\u64ED\u64F0\u64F5\u64F7\u64FB\u64FF\u6501\u6504\u6508\u6509\u650A\u650F\u6513\u6514\u6516\u6519\u651B\u651E\u651F\u6522\u6526\u6529\u652E\u6531\u653A\u653C\u653D\u6543\u6547\u6549\u6550\u6552\u6554\u655F\u6560\u6567\u656B\u657A\u657D\u6581\u6585\u658A\u6592\u6595\u6598\u659D\u65A0\u65A3\u65A6\u65AE\u65B2\u65B3\u65B4\u65BF\u65C2\u65C8\u65C9\u65CE\u65D0\u65D4\u65D6\u65D8\u65DF\u65F0\u65F2\u65F4\u65F5\u65F9\u65FE\u65FF\u6600\u6604\u6608\u6609\u660D\u6611\u6612\u6615\u6616\u661D"], + ["8fc2a1", "\u661E\u6621\u6622\u6623\u6624\u6626\u6629\u662A\u662B\u662C\u662E\u6630\u6631\u6633\u6639\u6637\u6640\u6645\u6646\u664A\u664C\u6651\u664E\u6657\u6658\u6659\u665B\u665C\u6660\u6661\u66FB\u666A\u666B\u666C\u667E\u6673\u6675\u667F\u6677\u6678\u6679\u667B\u6680\u667C\u668B\u668C\u668D\u6690\u6692\u6699\u669A\u669B\u669C\u669F\u66A0\u66A4\u66AD\u66B1\u66B2\u66B5\u66BB\u66BF\u66C0\u66C2\u66C3\u66C8\u66CC\u66CE\u66CF\u66D4\u66DB\u66DF\u66E8\u66EB\u66EC\u66EE\u66FA\u6705\u6707\u670E\u6713\u6719\u671C\u6720\u6722\u6733\u673E\u6745\u6747\u6748\u674C\u6754\u6755\u675D"], + ["8fc3a1", "\u6766\u676C\u676E\u6774\u6776\u677B\u6781\u6784\u678E\u678F\u6791\u6793\u6796\u6798\u6799\u679B\u67B0\u67B1\u67B2\u67B5\u67BB\u67BC\u67BD\u67F9\u67C0\u67C2\u67C3\u67C5\u67C8\u67C9\u67D2\u67D7\u67D9\u67DC\u67E1\u67E6\u67F0\u67F2\u67F6\u67F7\u6852\u6814\u6819\u681D\u681F\u6828\u6827\u682C\u682D\u682F\u6830\u6831\u6833\u683B\u683F\u6844\u6845\u684A\u684C\u6855\u6857\u6858\u685B\u686B\u686E", 4, "\u6875\u6879\u687A\u687B\u687C\u6882\u6884\u6886\u6888\u6896\u6898\u689A\u689C\u68A1\u68A3\u68A5\u68A9\u68AA\u68AE\u68B2\u68BB\u68C5\u68C8\u68CC\u68CF"], + ["8fc4a1", "\u68D0\u68D1\u68D3\u68D6\u68D9\u68DC\u68DD\u68E5\u68E8\u68EA\u68EB\u68EC\u68ED\u68F0\u68F1\u68F5\u68F6\u68FB\u68FC\u68FD\u6906\u6909\u690A\u6910\u6911\u6913\u6916\u6917\u6931\u6933\u6935\u6938\u693B\u6942\u6945\u6949\u694E\u6957\u695B\u6963\u6964\u6965\u6966\u6968\u6969\u696C\u6970\u6971\u6972\u697A\u697B\u697F\u6980\u698D\u6992\u6996\u6998\u69A1\u69A5\u69A6\u69A8\u69AB\u69AD\u69AF\u69B7\u69B8\u69BA\u69BC\u69C5\u69C8\u69D1\u69D6\u69D7\u69E2\u69E5\u69EE\u69EF\u69F1\u69F3\u69F5\u69FE\u6A00\u6A01\u6A03\u6A0F\u6A11\u6A15\u6A1A\u6A1D\u6A20\u6A24\u6A28\u6A30\u6A32"], + ["8fc5a1", "\u6A34\u6A37\u6A3B\u6A3E\u6A3F\u6A45\u6A46\u6A49\u6A4A\u6A4E\u6A50\u6A51\u6A52\u6A55\u6A56\u6A5B\u6A64\u6A67\u6A6A\u6A71\u6A73\u6A7E\u6A81\u6A83\u6A86\u6A87\u6A89\u6A8B\u6A91\u6A9B\u6A9D\u6A9E\u6A9F\u6AA5\u6AAB\u6AAF\u6AB0\u6AB1\u6AB4\u6ABD\u6ABE\u6ABF\u6AC6\u6AC9\u6AC8\u6ACC\u6AD0\u6AD4\u6AD5\u6AD6\u6ADC\u6ADD\u6AE4\u6AE7\u6AEC\u6AF0\u6AF1\u6AF2\u6AFC\u6AFD\u6B02\u6B03\u6B06\u6B07\u6B09\u6B0F\u6B10\u6B11\u6B17\u6B1B\u6B1E\u6B24\u6B28\u6B2B\u6B2C\u6B2F\u6B35\u6B36\u6B3B\u6B3F\u6B46\u6B4A\u6B4D\u6B52\u6B56\u6B58\u6B5D\u6B60\u6B67\u6B6B\u6B6E\u6B70\u6B75\u6B7D"], + ["8fc6a1", "\u6B7E\u6B82\u6B85\u6B97\u6B9B\u6B9F\u6BA0\u6BA2\u6BA3\u6BA8\u6BA9\u6BAC\u6BAD\u6BAE\u6BB0\u6BB8\u6BB9\u6BBD\u6BBE\u6BC3\u6BC4\u6BC9\u6BCC\u6BD6\u6BDA\u6BE1\u6BE3\u6BE6\u6BE7\u6BEE\u6BF1\u6BF7\u6BF9\u6BFF\u6C02\u6C04\u6C05\u6C09\u6C0D\u6C0E\u6C10\u6C12\u6C19\u6C1F\u6C26\u6C27\u6C28\u6C2C\u6C2E\u6C33\u6C35\u6C36\u6C3A\u6C3B\u6C3F\u6C4A\u6C4B\u6C4D\u6C4F\u6C52\u6C54\u6C59\u6C5B\u6C5C\u6C6B\u6C6D\u6C6F\u6C74\u6C76\u6C78\u6C79\u6C7B\u6C85\u6C86\u6C87\u6C89\u6C94\u6C95\u6C97\u6C98\u6C9C\u6C9F\u6CB0\u6CB2\u6CB4\u6CC2\u6CC6\u6CCD\u6CCF\u6CD0\u6CD1\u6CD2\u6CD4\u6CD6"], + ["8fc7a1", "\u6CDA\u6CDC\u6CE0\u6CE7\u6CE9\u6CEB\u6CEC\u6CEE\u6CF2\u6CF4\u6D04\u6D07\u6D0A\u6D0E\u6D0F\u6D11\u6D13\u6D1A\u6D26\u6D27\u6D28\u6C67\u6D2E\u6D2F\u6D31\u6D39\u6D3C\u6D3F\u6D57\u6D5E\u6D5F\u6D61\u6D65\u6D67\u6D6F\u6D70\u6D7C\u6D82\u6D87\u6D91\u6D92\u6D94\u6D96\u6D97\u6D98\u6DAA\u6DAC\u6DB4\u6DB7\u6DB9\u6DBD\u6DBF\u6DC4\u6DC8\u6DCA\u6DCE\u6DCF\u6DD6\u6DDB\u6DDD\u6DDF\u6DE0\u6DE2\u6DE5\u6DE9\u6DEF\u6DF0\u6DF4\u6DF6\u6DFC\u6E00\u6E04\u6E1E\u6E22\u6E27\u6E32\u6E36\u6E39\u6E3B\u6E3C\u6E44\u6E45\u6E48\u6E49\u6E4B\u6E4F\u6E51\u6E52\u6E53\u6E54\u6E57\u6E5C\u6E5D\u6E5E"], + ["8fc8a1", "\u6E62\u6E63\u6E68\u6E73\u6E7B\u6E7D\u6E8D\u6E93\u6E99\u6EA0\u6EA7\u6EAD\u6EAE\u6EB1\u6EB3\u6EBB\u6EBF\u6EC0\u6EC1\u6EC3\u6EC7\u6EC8\u6ECA\u6ECD\u6ECE\u6ECF\u6EEB\u6EED\u6EEE\u6EF9\u6EFB\u6EFD\u6F04\u6F08\u6F0A\u6F0C\u6F0D\u6F16\u6F18\u6F1A\u6F1B\u6F26\u6F29\u6F2A\u6F2F\u6F30\u6F33\u6F36\u6F3B\u6F3C\u6F2D\u6F4F\u6F51\u6F52\u6F53\u6F57\u6F59\u6F5A\u6F5D\u6F5E\u6F61\u6F62\u6F68\u6F6C\u6F7D\u6F7E\u6F83\u6F87\u6F88\u6F8B\u6F8C\u6F8D\u6F90\u6F92\u6F93\u6F94\u6F96\u6F9A\u6F9F\u6FA0\u6FA5\u6FA6\u6FA7\u6FA8\u6FAE\u6FAF\u6FB0\u6FB5\u6FB6\u6FBC\u6FC5\u6FC7\u6FC8\u6FCA"], + ["8fc9a1", "\u6FDA\u6FDE\u6FE8\u6FE9\u6FF0\u6FF5\u6FF9\u6FFC\u6FFD\u7000\u7005\u7006\u7007\u700D\u7017\u7020\u7023\u702F\u7034\u7037\u7039\u703C\u7043\u7044\u7048\u7049\u704A\u704B\u7054\u7055\u705D\u705E\u704E\u7064\u7065\u706C\u706E\u7075\u7076\u707E\u7081\u7085\u7086\u7094", 4, "\u709B\u70A4\u70AB\u70B0\u70B1\u70B4\u70B7\u70CA\u70D1\u70D3\u70D4\u70D5\u70D6\u70D8\u70DC\u70E4\u70FA\u7103", 4, "\u710B\u710C\u710F\u711E\u7120\u712B\u712D\u712F\u7130\u7131\u7138\u7141\u7145\u7146\u7147\u714A\u714B\u7150\u7152\u7157\u715A\u715C\u715E\u7160"], + ["8fcaa1", "\u7168\u7179\u7180\u7185\u7187\u718C\u7192\u719A\u719B\u71A0\u71A2\u71AF\u71B0\u71B2\u71B3\u71BA\u71BF\u71C0\u71C1\u71C4\u71CB\u71CC\u71D3\u71D6\u71D9\u71DA\u71DC\u71F8\u71FE\u7200\u7207\u7208\u7209\u7213\u7217\u721A\u721D\u721F\u7224\u722B\u722F\u7234\u7238\u7239\u7241\u7242\u7243\u7245\u724E\u724F\u7250\u7253\u7255\u7256\u725A\u725C\u725E\u7260\u7263\u7268\u726B\u726E\u726F\u7271\u7277\u7278\u727B\u727C\u727F\u7284\u7289\u728D\u728E\u7293\u729B\u72A8\u72AD\u72AE\u72B1\u72B4\u72BE\u72C1\u72C7\u72C9\u72CC\u72D5\u72D6\u72D8\u72DF\u72E5\u72F3\u72F4\u72FA\u72FB"], + ["8fcba1", "\u72FE\u7302\u7304\u7305\u7307\u730B\u730D\u7312\u7313\u7318\u7319\u731E\u7322\u7324\u7327\u7328\u732C\u7331\u7332\u7335\u733A\u733B\u733D\u7343\u734D\u7350\u7352\u7356\u7358\u735D\u735E\u735F\u7360\u7366\u7367\u7369\u736B\u736C\u736E\u736F\u7371\u7377\u7379\u737C\u7380\u7381\u7383\u7385\u7386\u738E\u7390\u7393\u7395\u7397\u7398\u739C\u739E\u739F\u73A0\u73A2\u73A5\u73A6\u73AA\u73AB\u73AD\u73B5\u73B7\u73B9\u73BC\u73BD\u73BF\u73C5\u73C6\u73C9\u73CB\u73CC\u73CF\u73D2\u73D3\u73D6\u73D9\u73DD\u73E1\u73E3\u73E6\u73E7\u73E9\u73F4\u73F5\u73F7\u73F9\u73FA\u73FB\u73FD"], + ["8fcca1", "\u73FF\u7400\u7401\u7404\u7407\u740A\u7411\u741A\u741B\u7424\u7426\u7428", 9, "\u7439\u7440\u7443\u7444\u7446\u7447\u744B\u744D\u7451\u7452\u7457\u745D\u7462\u7466\u7467\u7468\u746B\u746D\u746E\u7471\u7472\u7480\u7481\u7485\u7486\u7487\u7489\u748F\u7490\u7491\u7492\u7498\u7499\u749A\u749C\u749F\u74A0\u74A1\u74A3\u74A6\u74A8\u74A9\u74AA\u74AB\u74AE\u74AF\u74B1\u74B2\u74B5\u74B9\u74BB\u74BF\u74C8\u74C9\u74CC\u74D0\u74D3\u74D8\u74DA\u74DB\u74DE\u74DF\u74E4\u74E8\u74EA\u74EB\u74EF\u74F4\u74FA\u74FB\u74FC\u74FF\u7506"], + ["8fcda1", "\u7512\u7516\u7517\u7520\u7521\u7524\u7527\u7529\u752A\u752F\u7536\u7539\u753D\u753E\u753F\u7540\u7543\u7547\u7548\u754E\u7550\u7552\u7557\u755E\u755F\u7561\u756F\u7571\u7579", 5, "\u7581\u7585\u7590\u7592\u7593\u7595\u7599\u759C\u75A2\u75A4\u75B4\u75BA\u75BF\u75C0\u75C1\u75C4\u75C6\u75CC\u75CE\u75CF\u75D7\u75DC\u75DF\u75E0\u75E1\u75E4\u75E7\u75EC\u75EE\u75EF\u75F1\u75F9\u7600\u7602\u7603\u7604\u7607\u7608\u760A\u760C\u760F\u7612\u7613\u7615\u7616\u7619\u761B\u761C\u761D\u761E\u7623\u7625\u7626\u7629\u762D\u7632\u7633\u7635\u7638\u7639"], + ["8fcea1", "\u763A\u763C\u764A\u7640\u7641\u7643\u7644\u7645\u7649\u764B\u7655\u7659\u765F\u7664\u7665\u766D\u766E\u766F\u7671\u7674\u7681\u7685\u768C\u768D\u7695\u769B\u769C\u769D\u769F\u76A0\u76A2", 6, "\u76AA\u76AD\u76BD\u76C1\u76C5\u76C9\u76CB\u76CC\u76CE\u76D4\u76D9\u76E0\u76E6\u76E8\u76EC\u76F0\u76F1\u76F6\u76F9\u76FC\u7700\u7706\u770A\u770E\u7712\u7714\u7715\u7717\u7719\u771A\u771C\u7722\u7728\u772D\u772E\u772F\u7734\u7735\u7736\u7739\u773D\u773E\u7742\u7745\u7746\u774A\u774D\u774E\u774F\u7752\u7756\u7757\u775C\u775E\u775F\u7760\u7762"], + ["8fcfa1", "\u7764\u7767\u776A\u776C\u7770\u7772\u7773\u7774\u777A\u777D\u7780\u7784\u778C\u778D\u7794\u7795\u7796\u779A\u779F\u77A2\u77A7\u77AA\u77AE\u77AF\u77B1\u77B5\u77BE\u77C3\u77C9\u77D1\u77D2\u77D5\u77D9\u77DE\u77DF\u77E0\u77E4\u77E6\u77EA\u77EC\u77F0\u77F1\u77F4\u77F8\u77FB\u7805\u7806\u7809\u780D\u780E\u7811\u781D\u7821\u7822\u7823\u782D\u782E\u7830\u7835\u7837\u7843\u7844\u7847\u7848\u784C\u784E\u7852\u785C\u785E\u7860\u7861\u7863\u7864\u7868\u786A\u786E\u787A\u787E\u788A\u788F\u7894\u7898\u78A1\u789D\u789E\u789F\u78A4\u78A8\u78AC\u78AD\u78B0\u78B1\u78B2\u78B3"], + ["8fd0a1", "\u78BB\u78BD\u78BF\u78C7\u78C8\u78C9\u78CC\u78CE\u78D2\u78D3\u78D5\u78D6\u78E4\u78DB\u78DF\u78E0\u78E1\u78E6\u78EA\u78F2\u78F3\u7900\u78F6\u78F7\u78FA\u78FB\u78FF\u7906\u790C\u7910\u791A\u791C\u791E\u791F\u7920\u7925\u7927\u7929\u792D\u7931\u7934\u7935\u793B\u793D\u793F\u7944\u7945\u7946\u794A\u794B\u794F\u7951\u7954\u7958\u795B\u795C\u7967\u7969\u796B\u7972\u7979\u797B\u797C\u797E\u798B\u798C\u7991\u7993\u7994\u7995\u7996\u7998\u799B\u799C\u79A1\u79A8\u79A9\u79AB\u79AF\u79B1\u79B4\u79B8\u79BB\u79C2\u79C4\u79C7\u79C8\u79CA\u79CF\u79D4\u79D6\u79DA\u79DD\u79DE"], + ["8fd1a1", "\u79E0\u79E2\u79E5\u79EA\u79EB\u79ED\u79F1\u79F8\u79FC\u7A02\u7A03\u7A07\u7A09\u7A0A\u7A0C\u7A11\u7A15\u7A1B\u7A1E\u7A21\u7A27\u7A2B\u7A2D\u7A2F\u7A30\u7A34\u7A35\u7A38\u7A39\u7A3A\u7A44\u7A45\u7A47\u7A48\u7A4C\u7A55\u7A56\u7A59\u7A5C\u7A5D\u7A5F\u7A60\u7A65\u7A67\u7A6A\u7A6D\u7A75\u7A78\u7A7E\u7A80\u7A82\u7A85\u7A86\u7A8A\u7A8B\u7A90\u7A91\u7A94\u7A9E\u7AA0\u7AA3\u7AAC\u7AB3\u7AB5\u7AB9\u7ABB\u7ABC\u7AC6\u7AC9\u7ACC\u7ACE\u7AD1\u7ADB\u7AE8\u7AE9\u7AEB\u7AEC\u7AF1\u7AF4\u7AFB\u7AFD\u7AFE\u7B07\u7B14\u7B1F\u7B23\u7B27\u7B29\u7B2A\u7B2B\u7B2D\u7B2E\u7B2F\u7B30"], + ["8fd2a1", "\u7B31\u7B34\u7B3D\u7B3F\u7B40\u7B41\u7B47\u7B4E\u7B55\u7B60\u7B64\u7B66\u7B69\u7B6A\u7B6D\u7B6F\u7B72\u7B73\u7B77\u7B84\u7B89\u7B8E\u7B90\u7B91\u7B96\u7B9B\u7B9E\u7BA0\u7BA5\u7BAC\u7BAF\u7BB0\u7BB2\u7BB5\u7BB6\u7BBA\u7BBB\u7BBC\u7BBD\u7BC2\u7BC5\u7BC8\u7BCA\u7BD4\u7BD6\u7BD7\u7BD9\u7BDA\u7BDB\u7BE8\u7BEA\u7BF2\u7BF4\u7BF5\u7BF8\u7BF9\u7BFA\u7BFC\u7BFE\u7C01\u7C02\u7C03\u7C04\u7C06\u7C09\u7C0B\u7C0C\u7C0E\u7C0F\u7C19\u7C1B\u7C20\u7C25\u7C26\u7C28\u7C2C\u7C31\u7C33\u7C34\u7C36\u7C39\u7C3A\u7C46\u7C4A\u7C55\u7C51\u7C52\u7C53\u7C59", 5], + ["8fd3a1", "\u7C61\u7C63\u7C67\u7C69\u7C6D\u7C6E\u7C70\u7C72\u7C79\u7C7C\u7C7D\u7C86\u7C87\u7C8F\u7C94\u7C9E\u7CA0\u7CA6\u7CB0\u7CB6\u7CB7\u7CBA\u7CBB\u7CBC\u7CBF\u7CC4\u7CC7\u7CC8\u7CC9\u7CCD\u7CCF\u7CD3\u7CD4\u7CD5\u7CD7\u7CD9\u7CDA\u7CDD\u7CE6\u7CE9\u7CEB\u7CF5\u7D03\u7D07\u7D08\u7D09\u7D0F\u7D11\u7D12\u7D13\u7D16\u7D1D\u7D1E\u7D23\u7D26\u7D2A\u7D2D\u7D31\u7D3C\u7D3D\u7D3E\u7D40\u7D41\u7D47\u7D48\u7D4D\u7D51\u7D53\u7D57\u7D59\u7D5A\u7D5C\u7D5D\u7D65\u7D67\u7D6A\u7D70\u7D78\u7D7A\u7D7B\u7D7F\u7D81\u7D82\u7D83\u7D85\u7D86\u7D88\u7D8B\u7D8C\u7D8D\u7D91\u7D96\u7D97\u7D9D"], + ["8fd4a1", "\u7D9E\u7DA6\u7DA7\u7DAA\u7DB3\u7DB6\u7DB7\u7DB9\u7DC2", 4, "\u7DCC\u7DCD\u7DCE\u7DD7\u7DD9\u7E00\u7DE2\u7DE5\u7DE6\u7DEA\u7DEB\u7DED\u7DF1\u7DF5\u7DF6\u7DF9\u7DFA\u7E08\u7E10\u7E11\u7E15\u7E17\u7E1C\u7E1D\u7E20\u7E27\u7E28\u7E2C\u7E2D\u7E2F\u7E33\u7E36\u7E3F\u7E44\u7E45\u7E47\u7E4E\u7E50\u7E52\u7E58\u7E5F\u7E61\u7E62\u7E65\u7E6B\u7E6E\u7E6F\u7E73\u7E78\u7E7E\u7E81\u7E86\u7E87\u7E8A\u7E8D\u7E91\u7E95\u7E98\u7E9A\u7E9D\u7E9E\u7F3C\u7F3B\u7F3D\u7F3E\u7F3F\u7F43\u7F44\u7F47\u7F4F\u7F52\u7F53\u7F5B\u7F5C\u7F5D\u7F61\u7F63\u7F64\u7F65\u7F66\u7F6D"], + ["8fd5a1", "\u7F71\u7F7D\u7F7E\u7F7F\u7F80\u7F8B\u7F8D\u7F8F\u7F90\u7F91\u7F96\u7F97\u7F9C\u7FA1\u7FA2\u7FA6\u7FAA\u7FAD\u7FB4\u7FBC\u7FBF\u7FC0\u7FC3\u7FC8\u7FCE\u7FCF\u7FDB\u7FDF\u7FE3\u7FE5\u7FE8\u7FEC\u7FEE\u7FEF\u7FF2\u7FFA\u7FFD\u7FFE\u7FFF\u8007\u8008\u800A\u800D\u800E\u800F\u8011\u8013\u8014\u8016\u801D\u801E\u801F\u8020\u8024\u8026\u802C\u802E\u8030\u8034\u8035\u8037\u8039\u803A\u803C\u803E\u8040\u8044\u8060\u8064\u8066\u806D\u8071\u8075\u8081\u8088\u808E\u809C\u809E\u80A6\u80A7\u80AB\u80B8\u80B9\u80C8\u80CD\u80CF\u80D2\u80D4\u80D5\u80D7\u80D8\u80E0\u80ED\u80EE"], + ["8fd6a1", "\u80F0\u80F2\u80F3\u80F6\u80F9\u80FA\u80FE\u8103\u810B\u8116\u8117\u8118\u811C\u811E\u8120\u8124\u8127\u812C\u8130\u8135\u813A\u813C\u8145\u8147\u814A\u814C\u8152\u8157\u8160\u8161\u8167\u8168\u8169\u816D\u816F\u8177\u8181\u8190\u8184\u8185\u8186\u818B\u818E\u8196\u8198\u819B\u819E\u81A2\u81AE\u81B2\u81B4\u81BB\u81CB\u81C3\u81C5\u81CA\u81CE\u81CF\u81D5\u81D7\u81DB\u81DD\u81DE\u81E1\u81E4\u81EB\u81EC\u81F0\u81F1\u81F2\u81F5\u81F6\u81F8\u81F9\u81FD\u81FF\u8200\u8203\u820F\u8213\u8214\u8219\u821A\u821D\u8221\u8222\u8228\u8232\u8234\u823A\u8243\u8244\u8245\u8246"], + ["8fd7a1", "\u824B\u824E\u824F\u8251\u8256\u825C\u8260\u8263\u8267\u826D\u8274\u827B\u827D\u827F\u8280\u8281\u8283\u8284\u8287\u8289\u828A\u828E\u8291\u8294\u8296\u8298\u829A\u829B\u82A0\u82A1\u82A3\u82A4\u82A7\u82A8\u82A9\u82AA\u82AE\u82B0\u82B2\u82B4\u82B7\u82BA\u82BC\u82BE\u82BF\u82C6\u82D0\u82D5\u82DA\u82E0\u82E2\u82E4\u82E8\u82EA\u82ED\u82EF\u82F6\u82F7\u82FD\u82FE\u8300\u8301\u8307\u8308\u830A\u830B\u8354\u831B\u831D\u831E\u831F\u8321\u8322\u832C\u832D\u832E\u8330\u8333\u8337\u833A\u833C\u833D\u8342\u8343\u8344\u8347\u834D\u834E\u8351\u8355\u8356\u8357\u8370\u8378"], + ["8fd8a1", "\u837D\u837F\u8380\u8382\u8384\u8386\u838D\u8392\u8394\u8395\u8398\u8399\u839B\u839C\u839D\u83A6\u83A7\u83A9\u83AC\u83BE\u83BF\u83C0\u83C7\u83C9\u83CF\u83D0\u83D1\u83D4\u83DD\u8353\u83E8\u83EA\u83F6\u83F8\u83F9\u83FC\u8401\u8406\u840A\u840F\u8411\u8415\u8419\u83AD\u842F\u8439\u8445\u8447\u8448\u844A\u844D\u844F\u8451\u8452\u8456\u8458\u8459\u845A\u845C\u8460\u8464\u8465\u8467\u846A\u8470\u8473\u8474\u8476\u8478\u847C\u847D\u8481\u8485\u8492\u8493\u8495\u849E\u84A6\u84A8\u84A9\u84AA\u84AF\u84B1\u84B4\u84BA\u84BD\u84BE\u84C0\u84C2\u84C7\u84C8\u84CC\u84CF\u84D3"], + ["8fd9a1", "\u84DC\u84E7\u84EA\u84EF\u84F0\u84F1\u84F2\u84F7\u8532\u84FA\u84FB\u84FD\u8502\u8503\u8507\u850C\u850E\u8510\u851C\u851E\u8522\u8523\u8524\u8525\u8527\u852A\u852B\u852F\u8533\u8534\u8536\u853F\u8546\u854F", 4, "\u8556\u8559\u855C", 6, "\u8564\u856B\u856F\u8579\u857A\u857B\u857D\u857F\u8581\u8585\u8586\u8589\u858B\u858C\u858F\u8593\u8598\u859D\u859F\u85A0\u85A2\u85A5\u85A7\u85B4\u85B6\u85B7\u85B8\u85BC\u85BD\u85BE\u85BF\u85C2\u85C7\u85CA\u85CB\u85CE\u85AD\u85D8\u85DA\u85DF\u85E0\u85E6\u85E8\u85ED\u85F3\u85F6\u85FC"], + ["8fdaa1", "\u85FF\u8600\u8604\u8605\u860D\u860E\u8610\u8611\u8612\u8618\u8619\u861B\u861E\u8621\u8627\u8629\u8636\u8638\u863A\u863C\u863D\u8640\u8642\u8646\u8652\u8653\u8656\u8657\u8658\u8659\u865D\u8660", 4, "\u8669\u866C\u866F\u8675\u8676\u8677\u867A\u868D\u8691\u8696\u8698\u869A\u869C\u86A1\u86A6\u86A7\u86A8\u86AD\u86B1\u86B3\u86B4\u86B5\u86B7\u86B8\u86B9\u86BF\u86C0\u86C1\u86C3\u86C5\u86D1\u86D2\u86D5\u86D7\u86DA\u86DC\u86E0\u86E3\u86E5\u86E7\u8688\u86FA\u86FC\u86FD\u8704\u8705\u8707\u870B\u870E\u870F\u8710\u8713\u8714\u8719\u871E\u871F\u8721\u8723"], + ["8fdba1", "\u8728\u872E\u872F\u8731\u8732\u8739\u873A\u873C\u873D\u873E\u8740\u8743\u8745\u874D\u8758\u875D\u8761\u8764\u8765\u876F\u8771\u8772\u877B\u8783", 6, "\u878B\u878C\u8790\u8793\u8795\u8797\u8798\u8799\u879E\u87A0\u87A3\u87A7\u87AC\u87AD\u87AE\u87B1\u87B5\u87BE\u87BF\u87C1\u87C8\u87C9\u87CA\u87CE\u87D5\u87D6\u87D9\u87DA\u87DC\u87DF\u87E2\u87E3\u87E4\u87EA\u87EB\u87ED\u87F1\u87F3\u87F8\u87FA\u87FF\u8801\u8803\u8806\u8809\u880A\u880B\u8810\u8819\u8812\u8813\u8814\u8818\u881A\u881B\u881C\u881E\u881F\u8828\u882D\u882E\u8830\u8832\u8835"], + ["8fdca1", "\u883A\u883C\u8841\u8843\u8845\u8848\u8849\u884A\u884B\u884E\u8851\u8855\u8856\u8858\u885A\u885C\u885F\u8860\u8864\u8869\u8871\u8879\u887B\u8880\u8898\u889A\u889B\u889C\u889F\u88A0\u88A8\u88AA\u88BA\u88BD\u88BE\u88C0\u88CA", 4, "\u88D1\u88D2\u88D3\u88DB\u88DE\u88E7\u88EF\u88F0\u88F1\u88F5\u88F7\u8901\u8906\u890D\u890E\u890F\u8915\u8916\u8918\u8919\u891A\u891C\u8920\u8926\u8927\u8928\u8930\u8931\u8932\u8935\u8939\u893A\u893E\u8940\u8942\u8945\u8946\u8949\u894F\u8952\u8957\u895A\u895B\u895C\u8961\u8962\u8963\u896B\u896E\u8970\u8973\u8975\u897A"], + ["8fdda1", "\u897B\u897C\u897D\u8989\u898D\u8990\u8994\u8995\u899B\u899C\u899F\u89A0\u89A5\u89B0\u89B4\u89B5\u89B6\u89B7\u89BC\u89D4", 4, "\u89E5\u89E9\u89EB\u89ED\u89F1\u89F3\u89F6\u89F9\u89FD\u89FF\u8A04\u8A05\u8A07\u8A0F\u8A11\u8A12\u8A14\u8A15\u8A1E\u8A20\u8A22\u8A24\u8A26\u8A2B\u8A2C\u8A2F\u8A35\u8A37\u8A3D\u8A3E\u8A40\u8A43\u8A45\u8A47\u8A49\u8A4D\u8A4E\u8A53\u8A56\u8A57\u8A58\u8A5C\u8A5D\u8A61\u8A65\u8A67\u8A75\u8A76\u8A77\u8A79\u8A7A\u8A7B\u8A7E\u8A7F\u8A80\u8A83\u8A86\u8A8B\u8A8F\u8A90\u8A92\u8A96\u8A97\u8A99\u8A9F\u8AA7\u8AA9\u8AAE\u8AAF\u8AB3"], + ["8fdea1", "\u8AB6\u8AB7\u8ABB\u8ABE\u8AC3\u8AC6\u8AC8\u8AC9\u8ACA\u8AD1\u8AD3\u8AD4\u8AD5\u8AD7\u8ADD\u8ADF\u8AEC\u8AF0\u8AF4\u8AF5\u8AF6\u8AFC\u8AFF\u8B05\u8B06\u8B0B\u8B11\u8B1C\u8B1E\u8B1F\u8B0A\u8B2D\u8B30\u8B37\u8B3C\u8B42", 4, "\u8B48\u8B52\u8B53\u8B54\u8B59\u8B4D\u8B5E\u8B63\u8B6D\u8B76\u8B78\u8B79\u8B7C\u8B7E\u8B81\u8B84\u8B85\u8B8B\u8B8D\u8B8F\u8B94\u8B95\u8B9C\u8B9E\u8B9F\u8C38\u8C39\u8C3D\u8C3E\u8C45\u8C47\u8C49\u8C4B\u8C4F\u8C51\u8C53\u8C54\u8C57\u8C58\u8C5B\u8C5D\u8C59\u8C63\u8C64\u8C66\u8C68\u8C69\u8C6D\u8C73\u8C75\u8C76\u8C7B\u8C7E\u8C86"], + ["8fdfa1", "\u8C87\u8C8B\u8C90\u8C92\u8C93\u8C99\u8C9B\u8C9C\u8CA4\u8CB9\u8CBA\u8CC5\u8CC6\u8CC9\u8CCB\u8CCF\u8CD6\u8CD5\u8CD9\u8CDD\u8CE1\u8CE8\u8CEC\u8CEF\u8CF0\u8CF2\u8CF5\u8CF7\u8CF8\u8CFE\u8CFF\u8D01\u8D03\u8D09\u8D12\u8D17\u8D1B\u8D65\u8D69\u8D6C\u8D6E\u8D7F\u8D82\u8D84\u8D88\u8D8D\u8D90\u8D91\u8D95\u8D9E\u8D9F\u8DA0\u8DA6\u8DAB\u8DAC\u8DAF\u8DB2\u8DB5\u8DB7\u8DB9\u8DBB\u8DC0\u8DC5\u8DC6\u8DC7\u8DC8\u8DCA\u8DCE\u8DD1\u8DD4\u8DD5\u8DD7\u8DD9\u8DE4\u8DE5\u8DE7\u8DEC\u8DF0\u8DBC\u8DF1\u8DF2\u8DF4\u8DFD\u8E01\u8E04\u8E05\u8E06\u8E0B\u8E11\u8E14\u8E16\u8E20\u8E21\u8E22"], + ["8fe0a1", "\u8E23\u8E26\u8E27\u8E31\u8E33\u8E36\u8E37\u8E38\u8E39\u8E3D\u8E40\u8E41\u8E4B\u8E4D\u8E4E\u8E4F\u8E54\u8E5B\u8E5C\u8E5D\u8E5E\u8E61\u8E62\u8E69\u8E6C\u8E6D\u8E6F\u8E70\u8E71\u8E79\u8E7A\u8E7B\u8E82\u8E83\u8E89\u8E90\u8E92\u8E95\u8E9A\u8E9B\u8E9D\u8E9E\u8EA2\u8EA7\u8EA9\u8EAD\u8EAE\u8EB3\u8EB5\u8EBA\u8EBB\u8EC0\u8EC1\u8EC3\u8EC4\u8EC7\u8ECF\u8ED1\u8ED4\u8EDC\u8EE8\u8EEE\u8EF0\u8EF1\u8EF7\u8EF9\u8EFA\u8EED\u8F00\u8F02\u8F07\u8F08\u8F0F\u8F10\u8F16\u8F17\u8F18\u8F1E\u8F20\u8F21\u8F23\u8F25\u8F27\u8F28\u8F2C\u8F2D\u8F2E\u8F34\u8F35\u8F36\u8F37\u8F3A\u8F40\u8F41"], + ["8fe1a1", "\u8F43\u8F47\u8F4F\u8F51", 4, "\u8F58\u8F5D\u8F5E\u8F65\u8F9D\u8FA0\u8FA1\u8FA4\u8FA5\u8FA6\u8FB5\u8FB6\u8FB8\u8FBE\u8FC0\u8FC1\u8FC6\u8FCA\u8FCB\u8FCD\u8FD0\u8FD2\u8FD3\u8FD5\u8FE0\u8FE3\u8FE4\u8FE8\u8FEE\u8FF1\u8FF5\u8FF6\u8FFB\u8FFE\u9002\u9004\u9008\u900C\u9018\u901B\u9028\u9029\u902F\u902A\u902C\u902D\u9033\u9034\u9037\u903F\u9043\u9044\u904C\u905B\u905D\u9062\u9066\u9067\u906C\u9070\u9074\u9079\u9085\u9088\u908B\u908C\u908E\u9090\u9095\u9097\u9098\u9099\u909B\u90A0\u90A1\u90A2\u90A5\u90B0\u90B2\u90B3\u90B4\u90B6\u90BD\u90CC\u90BE\u90C3"], + ["8fe2a1", "\u90C4\u90C5\u90C7\u90C8\u90D5\u90D7\u90D8\u90D9\u90DC\u90DD\u90DF\u90E5\u90D2\u90F6\u90EB\u90EF\u90F0\u90F4\u90FE\u90FF\u9100\u9104\u9105\u9106\u9108\u910D\u9110\u9114\u9116\u9117\u9118\u911A\u911C\u911E\u9120\u9125\u9122\u9123\u9127\u9129\u912E\u912F\u9131\u9134\u9136\u9137\u9139\u913A\u913C\u913D\u9143\u9147\u9148\u914F\u9153\u9157\u9159\u915A\u915B\u9161\u9164\u9167\u916D\u9174\u9179\u917A\u917B\u9181\u9183\u9185\u9186\u918A\u918E\u9191\u9193\u9194\u9195\u9198\u919E\u91A1\u91A6\u91A8\u91AC\u91AD\u91AE\u91B0\u91B1\u91B2\u91B3\u91B6\u91BB\u91BC\u91BD\u91BF"], + ["8fe3a1", "\u91C2\u91C3\u91C5\u91D3\u91D4\u91D7\u91D9\u91DA\u91DE\u91E4\u91E5\u91E9\u91EA\u91EC", 5, "\u91F7\u91F9\u91FB\u91FD\u9200\u9201\u9204\u9205\u9206\u9207\u9209\u920A\u920C\u9210\u9212\u9213\u9216\u9218\u921C\u921D\u9223\u9224\u9225\u9226\u9228\u922E\u922F\u9230\u9233\u9235\u9236\u9238\u9239\u923A\u923C\u923E\u9240\u9242\u9243\u9246\u9247\u924A\u924D\u924E\u924F\u9251\u9258\u9259\u925C\u925D\u9260\u9261\u9265\u9267\u9268\u9269\u926E\u926F\u9270\u9275", 4, "\u927B\u927C\u927D\u927F\u9288\u9289\u928A\u928D\u928E\u9292\u9297"], + ["8fe4a1", "\u9299\u929F\u92A0\u92A4\u92A5\u92A7\u92A8\u92AB\u92AF\u92B2\u92B6\u92B8\u92BA\u92BB\u92BC\u92BD\u92BF", 4, "\u92C5\u92C6\u92C7\u92C8\u92CB\u92CC\u92CD\u92CE\u92D0\u92D3\u92D5\u92D7\u92D8\u92D9\u92DC\u92DD\u92DF\u92E0\u92E1\u92E3\u92E5\u92E7\u92E8\u92EC\u92EE\u92F0\u92F9\u92FB\u92FF\u9300\u9302\u9308\u930D\u9311\u9314\u9315\u931C\u931D\u931E\u931F\u9321\u9324\u9325\u9327\u9329\u932A\u9333\u9334\u9336\u9337\u9347\u9348\u9349\u9350\u9351\u9352\u9355\u9357\u9358\u935A\u935E\u9364\u9365\u9367\u9369\u936A\u936D\u936F\u9370\u9371\u9373\u9374\u9376"], + ["8fe5a1", "\u937A\u937D\u937F\u9380\u9381\u9382\u9388\u938A\u938B\u938D\u938F\u9392\u9395\u9398\u939B\u939E\u93A1\u93A3\u93A4\u93A6\u93A8\u93AB\u93B4\u93B5\u93B6\u93BA\u93A9\u93C1\u93C4\u93C5\u93C6\u93C7\u93C9", 4, "\u93D3\u93D9\u93DC\u93DE\u93DF\u93E2\u93E6\u93E7\u93F9\u93F7\u93F8\u93FA\u93FB\u93FD\u9401\u9402\u9404\u9408\u9409\u940D\u940E\u940F\u9415\u9416\u9417\u941F\u942E\u942F\u9431\u9432\u9433\u9434\u943B\u943F\u943D\u9443\u9445\u9448\u944A\u944C\u9455\u9459\u945C\u945F\u9461\u9463\u9468\u946B\u946D\u946E\u946F\u9471\u9472\u9484\u9483\u9578\u9579"], + ["8fe6a1", "\u957E\u9584\u9588\u958C\u958D\u958E\u959D\u959E\u959F\u95A1\u95A6\u95A9\u95AB\u95AC\u95B4\u95B6\u95BA\u95BD\u95BF\u95C6\u95C8\u95C9\u95CB\u95D0\u95D1\u95D2\u95D3\u95D9\u95DA\u95DD\u95DE\u95DF\u95E0\u95E4\u95E6\u961D\u961E\u9622\u9624\u9625\u9626\u962C\u9631\u9633\u9637\u9638\u9639\u963A\u963C\u963D\u9641\u9652\u9654\u9656\u9657\u9658\u9661\u966E\u9674\u967B\u967C\u967E\u967F\u9681\u9682\u9683\u9684\u9689\u9691\u9696\u969A\u969D\u969F\u96A4\u96A5\u96A6\u96A9\u96AE\u96AF\u96B3\u96BA\u96CA\u96D2\u5DB2\u96D8\u96DA\u96DD\u96DE\u96DF\u96E9\u96EF\u96F1\u96FA\u9702"], + ["8fe7a1", "\u9703\u9705\u9709\u971A\u971B\u971D\u9721\u9722\u9723\u9728\u9731\u9733\u9741\u9743\u974A\u974E\u974F\u9755\u9757\u9758\u975A\u975B\u9763\u9767\u976A\u976E\u9773\u9776\u9777\u9778\u977B\u977D\u977F\u9780\u9789\u9795\u9796\u9797\u9799\u979A\u979E\u979F\u97A2\u97AC\u97AE\u97B1\u97B2\u97B5\u97B6\u97B8\u97B9\u97BA\u97BC\u97BE\u97BF\u97C1\u97C4\u97C5\u97C7\u97C9\u97CA\u97CC\u97CD\u97CE\u97D0\u97D1\u97D4\u97D7\u97D8\u97D9\u97DD\u97DE\u97E0\u97DB\u97E1\u97E4\u97EF\u97F1\u97F4\u97F7\u97F8\u97FA\u9807\u980A\u9819\u980D\u980E\u9814\u9816\u981C\u981E\u9820\u9823\u9826"], + ["8fe8a1", "\u982B\u982E\u982F\u9830\u9832\u9833\u9835\u9825\u983E\u9844\u9847\u984A\u9851\u9852\u9853\u9856\u9857\u9859\u985A\u9862\u9863\u9865\u9866\u986A\u986C\u98AB\u98AD\u98AE\u98B0\u98B4\u98B7\u98B8\u98BA\u98BB\u98BF\u98C2\u98C5\u98C8\u98CC\u98E1\u98E3\u98E5\u98E6\u98E7\u98EA\u98F3\u98F6\u9902\u9907\u9908\u9911\u9915\u9916\u9917\u991A\u991B\u991C\u991F\u9922\u9926\u9927\u992B\u9931", 4, "\u9939\u993A\u993B\u993C\u9940\u9941\u9946\u9947\u9948\u994D\u994E\u9954\u9958\u9959\u995B\u995C\u995E\u995F\u9960\u999B\u999D\u999F\u99A6\u99B0\u99B1\u99B2\u99B5"], + ["8fe9a1", "\u99B9\u99BA\u99BD\u99BF\u99C3\u99C9\u99D3\u99D4\u99D9\u99DA\u99DC\u99DE\u99E7\u99EA\u99EB\u99EC\u99F0\u99F4\u99F5\u99F9\u99FD\u99FE\u9A02\u9A03\u9A04\u9A0B\u9A0C\u9A10\u9A11\u9A16\u9A1E\u9A20\u9A22\u9A23\u9A24\u9A27\u9A2D\u9A2E\u9A33\u9A35\u9A36\u9A38\u9A47\u9A41\u9A44\u9A4A\u9A4B\u9A4C\u9A4E\u9A51\u9A54\u9A56\u9A5D\u9AAA\u9AAC\u9AAE\u9AAF\u9AB2\u9AB4\u9AB5\u9AB6\u9AB9\u9ABB\u9ABE\u9ABF\u9AC1\u9AC3\u9AC6\u9AC8\u9ACE\u9AD0\u9AD2\u9AD5\u9AD6\u9AD7\u9ADB\u9ADC\u9AE0\u9AE4\u9AE5\u9AE7\u9AE9\u9AEC\u9AF2\u9AF3\u9AF5\u9AF9\u9AFA\u9AFD\u9AFF", 4], + ["8feaa1", "\u9B04\u9B05\u9B08\u9B09\u9B0B\u9B0C\u9B0D\u9B0E\u9B10\u9B12\u9B16\u9B19\u9B1B\u9B1C\u9B20\u9B26\u9B2B\u9B2D\u9B33\u9B34\u9B35\u9B37\u9B39\u9B3A\u9B3D\u9B48\u9B4B\u9B4C\u9B55\u9B56\u9B57\u9B5B\u9B5E\u9B61\u9B63\u9B65\u9B66\u9B68\u9B6A", 4, "\u9B73\u9B75\u9B77\u9B78\u9B79\u9B7F\u9B80\u9B84\u9B85\u9B86\u9B87\u9B89\u9B8A\u9B8B\u9B8D\u9B8F\u9B90\u9B94\u9B9A\u9B9D\u9B9E\u9BA6\u9BA7\u9BA9\u9BAC\u9BB0\u9BB1\u9BB2\u9BB7\u9BB8\u9BBB\u9BBC\u9BBE\u9BBF\u9BC1\u9BC7\u9BC8\u9BCE\u9BD0\u9BD7\u9BD8\u9BDD\u9BDF\u9BE5\u9BE7\u9BEA\u9BEB\u9BEF\u9BF3\u9BF7\u9BF8"], + ["8feba1", "\u9BF9\u9BFA\u9BFD\u9BFF\u9C00\u9C02\u9C0B\u9C0F\u9C11\u9C16\u9C18\u9C19\u9C1A\u9C1C\u9C1E\u9C22\u9C23\u9C26", 4, "\u9C31\u9C35\u9C36\u9C37\u9C3D\u9C41\u9C43\u9C44\u9C45\u9C49\u9C4A\u9C4E\u9C4F\u9C50\u9C53\u9C54\u9C56\u9C58\u9C5B\u9C5D\u9C5E\u9C5F\u9C63\u9C69\u9C6A\u9C5C\u9C6B\u9C68\u9C6E\u9C70\u9C72\u9C75\u9C77\u9C7B\u9CE6\u9CF2\u9CF7\u9CF9\u9D0B\u9D02\u9D11\u9D17\u9D18\u9D1C\u9D1D\u9D1E\u9D2F\u9D30\u9D32\u9D33\u9D34\u9D3A\u9D3C\u9D45\u9D3D\u9D42\u9D43\u9D47\u9D4A\u9D53\u9D54\u9D5F\u9D63\u9D62\u9D65\u9D69\u9D6A\u9D6B\u9D70\u9D76\u9D77\u9D7B"], + ["8feca1", "\u9D7C\u9D7E\u9D83\u9D84\u9D86\u9D8A\u9D8D\u9D8E\u9D92\u9D93\u9D95\u9D96\u9D97\u9D98\u9DA1\u9DAA\u9DAC\u9DAE\u9DB1\u9DB5\u9DB9\u9DBC\u9DBF\u9DC3\u9DC7\u9DC9\u9DCA\u9DD4\u9DD5\u9DD6\u9DD7\u9DDA\u9DDE\u9DDF\u9DE0\u9DE5\u9DE7\u9DE9\u9DEB\u9DEE\u9DF0\u9DF3\u9DF4\u9DFE\u9E0A\u9E02\u9E07\u9E0E\u9E10\u9E11\u9E12\u9E15\u9E16\u9E19\u9E1C\u9E1D\u9E7A\u9E7B\u9E7C\u9E80\u9E82\u9E83\u9E84\u9E85\u9E87\u9E8E\u9E8F\u9E96\u9E98\u9E9B\u9E9E\u9EA4\u9EA8\u9EAC\u9EAE\u9EAF\u9EB0\u9EB3\u9EB4\u9EB5\u9EC6\u9EC8\u9ECB\u9ED5\u9EDF\u9EE4\u9EE7\u9EEC\u9EED\u9EEE\u9EF0\u9EF1\u9EF2\u9EF5"], + ["8feda1", "\u9EF8\u9EFF\u9F02\u9F03\u9F09\u9F0F\u9F10\u9F11\u9F12\u9F14\u9F16\u9F17\u9F19\u9F1A\u9F1B\u9F1F\u9F22\u9F26\u9F2A\u9F2B\u9F2F\u9F31\u9F32\u9F34\u9F37\u9F39\u9F3A\u9F3C\u9F3D\u9F3F\u9F41\u9F43", 4, "\u9F53\u9F55\u9F56\u9F57\u9F58\u9F5A\u9F5D\u9F5E\u9F68\u9F69\u9F6D", 4, "\u9F73\u9F75\u9F7A\u9F7D\u9F8F\u9F90\u9F91\u9F92\u9F94\u9F96\u9F97\u9F9E\u9FA1\u9FA2\u9FA3\u9FA5"] + ]; + } +}); + +// node_modules/iconv-lite/encodings/tables/cp936.json +var require_cp936 = __commonJS({ + "node_modules/iconv-lite/encodings/tables/cp936.json"(exports2, module2) { + module2.exports = [ + ["0", "\0", 127, "\u20AC"], + ["8140", "\u4E02\u4E04\u4E05\u4E06\u4E0F\u4E12\u4E17\u4E1F\u4E20\u4E21\u4E23\u4E26\u4E29\u4E2E\u4E2F\u4E31\u4E33\u4E35\u4E37\u4E3C\u4E40\u4E41\u4E42\u4E44\u4E46\u4E4A\u4E51\u4E55\u4E57\u4E5A\u4E5B\u4E62\u4E63\u4E64\u4E65\u4E67\u4E68\u4E6A", 5, "\u4E72\u4E74", 9, "\u4E7F", 6, "\u4E87\u4E8A"], + ["8180", "\u4E90\u4E96\u4E97\u4E99\u4E9C\u4E9D\u4E9E\u4EA3\u4EAA\u4EAF\u4EB0\u4EB1\u4EB4\u4EB6\u4EB7\u4EB8\u4EB9\u4EBC\u4EBD\u4EBE\u4EC8\u4ECC\u4ECF\u4ED0\u4ED2\u4EDA\u4EDB\u4EDC\u4EE0\u4EE2\u4EE6\u4EE7\u4EE9\u4EED\u4EEE\u4EEF\u4EF1\u4EF4\u4EF8\u4EF9\u4EFA\u4EFC\u4EFE\u4F00\u4F02", 6, "\u4F0B\u4F0C\u4F12", 4, "\u4F1C\u4F1D\u4F21\u4F23\u4F28\u4F29\u4F2C\u4F2D\u4F2E\u4F31\u4F33\u4F35\u4F37\u4F39\u4F3B\u4F3E", 4, "\u4F44\u4F45\u4F47", 5, "\u4F52\u4F54\u4F56\u4F61\u4F62\u4F66\u4F68\u4F6A\u4F6B\u4F6D\u4F6E\u4F71\u4F72\u4F75\u4F77\u4F78\u4F79\u4F7A\u4F7D\u4F80\u4F81\u4F82\u4F85\u4F86\u4F87\u4F8A\u4F8C\u4F8E\u4F90\u4F92\u4F93\u4F95\u4F96\u4F98\u4F99\u4F9A\u4F9C\u4F9E\u4F9F\u4FA1\u4FA2"], + ["8240", "\u4FA4\u4FAB\u4FAD\u4FB0", 4, "\u4FB6", 8, "\u4FC0\u4FC1\u4FC2\u4FC6\u4FC7\u4FC8\u4FC9\u4FCB\u4FCC\u4FCD\u4FD2", 4, "\u4FD9\u4FDB\u4FE0\u4FE2\u4FE4\u4FE5\u4FE7\u4FEB\u4FEC\u4FF0\u4FF2\u4FF4\u4FF5\u4FF6\u4FF7\u4FF9\u4FFB\u4FFC\u4FFD\u4FFF", 11], + ["8280", "\u500B\u500E\u5010\u5011\u5013\u5015\u5016\u5017\u501B\u501D\u501E\u5020\u5022\u5023\u5024\u5027\u502B\u502F", 10, "\u503B\u503D\u503F\u5040\u5041\u5042\u5044\u5045\u5046\u5049\u504A\u504B\u504D\u5050", 4, "\u5056\u5057\u5058\u5059\u505B\u505D", 7, "\u5066", 5, "\u506D", 8, "\u5078\u5079\u507A\u507C\u507D\u5081\u5082\u5083\u5084\u5086\u5087\u5089\u508A\u508B\u508C\u508E", 20, "\u50A4\u50A6\u50AA\u50AB\u50AD", 4, "\u50B3", 6, "\u50BC"], + ["8340", "\u50BD", 17, "\u50D0", 5, "\u50D7\u50D8\u50D9\u50DB", 10, "\u50E8\u50E9\u50EA\u50EB\u50EF\u50F0\u50F1\u50F2\u50F4\u50F6", 4, "\u50FC", 9, "\u5108"], + ["8380", "\u5109\u510A\u510C", 5, "\u5113", 13, "\u5122", 28, "\u5142\u5147\u514A\u514C\u514E\u514F\u5150\u5152\u5153\u5157\u5158\u5159\u515B\u515D", 4, "\u5163\u5164\u5166\u5167\u5169\u516A\u516F\u5172\u517A\u517E\u517F\u5183\u5184\u5186\u5187\u518A\u518B\u518E\u518F\u5190\u5191\u5193\u5194\u5198\u519A\u519D\u519E\u519F\u51A1\u51A3\u51A6", 4, "\u51AD\u51AE\u51B4\u51B8\u51B9\u51BA\u51BE\u51BF\u51C1\u51C2\u51C3\u51C5\u51C8\u51CA\u51CD\u51CE\u51D0\u51D2", 5], + ["8440", "\u51D8\u51D9\u51DA\u51DC\u51DE\u51DF\u51E2\u51E3\u51E5", 5, "\u51EC\u51EE\u51F1\u51F2\u51F4\u51F7\u51FE\u5204\u5205\u5209\u520B\u520C\u520F\u5210\u5213\u5214\u5215\u521C\u521E\u521F\u5221\u5222\u5223\u5225\u5226\u5227\u522A\u522C\u522F\u5231\u5232\u5234\u5235\u523C\u523E\u5244", 5, "\u524B\u524E\u524F\u5252\u5253\u5255\u5257\u5258"], + ["8480", "\u5259\u525A\u525B\u525D\u525F\u5260\u5262\u5263\u5264\u5266\u5268\u526B\u526C\u526D\u526E\u5270\u5271\u5273", 9, "\u527E\u5280\u5283", 4, "\u5289", 6, "\u5291\u5292\u5294", 6, "\u529C\u52A4\u52A5\u52A6\u52A7\u52AE\u52AF\u52B0\u52B4", 9, "\u52C0\u52C1\u52C2\u52C4\u52C5\u52C6\u52C8\u52CA\u52CC\u52CD\u52CE\u52CF\u52D1\u52D3\u52D4\u52D5\u52D7\u52D9", 5, "\u52E0\u52E1\u52E2\u52E3\u52E5", 10, "\u52F1", 7, "\u52FB\u52FC\u52FD\u5301\u5302\u5303\u5304\u5307\u5309\u530A\u530B\u530C\u530E"], + ["8540", "\u5311\u5312\u5313\u5314\u5318\u531B\u531C\u531E\u531F\u5322\u5324\u5325\u5327\u5328\u5329\u532B\u532C\u532D\u532F", 9, "\u533C\u533D\u5340\u5342\u5344\u5346\u534B\u534C\u534D\u5350\u5354\u5358\u5359\u535B\u535D\u5365\u5368\u536A\u536C\u536D\u5372\u5376\u5379\u537B\u537C\u537D\u537E\u5380\u5381\u5383\u5387\u5388\u538A\u538E\u538F"], + ["8580", "\u5390", 4, "\u5396\u5397\u5399\u539B\u539C\u539E\u53A0\u53A1\u53A4\u53A7\u53AA\u53AB\u53AC\u53AD\u53AF", 6, "\u53B7\u53B8\u53B9\u53BA\u53BC\u53BD\u53BE\u53C0\u53C3", 4, "\u53CE\u53CF\u53D0\u53D2\u53D3\u53D5\u53DA\u53DC\u53DD\u53DE\u53E1\u53E2\u53E7\u53F4\u53FA\u53FE\u53FF\u5400\u5402\u5405\u5407\u540B\u5414\u5418\u5419\u541A\u541C\u5422\u5424\u5425\u542A\u5430\u5433\u5436\u5437\u543A\u543D\u543F\u5441\u5442\u5444\u5445\u5447\u5449\u544C\u544D\u544E\u544F\u5451\u545A\u545D", 4, "\u5463\u5465\u5467\u5469", 7, "\u5474\u5479\u547A\u547E\u547F\u5481\u5483\u5485\u5487\u5488\u5489\u548A\u548D\u5491\u5493\u5497\u5498\u549C\u549E\u549F\u54A0\u54A1"], + ["8640", "\u54A2\u54A5\u54AE\u54B0\u54B2\u54B5\u54B6\u54B7\u54B9\u54BA\u54BC\u54BE\u54C3\u54C5\u54CA\u54CB\u54D6\u54D8\u54DB\u54E0", 4, "\u54EB\u54EC\u54EF\u54F0\u54F1\u54F4", 5, "\u54FB\u54FE\u5500\u5502\u5503\u5504\u5505\u5508\u550A", 4, "\u5512\u5513\u5515", 5, "\u551C\u551D\u551E\u551F\u5521\u5525\u5526"], + ["8680", "\u5528\u5529\u552B\u552D\u5532\u5534\u5535\u5536\u5538\u5539\u553A\u553B\u553D\u5540\u5542\u5545\u5547\u5548\u554B", 4, "\u5551\u5552\u5553\u5554\u5557", 4, "\u555D\u555E\u555F\u5560\u5562\u5563\u5568\u5569\u556B\u556F", 5, "\u5579\u557A\u557D\u557F\u5585\u5586\u558C\u558D\u558E\u5590\u5592\u5593\u5595\u5596\u5597\u559A\u559B\u559E\u55A0", 6, "\u55A8", 8, "\u55B2\u55B4\u55B6\u55B8\u55BA\u55BC\u55BF", 4, "\u55C6\u55C7\u55C8\u55CA\u55CB\u55CE\u55CF\u55D0\u55D5\u55D7", 4, "\u55DE\u55E0\u55E2\u55E7\u55E9\u55ED\u55EE\u55F0\u55F1\u55F4\u55F6\u55F8", 4, "\u55FF\u5602\u5603\u5604\u5605"], + ["8740", "\u5606\u5607\u560A\u560B\u560D\u5610", 7, "\u5619\u561A\u561C\u561D\u5620\u5621\u5622\u5625\u5626\u5628\u5629\u562A\u562B\u562E\u562F\u5630\u5633\u5635\u5637\u5638\u563A\u563C\u563D\u563E\u5640", 11, "\u564F", 4, "\u5655\u5656\u565A\u565B\u565D", 4], + ["8780", "\u5663\u5665\u5666\u5667\u566D\u566E\u566F\u5670\u5672\u5673\u5674\u5675\u5677\u5678\u5679\u567A\u567D", 7, "\u5687", 6, "\u5690\u5691\u5692\u5694", 14, "\u56A4", 10, "\u56B0", 6, "\u56B8\u56B9\u56BA\u56BB\u56BD", 12, "\u56CB", 8, "\u56D5\u56D6\u56D8\u56D9\u56DC\u56E3\u56E5", 5, "\u56EC\u56EE\u56EF\u56F2\u56F3\u56F6\u56F7\u56F8\u56FB\u56FC\u5700\u5701\u5702\u5705\u5707\u570B", 6], + ["8840", "\u5712", 9, "\u571D\u571E\u5720\u5721\u5722\u5724\u5725\u5726\u5727\u572B\u5731\u5732\u5734", 4, "\u573C\u573D\u573F\u5741\u5743\u5744\u5745\u5746\u5748\u5749\u574B\u5752", 4, "\u5758\u5759\u5762\u5763\u5765\u5767\u576C\u576E\u5770\u5771\u5772\u5774\u5775\u5778\u5779\u577A\u577D\u577E\u577F\u5780"], + ["8880", "\u5781\u5787\u5788\u5789\u578A\u578D", 4, "\u5794", 6, "\u579C\u579D\u579E\u579F\u57A5\u57A8\u57AA\u57AC\u57AF\u57B0\u57B1\u57B3\u57B5\u57B6\u57B7\u57B9", 8, "\u57C4", 6, "\u57CC\u57CD\u57D0\u57D1\u57D3\u57D6\u57D7\u57DB\u57DC\u57DE\u57E1\u57E2\u57E3\u57E5", 7, "\u57EE\u57F0\u57F1\u57F2\u57F3\u57F5\u57F6\u57F7\u57FB\u57FC\u57FE\u57FF\u5801\u5803\u5804\u5805\u5808\u5809\u580A\u580C\u580E\u580F\u5810\u5812\u5813\u5814\u5816\u5817\u5818\u581A\u581B\u581C\u581D\u581F\u5822\u5823\u5825", 4, "\u582B", 4, "\u5831\u5832\u5833\u5834\u5836", 7], + ["8940", "\u583E", 5, "\u5845", 6, "\u584E\u584F\u5850\u5852\u5853\u5855\u5856\u5857\u5859", 4, "\u585F", 5, "\u5866", 4, "\u586D", 16, "\u587F\u5882\u5884\u5886\u5887\u5888\u588A\u588B\u588C"], + ["8980", "\u588D", 4, "\u5894", 4, "\u589B\u589C\u589D\u58A0", 7, "\u58AA", 17, "\u58BD\u58BE\u58BF\u58C0\u58C2\u58C3\u58C4\u58C6", 10, "\u58D2\u58D3\u58D4\u58D6", 13, "\u58E5", 5, "\u58ED\u58EF\u58F1\u58F2\u58F4\u58F5\u58F7\u58F8\u58FA", 7, "\u5903\u5905\u5906\u5908", 4, "\u590E\u5910\u5911\u5912\u5913\u5917\u5918\u591B\u591D\u591E\u5920\u5921\u5922\u5923\u5926\u5928\u592C\u5930\u5932\u5933\u5935\u5936\u593B"], + ["8a40", "\u593D\u593E\u593F\u5940\u5943\u5945\u5946\u594A\u594C\u594D\u5950\u5952\u5953\u5959\u595B", 4, "\u5961\u5963\u5964\u5966", 12, "\u5975\u5977\u597A\u597B\u597C\u597E\u597F\u5980\u5985\u5989\u598B\u598C\u598E\u598F\u5990\u5991\u5994\u5995\u5998\u599A\u599B\u599C\u599D\u599F\u59A0\u59A1\u59A2\u59A6"], + ["8a80", "\u59A7\u59AC\u59AD\u59B0\u59B1\u59B3", 5, "\u59BA\u59BC\u59BD\u59BF", 6, "\u59C7\u59C8\u59C9\u59CC\u59CD\u59CE\u59CF\u59D5\u59D6\u59D9\u59DB\u59DE", 4, "\u59E4\u59E6\u59E7\u59E9\u59EA\u59EB\u59ED", 11, "\u59FA\u59FC\u59FD\u59FE\u5A00\u5A02\u5A0A\u5A0B\u5A0D\u5A0E\u5A0F\u5A10\u5A12\u5A14\u5A15\u5A16\u5A17\u5A19\u5A1A\u5A1B\u5A1D\u5A1E\u5A21\u5A22\u5A24\u5A26\u5A27\u5A28\u5A2A", 6, "\u5A33\u5A35\u5A37", 4, "\u5A3D\u5A3E\u5A3F\u5A41", 4, "\u5A47\u5A48\u5A4B", 9, "\u5A56\u5A57\u5A58\u5A59\u5A5B", 5], + ["8b40", "\u5A61\u5A63\u5A64\u5A65\u5A66\u5A68\u5A69\u5A6B", 8, "\u5A78\u5A79\u5A7B\u5A7C\u5A7D\u5A7E\u5A80", 17, "\u5A93", 6, "\u5A9C", 13, "\u5AAB\u5AAC"], + ["8b80", "\u5AAD", 4, "\u5AB4\u5AB6\u5AB7\u5AB9", 4, "\u5ABF\u5AC0\u5AC3", 5, "\u5ACA\u5ACB\u5ACD", 4, "\u5AD3\u5AD5\u5AD7\u5AD9\u5ADA\u5ADB\u5ADD\u5ADE\u5ADF\u5AE2\u5AE4\u5AE5\u5AE7\u5AE8\u5AEA\u5AEC", 4, "\u5AF2", 22, "\u5B0A", 11, "\u5B18", 25, "\u5B33\u5B35\u5B36\u5B38", 7, "\u5B41", 6], + ["8c40", "\u5B48", 7, "\u5B52\u5B56\u5B5E\u5B60\u5B61\u5B67\u5B68\u5B6B\u5B6D\u5B6E\u5B6F\u5B72\u5B74\u5B76\u5B77\u5B78\u5B79\u5B7B\u5B7C\u5B7E\u5B7F\u5B82\u5B86\u5B8A\u5B8D\u5B8E\u5B90\u5B91\u5B92\u5B94\u5B96\u5B9F\u5BA7\u5BA8\u5BA9\u5BAC\u5BAD\u5BAE\u5BAF\u5BB1\u5BB2\u5BB7\u5BBA\u5BBB\u5BBC\u5BC0\u5BC1\u5BC3\u5BC8\u5BC9\u5BCA\u5BCB\u5BCD\u5BCE\u5BCF"], + ["8c80", "\u5BD1\u5BD4", 8, "\u5BE0\u5BE2\u5BE3\u5BE6\u5BE7\u5BE9", 4, "\u5BEF\u5BF1", 6, "\u5BFD\u5BFE\u5C00\u5C02\u5C03\u5C05\u5C07\u5C08\u5C0B\u5C0C\u5C0D\u5C0E\u5C10\u5C12\u5C13\u5C17\u5C19\u5C1B\u5C1E\u5C1F\u5C20\u5C21\u5C23\u5C26\u5C28\u5C29\u5C2A\u5C2B\u5C2D\u5C2E\u5C2F\u5C30\u5C32\u5C33\u5C35\u5C36\u5C37\u5C43\u5C44\u5C46\u5C47\u5C4C\u5C4D\u5C52\u5C53\u5C54\u5C56\u5C57\u5C58\u5C5A\u5C5B\u5C5C\u5C5D\u5C5F\u5C62\u5C64\u5C67", 6, "\u5C70\u5C72", 6, "\u5C7B\u5C7C\u5C7D\u5C7E\u5C80\u5C83", 4, "\u5C89\u5C8A\u5C8B\u5C8E\u5C8F\u5C92\u5C93\u5C95\u5C9D", 4, "\u5CA4", 4], + ["8d40", "\u5CAA\u5CAE\u5CAF\u5CB0\u5CB2\u5CB4\u5CB6\u5CB9\u5CBA\u5CBB\u5CBC\u5CBE\u5CC0\u5CC2\u5CC3\u5CC5", 5, "\u5CCC", 5, "\u5CD3", 5, "\u5CDA", 6, "\u5CE2\u5CE3\u5CE7\u5CE9\u5CEB\u5CEC\u5CEE\u5CEF\u5CF1", 9, "\u5CFC", 4], + ["8d80", "\u5D01\u5D04\u5D05\u5D08", 5, "\u5D0F", 4, "\u5D15\u5D17\u5D18\u5D19\u5D1A\u5D1C\u5D1D\u5D1F", 4, "\u5D25\u5D28\u5D2A\u5D2B\u5D2C\u5D2F", 4, "\u5D35", 7, "\u5D3F", 7, "\u5D48\u5D49\u5D4D", 10, "\u5D59\u5D5A\u5D5C\u5D5E", 10, "\u5D6A\u5D6D\u5D6E\u5D70\u5D71\u5D72\u5D73\u5D75", 12, "\u5D83", 21, "\u5D9A\u5D9B\u5D9C\u5D9E\u5D9F\u5DA0"], + ["8e40", "\u5DA1", 21, "\u5DB8", 12, "\u5DC6", 6, "\u5DCE", 12, "\u5DDC\u5DDF\u5DE0\u5DE3\u5DE4\u5DEA\u5DEC\u5DED"], + ["8e80", "\u5DF0\u5DF5\u5DF6\u5DF8", 4, "\u5DFF\u5E00\u5E04\u5E07\u5E09\u5E0A\u5E0B\u5E0D\u5E0E\u5E12\u5E13\u5E17\u5E1E", 7, "\u5E28", 4, "\u5E2F\u5E30\u5E32", 4, "\u5E39\u5E3A\u5E3E\u5E3F\u5E40\u5E41\u5E43\u5E46", 5, "\u5E4D", 6, "\u5E56", 4, "\u5E5C\u5E5D\u5E5F\u5E60\u5E63", 14, "\u5E75\u5E77\u5E79\u5E7E\u5E81\u5E82\u5E83\u5E85\u5E88\u5E89\u5E8C\u5E8D\u5E8E\u5E92\u5E98\u5E9B\u5E9D\u5EA1\u5EA2\u5EA3\u5EA4\u5EA8", 4, "\u5EAE", 4, "\u5EB4\u5EBA\u5EBB\u5EBC\u5EBD\u5EBF", 6], + ["8f40", "\u5EC6\u5EC7\u5EC8\u5ECB", 5, "\u5ED4\u5ED5\u5ED7\u5ED8\u5ED9\u5EDA\u5EDC", 11, "\u5EE9\u5EEB", 8, "\u5EF5\u5EF8\u5EF9\u5EFB\u5EFC\u5EFD\u5F05\u5F06\u5F07\u5F09\u5F0C\u5F0D\u5F0E\u5F10\u5F12\u5F14\u5F16\u5F19\u5F1A\u5F1C\u5F1D\u5F1E\u5F21\u5F22\u5F23\u5F24"], + ["8f80", "\u5F28\u5F2B\u5F2C\u5F2E\u5F30\u5F32", 6, "\u5F3B\u5F3D\u5F3E\u5F3F\u5F41", 14, "\u5F51\u5F54\u5F59\u5F5A\u5F5B\u5F5C\u5F5E\u5F5F\u5F60\u5F63\u5F65\u5F67\u5F68\u5F6B\u5F6E\u5F6F\u5F72\u5F74\u5F75\u5F76\u5F78\u5F7A\u5F7D\u5F7E\u5F7F\u5F83\u5F86\u5F8D\u5F8E\u5F8F\u5F91\u5F93\u5F94\u5F96\u5F9A\u5F9B\u5F9D\u5F9E\u5F9F\u5FA0\u5FA2", 5, "\u5FA9\u5FAB\u5FAC\u5FAF", 5, "\u5FB6\u5FB8\u5FB9\u5FBA\u5FBB\u5FBE", 4, "\u5FC7\u5FC8\u5FCA\u5FCB\u5FCE\u5FD3\u5FD4\u5FD5\u5FDA\u5FDB\u5FDC\u5FDE\u5FDF\u5FE2\u5FE3\u5FE5\u5FE6\u5FE8\u5FE9\u5FEC\u5FEF\u5FF0\u5FF2\u5FF3\u5FF4\u5FF6\u5FF7\u5FF9\u5FFA\u5FFC\u6007"], + ["9040", "\u6008\u6009\u600B\u600C\u6010\u6011\u6013\u6017\u6018\u601A\u601E\u601F\u6022\u6023\u6024\u602C\u602D\u602E\u6030", 4, "\u6036", 4, "\u603D\u603E\u6040\u6044", 6, "\u604C\u604E\u604F\u6051\u6053\u6054\u6056\u6057\u6058\u605B\u605C\u605E\u605F\u6060\u6061\u6065\u6066\u606E\u6071\u6072\u6074\u6075\u6077\u607E\u6080"], + ["9080", "\u6081\u6082\u6085\u6086\u6087\u6088\u608A\u608B\u608E\u608F\u6090\u6091\u6093\u6095\u6097\u6098\u6099\u609C\u609E\u60A1\u60A2\u60A4\u60A5\u60A7\u60A9\u60AA\u60AE\u60B0\u60B3\u60B5\u60B6\u60B7\u60B9\u60BA\u60BD", 7, "\u60C7\u60C8\u60C9\u60CC", 4, "\u60D2\u60D3\u60D4\u60D6\u60D7\u60D9\u60DB\u60DE\u60E1", 4, "\u60EA\u60F1\u60F2\u60F5\u60F7\u60F8\u60FB", 4, "\u6102\u6103\u6104\u6105\u6107\u610A\u610B\u610C\u6110", 4, "\u6116\u6117\u6118\u6119\u611B\u611C\u611D\u611E\u6121\u6122\u6125\u6128\u6129\u612A\u612C", 18, "\u6140", 6], + ["9140", "\u6147\u6149\u614B\u614D\u614F\u6150\u6152\u6153\u6154\u6156", 6, "\u615E\u615F\u6160\u6161\u6163\u6164\u6165\u6166\u6169", 6, "\u6171\u6172\u6173\u6174\u6176\u6178", 18, "\u618C\u618D\u618F", 4, "\u6195"], + ["9180", "\u6196", 6, "\u619E", 8, "\u61AA\u61AB\u61AD", 9, "\u61B8", 5, "\u61BF\u61C0\u61C1\u61C3", 4, "\u61C9\u61CC", 4, "\u61D3\u61D5", 16, "\u61E7", 13, "\u61F6", 8, "\u6200", 5, "\u6207\u6209\u6213\u6214\u6219\u621C\u621D\u621E\u6220\u6223\u6226\u6227\u6228\u6229\u622B\u622D\u622F\u6230\u6231\u6232\u6235\u6236\u6238", 4, "\u6242\u6244\u6245\u6246\u624A"], + ["9240", "\u624F\u6250\u6255\u6256\u6257\u6259\u625A\u625C", 6, "\u6264\u6265\u6268\u6271\u6272\u6274\u6275\u6277\u6278\u627A\u627B\u627D\u6281\u6282\u6283\u6285\u6286\u6287\u6288\u628B", 5, "\u6294\u6299\u629C\u629D\u629E\u62A3\u62A6\u62A7\u62A9\u62AA\u62AD\u62AE\u62AF\u62B0\u62B2\u62B3\u62B4\u62B6\u62B7\u62B8\u62BA\u62BE\u62C0\u62C1"], + ["9280", "\u62C3\u62CB\u62CF\u62D1\u62D5\u62DD\u62DE\u62E0\u62E1\u62E4\u62EA\u62EB\u62F0\u62F2\u62F5\u62F8\u62F9\u62FA\u62FB\u6300\u6303\u6304\u6305\u6306\u630A\u630B\u630C\u630D\u630F\u6310\u6312\u6313\u6314\u6315\u6317\u6318\u6319\u631C\u6326\u6327\u6329\u632C\u632D\u632E\u6330\u6331\u6333", 5, "\u633B\u633C\u633E\u633F\u6340\u6341\u6344\u6347\u6348\u634A\u6351\u6352\u6353\u6354\u6356", 7, "\u6360\u6364\u6365\u6366\u6368\u636A\u636B\u636C\u636F\u6370\u6372\u6373\u6374\u6375\u6378\u6379\u637C\u637D\u637E\u637F\u6381\u6383\u6384\u6385\u6386\u638B\u638D\u6391\u6393\u6394\u6395\u6397\u6399", 6, "\u63A1\u63A4\u63A6\u63AB\u63AF\u63B1\u63B2\u63B5\u63B6\u63B9\u63BB\u63BD\u63BF\u63C0"], + ["9340", "\u63C1\u63C2\u63C3\u63C5\u63C7\u63C8\u63CA\u63CB\u63CC\u63D1\u63D3\u63D4\u63D5\u63D7", 6, "\u63DF\u63E2\u63E4", 4, "\u63EB\u63EC\u63EE\u63EF\u63F0\u63F1\u63F3\u63F5\u63F7\u63F9\u63FA\u63FB\u63FC\u63FE\u6403\u6404\u6406", 4, "\u640D\u640E\u6411\u6412\u6415", 5, "\u641D\u641F\u6422\u6423\u6424"], + ["9380", "\u6425\u6427\u6428\u6429\u642B\u642E", 5, "\u6435", 4, "\u643B\u643C\u643E\u6440\u6442\u6443\u6449\u644B", 6, "\u6453\u6455\u6456\u6457\u6459", 4, "\u645F", 7, "\u6468\u646A\u646B\u646C\u646E", 9, "\u647B", 6, "\u6483\u6486\u6488", 8, "\u6493\u6494\u6497\u6498\u649A\u649B\u649C\u649D\u649F", 4, "\u64A5\u64A6\u64A7\u64A8\u64AA\u64AB\u64AF\u64B1\u64B2\u64B3\u64B4\u64B6\u64B9\u64BB\u64BD\u64BE\u64BF\u64C1\u64C3\u64C4\u64C6", 6, "\u64CF\u64D1\u64D3\u64D4\u64D5\u64D6\u64D9\u64DA"], + ["9440", "\u64DB\u64DC\u64DD\u64DF\u64E0\u64E1\u64E3\u64E5\u64E7", 24, "\u6501", 7, "\u650A", 7, "\u6513", 4, "\u6519", 8], + ["9480", "\u6522\u6523\u6524\u6526", 4, "\u652C\u652D\u6530\u6531\u6532\u6533\u6537\u653A\u653C\u653D\u6540", 4, "\u6546\u6547\u654A\u654B\u654D\u654E\u6550\u6552\u6553\u6554\u6557\u6558\u655A\u655C\u655F\u6560\u6561\u6564\u6565\u6567\u6568\u6569\u656A\u656D\u656E\u656F\u6571\u6573\u6575\u6576\u6578", 14, "\u6588\u6589\u658A\u658D\u658E\u658F\u6592\u6594\u6595\u6596\u6598\u659A\u659D\u659E\u65A0\u65A2\u65A3\u65A6\u65A8\u65AA\u65AC\u65AE\u65B1", 7, "\u65BA\u65BB\u65BE\u65BF\u65C0\u65C2\u65C7\u65C8\u65C9\u65CA\u65CD\u65D0\u65D1\u65D3\u65D4\u65D5\u65D8", 7, "\u65E1\u65E3\u65E4\u65EA\u65EB"], + ["9540", "\u65F2\u65F3\u65F4\u65F5\u65F8\u65F9\u65FB", 4, "\u6601\u6604\u6605\u6607\u6608\u6609\u660B\u660D\u6610\u6611\u6612\u6616\u6617\u6618\u661A\u661B\u661C\u661E\u6621\u6622\u6623\u6624\u6626\u6629\u662A\u662B\u662C\u662E\u6630\u6632\u6633\u6637", 4, "\u663D\u663F\u6640\u6642\u6644", 6, "\u664D\u664E\u6650\u6651\u6658"], + ["9580", "\u6659\u665B\u665C\u665D\u665E\u6660\u6662\u6663\u6665\u6667\u6669", 4, "\u6671\u6672\u6673\u6675\u6678\u6679\u667B\u667C\u667D\u667F\u6680\u6681\u6683\u6685\u6686\u6688\u6689\u668A\u668B\u668D\u668E\u668F\u6690\u6692\u6693\u6694\u6695\u6698", 4, "\u669E", 8, "\u66A9", 4, "\u66AF", 4, "\u66B5\u66B6\u66B7\u66B8\u66BA\u66BB\u66BC\u66BD\u66BF", 25, "\u66DA\u66DE", 7, "\u66E7\u66E8\u66EA", 5, "\u66F1\u66F5\u66F6\u66F8\u66FA\u66FB\u66FD\u6701\u6702\u6703"], + ["9640", "\u6704\u6705\u6706\u6707\u670C\u670E\u670F\u6711\u6712\u6713\u6716\u6718\u6719\u671A\u671C\u671E\u6720", 5, "\u6727\u6729\u672E\u6730\u6732\u6733\u6736\u6737\u6738\u6739\u673B\u673C\u673E\u673F\u6741\u6744\u6745\u6747\u674A\u674B\u674D\u6752\u6754\u6755\u6757", 4, "\u675D\u6762\u6763\u6764\u6766\u6767\u676B\u676C\u676E\u6771\u6774\u6776"], + ["9680", "\u6778\u6779\u677A\u677B\u677D\u6780\u6782\u6783\u6785\u6786\u6788\u678A\u678C\u678D\u678E\u678F\u6791\u6792\u6793\u6794\u6796\u6799\u679B\u679F\u67A0\u67A1\u67A4\u67A6\u67A9\u67AC\u67AE\u67B1\u67B2\u67B4\u67B9", 7, "\u67C2\u67C5", 9, "\u67D5\u67D6\u67D7\u67DB\u67DF\u67E1\u67E3\u67E4\u67E6\u67E7\u67E8\u67EA\u67EB\u67ED\u67EE\u67F2\u67F5", 7, "\u67FE\u6801\u6802\u6803\u6804\u6806\u680D\u6810\u6812\u6814\u6815\u6818", 4, "\u681E\u681F\u6820\u6822", 6, "\u682B", 6, "\u6834\u6835\u6836\u683A\u683B\u683F\u6847\u684B\u684D\u684F\u6852\u6856", 5], + ["9740", "\u685C\u685D\u685E\u685F\u686A\u686C", 7, "\u6875\u6878", 8, "\u6882\u6884\u6887", 7, "\u6890\u6891\u6892\u6894\u6895\u6896\u6898", 9, "\u68A3\u68A4\u68A5\u68A9\u68AA\u68AB\u68AC\u68AE\u68B1\u68B2\u68B4\u68B6\u68B7\u68B8"], + ["9780", "\u68B9", 6, "\u68C1\u68C3", 5, "\u68CA\u68CC\u68CE\u68CF\u68D0\u68D1\u68D3\u68D4\u68D6\u68D7\u68D9\u68DB", 4, "\u68E1\u68E2\u68E4", 9, "\u68EF\u68F2\u68F3\u68F4\u68F6\u68F7\u68F8\u68FB\u68FD\u68FE\u68FF\u6900\u6902\u6903\u6904\u6906", 4, "\u690C\u690F\u6911\u6913", 11, "\u6921\u6922\u6923\u6925", 7, "\u692E\u692F\u6931\u6932\u6933\u6935\u6936\u6937\u6938\u693A\u693B\u693C\u693E\u6940\u6941\u6943", 16, "\u6955\u6956\u6958\u6959\u695B\u695C\u695F"], + ["9840", "\u6961\u6962\u6964\u6965\u6967\u6968\u6969\u696A\u696C\u696D\u696F\u6970\u6972", 4, "\u697A\u697B\u697D\u697E\u697F\u6981\u6983\u6985\u698A\u698B\u698C\u698E", 5, "\u6996\u6997\u6999\u699A\u699D", 9, "\u69A9\u69AA\u69AC\u69AE\u69AF\u69B0\u69B2\u69B3\u69B5\u69B6\u69B8\u69B9\u69BA\u69BC\u69BD"], + ["9880", "\u69BE\u69BF\u69C0\u69C2", 7, "\u69CB\u69CD\u69CF\u69D1\u69D2\u69D3\u69D5", 5, "\u69DC\u69DD\u69DE\u69E1", 11, "\u69EE\u69EF\u69F0\u69F1\u69F3", 9, "\u69FE\u6A00", 9, "\u6A0B", 11, "\u6A19", 5, "\u6A20\u6A22", 5, "\u6A29\u6A2B\u6A2C\u6A2D\u6A2E\u6A30\u6A32\u6A33\u6A34\u6A36", 6, "\u6A3F", 4, "\u6A45\u6A46\u6A48", 7, "\u6A51", 6, "\u6A5A"], + ["9940", "\u6A5C", 4, "\u6A62\u6A63\u6A64\u6A66", 10, "\u6A72", 6, "\u6A7A\u6A7B\u6A7D\u6A7E\u6A7F\u6A81\u6A82\u6A83\u6A85", 8, "\u6A8F\u6A92", 4, "\u6A98", 7, "\u6AA1", 5], + ["9980", "\u6AA7\u6AA8\u6AAA\u6AAD", 114, "\u6B25\u6B26\u6B28", 6], + ["9a40", "\u6B2F\u6B30\u6B31\u6B33\u6B34\u6B35\u6B36\u6B38\u6B3B\u6B3C\u6B3D\u6B3F\u6B40\u6B41\u6B42\u6B44\u6B45\u6B48\u6B4A\u6B4B\u6B4D", 11, "\u6B5A", 7, "\u6B68\u6B69\u6B6B", 13, "\u6B7A\u6B7D\u6B7E\u6B7F\u6B80\u6B85\u6B88"], + ["9a80", "\u6B8C\u6B8E\u6B8F\u6B90\u6B91\u6B94\u6B95\u6B97\u6B98\u6B99\u6B9C", 4, "\u6BA2", 7, "\u6BAB", 7, "\u6BB6\u6BB8", 6, "\u6BC0\u6BC3\u6BC4\u6BC6", 4, "\u6BCC\u6BCE\u6BD0\u6BD1\u6BD8\u6BDA\u6BDC", 4, "\u6BE2", 7, "\u6BEC\u6BED\u6BEE\u6BF0\u6BF1\u6BF2\u6BF4\u6BF6\u6BF7\u6BF8\u6BFA\u6BFB\u6BFC\u6BFE", 6, "\u6C08", 4, "\u6C0E\u6C12\u6C17\u6C1C\u6C1D\u6C1E\u6C20\u6C23\u6C25\u6C2B\u6C2C\u6C2D\u6C31\u6C33\u6C36\u6C37\u6C39\u6C3A\u6C3B\u6C3C\u6C3E\u6C3F\u6C43\u6C44\u6C45\u6C48\u6C4B", 4, "\u6C51\u6C52\u6C53\u6C56\u6C58"], + ["9b40", "\u6C59\u6C5A\u6C62\u6C63\u6C65\u6C66\u6C67\u6C6B", 4, "\u6C71\u6C73\u6C75\u6C77\u6C78\u6C7A\u6C7B\u6C7C\u6C7F\u6C80\u6C84\u6C87\u6C8A\u6C8B\u6C8D\u6C8E\u6C91\u6C92\u6C95\u6C96\u6C97\u6C98\u6C9A\u6C9C\u6C9D\u6C9E\u6CA0\u6CA2\u6CA8\u6CAC\u6CAF\u6CB0\u6CB4\u6CB5\u6CB6\u6CB7\u6CBA\u6CC0\u6CC1\u6CC2\u6CC3\u6CC6\u6CC7\u6CC8\u6CCB\u6CCD\u6CCE\u6CCF\u6CD1\u6CD2\u6CD8"], + ["9b80", "\u6CD9\u6CDA\u6CDC\u6CDD\u6CDF\u6CE4\u6CE6\u6CE7\u6CE9\u6CEC\u6CED\u6CF2\u6CF4\u6CF9\u6CFF\u6D00\u6D02\u6D03\u6D05\u6D06\u6D08\u6D09\u6D0A\u6D0D\u6D0F\u6D10\u6D11\u6D13\u6D14\u6D15\u6D16\u6D18\u6D1C\u6D1D\u6D1F", 5, "\u6D26\u6D28\u6D29\u6D2C\u6D2D\u6D2F\u6D30\u6D34\u6D36\u6D37\u6D38\u6D3A\u6D3F\u6D40\u6D42\u6D44\u6D49\u6D4C\u6D50\u6D55\u6D56\u6D57\u6D58\u6D5B\u6D5D\u6D5F\u6D61\u6D62\u6D64\u6D65\u6D67\u6D68\u6D6B\u6D6C\u6D6D\u6D70\u6D71\u6D72\u6D73\u6D75\u6D76\u6D79\u6D7A\u6D7B\u6D7D", 4, "\u6D83\u6D84\u6D86\u6D87\u6D8A\u6D8B\u6D8D\u6D8F\u6D90\u6D92\u6D96", 4, "\u6D9C\u6DA2\u6DA5\u6DAC\u6DAD\u6DB0\u6DB1\u6DB3\u6DB4\u6DB6\u6DB7\u6DB9", 5, "\u6DC1\u6DC2\u6DC3\u6DC8\u6DC9\u6DCA"], + ["9c40", "\u6DCD\u6DCE\u6DCF\u6DD0\u6DD2\u6DD3\u6DD4\u6DD5\u6DD7\u6DDA\u6DDB\u6DDC\u6DDF\u6DE2\u6DE3\u6DE5\u6DE7\u6DE8\u6DE9\u6DEA\u6DED\u6DEF\u6DF0\u6DF2\u6DF4\u6DF5\u6DF6\u6DF8\u6DFA\u6DFD", 7, "\u6E06\u6E07\u6E08\u6E09\u6E0B\u6E0F\u6E12\u6E13\u6E15\u6E18\u6E19\u6E1B\u6E1C\u6E1E\u6E1F\u6E22\u6E26\u6E27\u6E28\u6E2A\u6E2C\u6E2E\u6E30\u6E31\u6E33\u6E35"], + ["9c80", "\u6E36\u6E37\u6E39\u6E3B", 7, "\u6E45", 7, "\u6E4F\u6E50\u6E51\u6E52\u6E55\u6E57\u6E59\u6E5A\u6E5C\u6E5D\u6E5E\u6E60", 10, "\u6E6C\u6E6D\u6E6F", 14, "\u6E80\u6E81\u6E82\u6E84\u6E87\u6E88\u6E8A", 4, "\u6E91", 6, "\u6E99\u6E9A\u6E9B\u6E9D\u6E9E\u6EA0\u6EA1\u6EA3\u6EA4\u6EA6\u6EA8\u6EA9\u6EAB\u6EAC\u6EAD\u6EAE\u6EB0\u6EB3\u6EB5\u6EB8\u6EB9\u6EBC\u6EBE\u6EBF\u6EC0\u6EC3\u6EC4\u6EC5\u6EC6\u6EC8\u6EC9\u6ECA\u6ECC\u6ECD\u6ECE\u6ED0\u6ED2\u6ED6\u6ED8\u6ED9\u6EDB\u6EDC\u6EDD\u6EE3\u6EE7\u6EEA", 5], + ["9d40", "\u6EF0\u6EF1\u6EF2\u6EF3\u6EF5\u6EF6\u6EF7\u6EF8\u6EFA", 7, "\u6F03\u6F04\u6F05\u6F07\u6F08\u6F0A", 4, "\u6F10\u6F11\u6F12\u6F16", 9, "\u6F21\u6F22\u6F23\u6F25\u6F26\u6F27\u6F28\u6F2C\u6F2E\u6F30\u6F32\u6F34\u6F35\u6F37", 6, "\u6F3F\u6F40\u6F41\u6F42"], + ["9d80", "\u6F43\u6F44\u6F45\u6F48\u6F49\u6F4A\u6F4C\u6F4E", 9, "\u6F59\u6F5A\u6F5B\u6F5D\u6F5F\u6F60\u6F61\u6F63\u6F64\u6F65\u6F67", 5, "\u6F6F\u6F70\u6F71\u6F73\u6F75\u6F76\u6F77\u6F79\u6F7B\u6F7D", 6, "\u6F85\u6F86\u6F87\u6F8A\u6F8B\u6F8F", 12, "\u6F9D\u6F9E\u6F9F\u6FA0\u6FA2", 4, "\u6FA8", 10, "\u6FB4\u6FB5\u6FB7\u6FB8\u6FBA", 5, "\u6FC1\u6FC3", 5, "\u6FCA", 6, "\u6FD3", 10, "\u6FDF\u6FE2\u6FE3\u6FE4\u6FE5"], + ["9e40", "\u6FE6", 7, "\u6FF0", 32, "\u7012", 7, "\u701C", 6, "\u7024", 6], + ["9e80", "\u702B", 9, "\u7036\u7037\u7038\u703A", 17, "\u704D\u704E\u7050", 13, "\u705F", 11, "\u706E\u7071\u7072\u7073\u7074\u7077\u7079\u707A\u707B\u707D\u7081\u7082\u7083\u7084\u7086\u7087\u7088\u708B\u708C\u708D\u708F\u7090\u7091\u7093\u7097\u7098\u709A\u709B\u709E", 12, "\u70B0\u70B2\u70B4\u70B5\u70B6\u70BA\u70BE\u70BF\u70C4\u70C5\u70C6\u70C7\u70C9\u70CB", 12, "\u70DA"], + ["9f40", "\u70DC\u70DD\u70DE\u70E0\u70E1\u70E2\u70E3\u70E5\u70EA\u70EE\u70F0", 6, "\u70F8\u70FA\u70FB\u70FC\u70FE", 10, "\u710B", 4, "\u7111\u7112\u7114\u7117\u711B", 10, "\u7127", 7, "\u7132\u7133\u7134"], + ["9f80", "\u7135\u7137", 13, "\u7146\u7147\u7148\u7149\u714B\u714D\u714F", 12, "\u715D\u715F", 4, "\u7165\u7169", 4, "\u716F\u7170\u7171\u7174\u7175\u7176\u7177\u7179\u717B\u717C\u717E", 5, "\u7185", 4, "\u718B\u718C\u718D\u718E\u7190\u7191\u7192\u7193\u7195\u7196\u7197\u719A", 4, "\u71A1", 6, "\u71A9\u71AA\u71AB\u71AD", 5, "\u71B4\u71B6\u71B7\u71B8\u71BA", 8, "\u71C4", 9, "\u71CF", 4], + ["a040", "\u71D6", 9, "\u71E1\u71E2\u71E3\u71E4\u71E6\u71E8", 5, "\u71EF", 9, "\u71FA", 11, "\u7207", 19], + ["a080", "\u721B\u721C\u721E", 9, "\u7229\u722B\u722D\u722E\u722F\u7232\u7233\u7234\u723A\u723C\u723E\u7240", 6, "\u7249\u724A\u724B\u724E\u724F\u7250\u7251\u7253\u7254\u7255\u7257\u7258\u725A\u725C\u725E\u7260\u7263\u7264\u7265\u7268\u726A\u726B\u726C\u726D\u7270\u7271\u7273\u7274\u7276\u7277\u7278\u727B\u727C\u727D\u7282\u7283\u7285", 4, "\u728C\u728E\u7290\u7291\u7293", 11, "\u72A0", 11, "\u72AE\u72B1\u72B2\u72B3\u72B5\u72BA", 6, "\u72C5\u72C6\u72C7\u72C9\u72CA\u72CB\u72CC\u72CF\u72D1\u72D3\u72D4\u72D5\u72D6\u72D8\u72DA\u72DB"], + ["a1a1", "\u3000\u3001\u3002\xB7\u02C9\u02C7\xA8\u3003\u3005\u2014\uFF5E\u2016\u2026\u2018\u2019\u201C\u201D\u3014\u3015\u3008", 7, "\u3016\u3017\u3010\u3011\xB1\xD7\xF7\u2236\u2227\u2228\u2211\u220F\u222A\u2229\u2208\u2237\u221A\u22A5\u2225\u2220\u2312\u2299\u222B\u222E\u2261\u224C\u2248\u223D\u221D\u2260\u226E\u226F\u2264\u2265\u221E\u2235\u2234\u2642\u2640\xB0\u2032\u2033\u2103\uFF04\xA4\uFFE0\uFFE1\u2030\xA7\u2116\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u203B\u2192\u2190\u2191\u2193\u3013"], + ["a2a1", "\u2170", 9], + ["a2b1", "\u2488", 19, "\u2474", 19, "\u2460", 9], + ["a2e5", "\u3220", 9], + ["a2f1", "\u2160", 11], + ["a3a1", "\uFF01\uFF02\uFF03\uFFE5\uFF05", 88, "\uFFE3"], + ["a4a1", "\u3041", 82], + ["a5a1", "\u30A1", 85], + ["a6a1", "\u0391", 16, "\u03A3", 6], + ["a6c1", "\u03B1", 16, "\u03C3", 6], + ["a6e0", "\uFE35\uFE36\uFE39\uFE3A\uFE3F\uFE40\uFE3D\uFE3E\uFE41\uFE42\uFE43\uFE44"], + ["a6ee", "\uFE3B\uFE3C\uFE37\uFE38\uFE31"], + ["a6f4", "\uFE33\uFE34"], + ["a7a1", "\u0410", 5, "\u0401\u0416", 25], + ["a7d1", "\u0430", 5, "\u0451\u0436", 25], + ["a840", "\u02CA\u02CB\u02D9\u2013\u2015\u2025\u2035\u2105\u2109\u2196\u2197\u2198\u2199\u2215\u221F\u2223\u2252\u2266\u2267\u22BF\u2550", 35, "\u2581", 6], + ["a880", "\u2588", 7, "\u2593\u2594\u2595\u25BC\u25BD\u25E2\u25E3\u25E4\u25E5\u2609\u2295\u3012\u301D\u301E"], + ["a8a1", "\u0101\xE1\u01CE\xE0\u0113\xE9\u011B\xE8\u012B\xED\u01D0\xEC\u014D\xF3\u01D2\xF2\u016B\xFA\u01D4\xF9\u01D6\u01D8\u01DA\u01DC\xFC\xEA\u0251"], + ["a8bd", "\u0144\u0148"], + ["a8c0", "\u0261"], + ["a8c5", "\u3105", 36], + ["a940", "\u3021", 8, "\u32A3\u338E\u338F\u339C\u339D\u339E\u33A1\u33C4\u33CE\u33D1\u33D2\u33D5\uFE30\uFFE2\uFFE4"], + ["a959", "\u2121\u3231"], + ["a95c", "\u2010"], + ["a960", "\u30FC\u309B\u309C\u30FD\u30FE\u3006\u309D\u309E\uFE49", 9, "\uFE54\uFE55\uFE56\uFE57\uFE59", 8], + ["a980", "\uFE62", 4, "\uFE68\uFE69\uFE6A\uFE6B"], + ["a996", "\u3007"], + ["a9a4", "\u2500", 75], + ["aa40", "\u72DC\u72DD\u72DF\u72E2", 5, "\u72EA\u72EB\u72F5\u72F6\u72F9\u72FD\u72FE\u72FF\u7300\u7302\u7304", 5, "\u730B\u730C\u730D\u730F\u7310\u7311\u7312\u7314\u7318\u7319\u731A\u731F\u7320\u7323\u7324\u7326\u7327\u7328\u732D\u732F\u7330\u7332\u7333\u7335\u7336\u733A\u733B\u733C\u733D\u7340", 8], + ["aa80", "\u7349\u734A\u734B\u734C\u734E\u734F\u7351\u7353\u7354\u7355\u7356\u7358", 7, "\u7361", 10, "\u736E\u7370\u7371"], + ["ab40", "\u7372", 11, "\u737F", 4, "\u7385\u7386\u7388\u738A\u738C\u738D\u738F\u7390\u7392\u7393\u7394\u7395\u7397\u7398\u7399\u739A\u739C\u739D\u739E\u73A0\u73A1\u73A3", 5, "\u73AA\u73AC\u73AD\u73B1\u73B4\u73B5\u73B6\u73B8\u73B9\u73BC\u73BD\u73BE\u73BF\u73C1\u73C3", 4], + ["ab80", "\u73CB\u73CC\u73CE\u73D2", 6, "\u73DA\u73DB\u73DC\u73DD\u73DF\u73E1\u73E2\u73E3\u73E4\u73E6\u73E8\u73EA\u73EB\u73EC\u73EE\u73EF\u73F0\u73F1\u73F3", 4], + ["ac40", "\u73F8", 10, "\u7404\u7407\u7408\u740B\u740C\u740D\u740E\u7411", 8, "\u741C", 5, "\u7423\u7424\u7427\u7429\u742B\u742D\u742F\u7431\u7432\u7437", 4, "\u743D\u743E\u743F\u7440\u7442", 11], + ["ac80", "\u744E", 6, "\u7456\u7458\u745D\u7460", 12, "\u746E\u746F\u7471", 4, "\u7478\u7479\u747A"], + ["ad40", "\u747B\u747C\u747D\u747F\u7482\u7484\u7485\u7486\u7488\u7489\u748A\u748C\u748D\u748F\u7491", 10, "\u749D\u749F", 7, "\u74AA", 15, "\u74BB", 12], + ["ad80", "\u74C8", 9, "\u74D3", 8, "\u74DD\u74DF\u74E1\u74E5\u74E7", 6, "\u74F0\u74F1\u74F2"], + ["ae40", "\u74F3\u74F5\u74F8", 6, "\u7500\u7501\u7502\u7503\u7505", 7, "\u750E\u7510\u7512\u7514\u7515\u7516\u7517\u751B\u751D\u751E\u7520", 4, "\u7526\u7527\u752A\u752E\u7534\u7536\u7539\u753C\u753D\u753F\u7541\u7542\u7543\u7544\u7546\u7547\u7549\u754A\u754D\u7550\u7551\u7552\u7553\u7555\u7556\u7557\u7558"], + ["ae80", "\u755D", 7, "\u7567\u7568\u7569\u756B", 6, "\u7573\u7575\u7576\u7577\u757A", 4, "\u7580\u7581\u7582\u7584\u7585\u7587"], + ["af40", "\u7588\u7589\u758A\u758C\u758D\u758E\u7590\u7593\u7595\u7598\u759B\u759C\u759E\u75A2\u75A6", 4, "\u75AD\u75B6\u75B7\u75BA\u75BB\u75BF\u75C0\u75C1\u75C6\u75CB\u75CC\u75CE\u75CF\u75D0\u75D1\u75D3\u75D7\u75D9\u75DA\u75DC\u75DD\u75DF\u75E0\u75E1\u75E5\u75E9\u75EC\u75ED\u75EE\u75EF\u75F2\u75F3\u75F5\u75F6\u75F7\u75F8\u75FA\u75FB\u75FD\u75FE\u7602\u7604\u7606\u7607"], + ["af80", "\u7608\u7609\u760B\u760D\u760E\u760F\u7611\u7612\u7613\u7614\u7616\u761A\u761C\u761D\u761E\u7621\u7623\u7627\u7628\u762C\u762E\u762F\u7631\u7632\u7636\u7637\u7639\u763A\u763B\u763D\u7641\u7642\u7644"], + ["b040", "\u7645", 6, "\u764E", 5, "\u7655\u7657", 4, "\u765D\u765F\u7660\u7661\u7662\u7664", 6, "\u766C\u766D\u766E\u7670", 7, "\u7679\u767A\u767C\u767F\u7680\u7681\u7683\u7685\u7689\u768A\u768C\u768D\u768F\u7690\u7692\u7694\u7695\u7697\u7698\u769A\u769B"], + ["b080", "\u769C", 7, "\u76A5", 8, "\u76AF\u76B0\u76B3\u76B5", 9, "\u76C0\u76C1\u76C3\u554A\u963F\u57C3\u6328\u54CE\u5509\u54C0\u7691\u764C\u853C\u77EE\u827E\u788D\u7231\u9698\u978D\u6C28\u5B89\u4FFA\u6309\u6697\u5CB8\u80FA\u6848\u80AE\u6602\u76CE\u51F9\u6556\u71AC\u7FF1\u8884\u50B2\u5965\u61CA\u6FB3\u82AD\u634C\u6252\u53ED\u5427\u7B06\u516B\u75A4\u5DF4\u62D4\u8DCB\u9776\u628A\u8019\u575D\u9738\u7F62\u7238\u767D\u67CF\u767E\u6446\u4F70\u8D25\u62DC\u7A17\u6591\u73ED\u642C\u6273\u822C\u9881\u677F\u7248\u626E\u62CC\u4F34\u74E3\u534A\u529E\u7ECA\u90A6\u5E2E\u6886\u699C\u8180\u7ED1\u68D2\u78C5\u868C\u9551\u508D\u8C24\u82DE\u80DE\u5305\u8912\u5265"], + ["b140", "\u76C4\u76C7\u76C9\u76CB\u76CC\u76D3\u76D5\u76D9\u76DA\u76DC\u76DD\u76DE\u76E0", 4, "\u76E6", 7, "\u76F0\u76F3\u76F5\u76F6\u76F7\u76FA\u76FB\u76FD\u76FF\u7700\u7702\u7703\u7705\u7706\u770A\u770C\u770E", 10, "\u771B\u771C\u771D\u771E\u7721\u7723\u7724\u7725\u7727\u772A\u772B"], + ["b180", "\u772C\u772E\u7730", 4, "\u7739\u773B\u773D\u773E\u773F\u7742\u7744\u7745\u7746\u7748", 7, "\u7752", 7, "\u775C\u8584\u96F9\u4FDD\u5821\u9971\u5B9D\u62B1\u62A5\u66B4\u8C79\u9C8D\u7206\u676F\u7891\u60B2\u5351\u5317\u8F88\u80CC\u8D1D\u94A1\u500D\u72C8\u5907\u60EB\u7119\u88AB\u5954\u82EF\u672C\u7B28\u5D29\u7EF7\u752D\u6CF5\u8E66\u8FF8\u903C\u9F3B\u6BD4\u9119\u7B14\u5F7C\u78A7\u84D6\u853D\u6BD5\u6BD9\u6BD6\u5E01\u5E87\u75F9\u95ED\u655D\u5F0A\u5FC5\u8F9F\u58C1\u81C2\u907F\u965B\u97AD\u8FB9\u7F16\u8D2C\u6241\u4FBF\u53D8\u535E\u8FA8\u8FA9\u8FAB\u904D\u6807\u5F6A\u8198\u8868\u9CD6\u618B\u522B\u762A\u5F6C\u658C\u6FD2\u6EE8\u5BBE\u6448\u5175\u51B0\u67C4\u4E19\u79C9\u997C\u70B3"], + ["b240", "\u775D\u775E\u775F\u7760\u7764\u7767\u7769\u776A\u776D", 11, "\u777A\u777B\u777C\u7781\u7782\u7783\u7786", 5, "\u778F\u7790\u7793", 11, "\u77A1\u77A3\u77A4\u77A6\u77A8\u77AB\u77AD\u77AE\u77AF\u77B1\u77B2\u77B4\u77B6", 4], + ["b280", "\u77BC\u77BE\u77C0", 12, "\u77CE", 8, "\u77D8\u77D9\u77DA\u77DD", 4, "\u77E4\u75C5\u5E76\u73BB\u83E0\u64AD\u62E8\u94B5\u6CE2\u535A\u52C3\u640F\u94C2\u7B94\u4F2F\u5E1B\u8236\u8116\u818A\u6E24\u6CCA\u9A73\u6355\u535C\u54FA\u8865\u57E0\u4E0D\u5E03\u6B65\u7C3F\u90E8\u6016\u64E6\u731C\u88C1\u6750\u624D\u8D22\u776C\u8E29\u91C7\u5F69\u83DC\u8521\u9910\u53C2\u8695\u6B8B\u60ED\u60E8\u707F\u82CD\u8231\u4ED3\u6CA7\u85CF\u64CD\u7CD9\u69FD\u66F9\u8349\u5395\u7B56\u4FA7\u518C\u6D4B\u5C42\u8E6D\u63D2\u53C9\u832C\u8336\u67E5\u78B4\u643D\u5BDF\u5C94\u5DEE\u8BE7\u62C6\u67F4\u8C7A\u6400\u63BA\u8749\u998B\u8C17\u7F20\u94F2\u4EA7\u9610\u98A4\u660C\u7316"], + ["b340", "\u77E6\u77E8\u77EA\u77EF\u77F0\u77F1\u77F2\u77F4\u77F5\u77F7\u77F9\u77FA\u77FB\u77FC\u7803", 5, "\u780A\u780B\u780E\u780F\u7810\u7813\u7815\u7819\u781B\u781E\u7820\u7821\u7822\u7824\u7828\u782A\u782B\u782E\u782F\u7831\u7832\u7833\u7835\u7836\u783D\u783F\u7841\u7842\u7843\u7844\u7846\u7848\u7849\u784A\u784B\u784D\u784F\u7851\u7853\u7854\u7858\u7859\u785A"], + ["b380", "\u785B\u785C\u785E", 11, "\u786F", 7, "\u7878\u7879\u787A\u787B\u787D", 6, "\u573A\u5C1D\u5E38\u957F\u507F\u80A0\u5382\u655E\u7545\u5531\u5021\u8D85\u6284\u949E\u671D\u5632\u6F6E\u5DE2\u5435\u7092\u8F66\u626F\u64A4\u63A3\u5F7B\u6F88\u90F4\u81E3\u8FB0\u5C18\u6668\u5FF1\u6C89\u9648\u8D81\u886C\u6491\u79F0\u57CE\u6A59\u6210\u5448\u4E58\u7A0B\u60E9\u6F84\u8BDA\u627F\u901E\u9A8B\u79E4\u5403\u75F4\u6301\u5319\u6C60\u8FDF\u5F1B\u9A70\u803B\u9F7F\u4F88\u5C3A\u8D64\u7FC5\u65A5\u70BD\u5145\u51B2\u866B\u5D07\u5BA0\u62BD\u916C\u7574\u8E0C\u7A20\u6101\u7B79\u4EC7\u7EF8\u7785\u4E11\u81ED\u521D\u51FA\u6A71\u53A8\u8E87\u9504\u96CF\u6EC1\u9664\u695A"], + ["b440", "\u7884\u7885\u7886\u7888\u788A\u788B\u788F\u7890\u7892\u7894\u7895\u7896\u7899\u789D\u789E\u78A0\u78A2\u78A4\u78A6\u78A8", 7, "\u78B5\u78B6\u78B7\u78B8\u78BA\u78BB\u78BC\u78BD\u78BF\u78C0\u78C2\u78C3\u78C4\u78C6\u78C7\u78C8\u78CC\u78CD\u78CE\u78CF\u78D1\u78D2\u78D3\u78D6\u78D7\u78D8\u78DA", 9], + ["b480", "\u78E4\u78E5\u78E6\u78E7\u78E9\u78EA\u78EB\u78ED", 4, "\u78F3\u78F5\u78F6\u78F8\u78F9\u78FB", 5, "\u7902\u7903\u7904\u7906", 6, "\u7840\u50A8\u77D7\u6410\u89E6\u5904\u63E3\u5DDD\u7A7F\u693D\u4F20\u8239\u5598\u4E32\u75AE\u7A97\u5E62\u5E8A\u95EF\u521B\u5439\u708A\u6376\u9524\u5782\u6625\u693F\u9187\u5507\u6DF3\u7EAF\u8822\u6233\u7EF0\u75B5\u8328\u78C1\u96CC\u8F9E\u6148\u74F7\u8BCD\u6B64\u523A\u8D50\u6B21\u806A\u8471\u56F1\u5306\u4ECE\u4E1B\u51D1\u7C97\u918B\u7C07\u4FC3\u8E7F\u7BE1\u7A9C\u6467\u5D14\u50AC\u8106\u7601\u7CB9\u6DEC\u7FE0\u6751\u5B58\u5BF8\u78CB\u64AE\u6413\u63AA\u632B\u9519\u642D\u8FBE\u7B54\u7629\u6253\u5927\u5446\u6B79\u50A3\u6234\u5E26\u6B86\u4EE3\u8D37\u888B\u5F85\u902E"], + ["b540", "\u790D", 5, "\u7914", 9, "\u791F", 4, "\u7925", 14, "\u7935", 4, "\u793D\u793F\u7942\u7943\u7944\u7945\u7947\u794A", 8, "\u7954\u7955\u7958\u7959\u7961\u7963"], + ["b580", "\u7964\u7966\u7969\u796A\u796B\u796C\u796E\u7970", 6, "\u7979\u797B", 4, "\u7982\u7983\u7986\u7987\u7988\u7989\u798B\u798C\u798D\u798E\u7990\u7991\u7992\u6020\u803D\u62C5\u4E39\u5355\u90F8\u63B8\u80C6\u65E6\u6C2E\u4F46\u60EE\u6DE1\u8BDE\u5F39\u86CB\u5F53\u6321\u515A\u8361\u6863\u5200\u6363\u8E48\u5012\u5C9B\u7977\u5BFC\u5230\u7A3B\u60BC\u9053\u76D7\u5FB7\u5F97\u7684\u8E6C\u706F\u767B\u7B49\u77AA\u51F3\u9093\u5824\u4F4E\u6EF4\u8FEA\u654C\u7B1B\u72C4\u6DA4\u7FDF\u5AE1\u62B5\u5E95\u5730\u8482\u7B2C\u5E1D\u5F1F\u9012\u7F14\u98A0\u6382\u6EC7\u7898\u70B9\u5178\u975B\u57AB\u7535\u4F43\u7538\u5E97\u60E6\u5960\u6DC0\u6BBF\u7889\u53FC\u96D5\u51CB\u5201\u6389\u540A\u9493\u8C03\u8DCC\u7239\u789F\u8776\u8FED\u8C0D\u53E0"], + ["b640", "\u7993", 6, "\u799B", 11, "\u79A8", 10, "\u79B4", 4, "\u79BC\u79BF\u79C2\u79C4\u79C5\u79C7\u79C8\u79CA\u79CC\u79CE\u79CF\u79D0\u79D3\u79D4\u79D6\u79D7\u79D9", 5, "\u79E0\u79E1\u79E2\u79E5\u79E8\u79EA"], + ["b680", "\u79EC\u79EE\u79F1", 6, "\u79F9\u79FA\u79FC\u79FE\u79FF\u7A01\u7A04\u7A05\u7A07\u7A08\u7A09\u7A0A\u7A0C\u7A0F", 4, "\u7A15\u7A16\u7A18\u7A19\u7A1B\u7A1C\u4E01\u76EF\u53EE\u9489\u9876\u9F0E\u952D\u5B9A\u8BA2\u4E22\u4E1C\u51AC\u8463\u61C2\u52A8\u680B\u4F97\u606B\u51BB\u6D1E\u515C\u6296\u6597\u9661\u8C46\u9017\u75D8\u90FD\u7763\u6BD2\u728A\u72EC\u8BFB\u5835\u7779\u8D4C\u675C\u9540\u809A\u5EA6\u6E21\u5992\u7AEF\u77ED\u953B\u6BB5\u65AD\u7F0E\u5806\u5151\u961F\u5BF9\u58A9\u5428\u8E72\u6566\u987F\u56E4\u949D\u76FE\u9041\u6387\u54C6\u591A\u593A\u579B\u8EB2\u6735\u8DFA\u8235\u5241\u60F0\u5815\u86FE\u5CE8\u9E45\u4FC4\u989D\u8BB9\u5A25\u6076\u5384\u627C\u904F\u9102\u997F\u6069\u800C\u513F\u8033\u5C14\u9975\u6D31\u4E8C"], + ["b740", "\u7A1D\u7A1F\u7A21\u7A22\u7A24", 14, "\u7A34\u7A35\u7A36\u7A38\u7A3A\u7A3E\u7A40", 5, "\u7A47", 9, "\u7A52", 4, "\u7A58", 16], + ["b780", "\u7A69", 6, "\u7A71\u7A72\u7A73\u7A75\u7A7B\u7A7C\u7A7D\u7A7E\u7A82\u7A85\u7A87\u7A89\u7A8A\u7A8B\u7A8C\u7A8E\u7A8F\u7A90\u7A93\u7A94\u7A99\u7A9A\u7A9B\u7A9E\u7AA1\u7AA2\u8D30\u53D1\u7F5A\u7B4F\u4F10\u4E4F\u9600\u6CD5\u73D0\u85E9\u5E06\u756A\u7FFB\u6A0A\u77FE\u9492\u7E41\u51E1\u70E6\u53CD\u8FD4\u8303\u8D29\u72AF\u996D\u6CDB\u574A\u82B3\u65B9\u80AA\u623F\u9632\u59A8\u4EFF\u8BBF\u7EBA\u653E\u83F2\u975E\u5561\u98DE\u80A5\u532A\u8BFD\u5420\u80BA\u5E9F\u6CB8\u8D39\u82AC\u915A\u5429\u6C1B\u5206\u7EB7\u575F\u711A\u6C7E\u7C89\u594B\u4EFD\u5FFF\u6124\u7CAA\u4E30\u5C01\u67AB\u8702\u5CF0\u950B\u98CE\u75AF\u70FD\u9022\u51AF\u7F1D\u8BBD\u5949\u51E4\u4F5B\u5426\u592B\u6577\u80A4\u5B75\u6276\u62C2\u8F90\u5E45\u6C1F\u7B26\u4F0F\u4FD8\u670D"], + ["b840", "\u7AA3\u7AA4\u7AA7\u7AA9\u7AAA\u7AAB\u7AAE", 4, "\u7AB4", 10, "\u7AC0", 10, "\u7ACC", 9, "\u7AD7\u7AD8\u7ADA\u7ADB\u7ADC\u7ADD\u7AE1\u7AE2\u7AE4\u7AE7", 5, "\u7AEE\u7AF0\u7AF1\u7AF2\u7AF3"], + ["b880", "\u7AF4", 4, "\u7AFB\u7AFC\u7AFE\u7B00\u7B01\u7B02\u7B05\u7B07\u7B09\u7B0C\u7B0D\u7B0E\u7B10\u7B12\u7B13\u7B16\u7B17\u7B18\u7B1A\u7B1C\u7B1D\u7B1F\u7B21\u7B22\u7B23\u7B27\u7B29\u7B2D\u6D6E\u6DAA\u798F\u88B1\u5F17\u752B\u629A\u8F85\u4FEF\u91DC\u65A7\u812F\u8151\u5E9C\u8150\u8D74\u526F\u8986\u8D4B\u590D\u5085\u4ED8\u961C\u7236\u8179\u8D1F\u5BCC\u8BA3\u9644\u5987\u7F1A\u5490\u5676\u560E\u8BE5\u6539\u6982\u9499\u76D6\u6E89\u5E72\u7518\u6746\u67D1\u7AFF\u809D\u8D76\u611F\u79C6\u6562\u8D63\u5188\u521A\u94A2\u7F38\u809B\u7EB2\u5C97\u6E2F\u6760\u7BD9\u768B\u9AD8\u818F\u7F94\u7CD5\u641E\u9550\u7A3F\u544A\u54E5\u6B4C\u6401\u6208\u9E3D\u80F3\u7599\u5272\u9769\u845B\u683C\u86E4\u9601\u9694\u94EC\u4E2A\u5404\u7ED9\u6839\u8DDF\u8015\u66F4\u5E9A\u7FB9"], + ["b940", "\u7B2F\u7B30\u7B32\u7B34\u7B35\u7B36\u7B37\u7B39\u7B3B\u7B3D\u7B3F", 5, "\u7B46\u7B48\u7B4A\u7B4D\u7B4E\u7B53\u7B55\u7B57\u7B59\u7B5C\u7B5E\u7B5F\u7B61\u7B63", 10, "\u7B6F\u7B70\u7B73\u7B74\u7B76\u7B78\u7B7A\u7B7C\u7B7D\u7B7F\u7B81\u7B82\u7B83\u7B84\u7B86", 6, "\u7B8E\u7B8F"], + ["b980", "\u7B91\u7B92\u7B93\u7B96\u7B98\u7B99\u7B9A\u7B9B\u7B9E\u7B9F\u7BA0\u7BA3\u7BA4\u7BA5\u7BAE\u7BAF\u7BB0\u7BB2\u7BB3\u7BB5\u7BB6\u7BB7\u7BB9", 7, "\u7BC2\u7BC3\u7BC4\u57C2\u803F\u6897\u5DE5\u653B\u529F\u606D\u9F9A\u4F9B\u8EAC\u516C\u5BAB\u5F13\u5DE9\u6C5E\u62F1\u8D21\u5171\u94A9\u52FE\u6C9F\u82DF\u72D7\u57A2\u6784\u8D2D\u591F\u8F9C\u83C7\u5495\u7B8D\u4F30\u6CBD\u5B64\u59D1\u9F13\u53E4\u86CA\u9AA8\u8C37\u80A1\u6545\u987E\u56FA\u96C7\u522E\u74DC\u5250\u5BE1\u6302\u8902\u4E56\u62D0\u602A\u68FA\u5173\u5B98\u51A0\u89C2\u7BA1\u9986\u7F50\u60EF\u704C\u8D2F\u5149\u5E7F\u901B\u7470\u89C4\u572D\u7845\u5F52\u9F9F\u95FA\u8F68\u9B3C\u8BE1\u7678\u6842\u67DC\u8DEA\u8D35\u523D\u8F8A\u6EDA\u68CD\u9505\u90ED\u56FD\u679C\u88F9\u8FC7\u54C8"], + ["ba40", "\u7BC5\u7BC8\u7BC9\u7BCA\u7BCB\u7BCD\u7BCE\u7BCF\u7BD0\u7BD2\u7BD4", 4, "\u7BDB\u7BDC\u7BDE\u7BDF\u7BE0\u7BE2\u7BE3\u7BE4\u7BE7\u7BE8\u7BE9\u7BEB\u7BEC\u7BED\u7BEF\u7BF0\u7BF2", 4, "\u7BF8\u7BF9\u7BFA\u7BFB\u7BFD\u7BFF", 7, "\u7C08\u7C09\u7C0A\u7C0D\u7C0E\u7C10", 5, "\u7C17\u7C18\u7C19"], + ["ba80", "\u7C1A", 4, "\u7C20", 5, "\u7C28\u7C29\u7C2B", 12, "\u7C39", 5, "\u7C42\u9AB8\u5B69\u6D77\u6C26\u4EA5\u5BB3\u9A87\u9163\u61A8\u90AF\u97E9\u542B\u6DB5\u5BD2\u51FD\u558A\u7F55\u7FF0\u64BC\u634D\u65F1\u61BE\u608D\u710A\u6C57\u6C49\u592F\u676D\u822A\u58D5\u568E\u8C6A\u6BEB\u90DD\u597D\u8017\u53F7\u6D69\u5475\u559D\u8377\u83CF\u6838\u79BE\u548C\u4F55\u5408\u76D2\u8C89\u9602\u6CB3\u6DB8\u8D6B\u8910\u9E64\u8D3A\u563F\u9ED1\u75D5\u5F88\u72E0\u6068\u54FC\u4EA8\u6A2A\u8861\u6052\u8F70\u54C4\u70D8\u8679\u9E3F\u6D2A\u5B8F\u5F18\u7EA2\u5589\u4FAF\u7334\u543C\u539A\u5019\u540E\u547C\u4E4E\u5FFD\u745A\u58F6\u846B\u80E1\u8774\u72D0\u7CCA\u6E56"], + ["bb40", "\u7C43", 9, "\u7C4E", 36, "\u7C75", 5, "\u7C7E", 9], + ["bb80", "\u7C88\u7C8A", 6, "\u7C93\u7C94\u7C96\u7C99\u7C9A\u7C9B\u7CA0\u7CA1\u7CA3\u7CA6\u7CA7\u7CA8\u7CA9\u7CAB\u7CAC\u7CAD\u7CAF\u7CB0\u7CB4", 4, "\u7CBA\u7CBB\u5F27\u864E\u552C\u62A4\u4E92\u6CAA\u6237\u82B1\u54D7\u534E\u733E\u6ED1\u753B\u5212\u5316\u8BDD\u69D0\u5F8A\u6000\u6DEE\u574F\u6B22\u73AF\u6853\u8FD8\u7F13\u6362\u60A3\u5524\u75EA\u8C62\u7115\u6DA3\u5BA6\u5E7B\u8352\u614C\u9EC4\u78FA\u8757\u7C27\u7687\u51F0\u60F6\u714C\u6643\u5E4C\u604D\u8C0E\u7070\u6325\u8F89\u5FBD\u6062\u86D4\u56DE\u6BC1\u6094\u6167\u5349\u60E0\u6666\u8D3F\u79FD\u4F1A\u70E9\u6C47\u8BB3\u8BF2\u7ED8\u8364\u660F\u5A5A\u9B42\u6D51\u6DF7\u8C41\u6D3B\u4F19\u706B\u83B7\u6216\u60D1\u970D\u8D27\u7978\u51FB\u573E\u57FA\u673A\u7578\u7A3D\u79EF\u7B95"], + ["bc40", "\u7CBF\u7CC0\u7CC2\u7CC3\u7CC4\u7CC6\u7CC9\u7CCB\u7CCE", 6, "\u7CD8\u7CDA\u7CDB\u7CDD\u7CDE\u7CE1", 6, "\u7CE9", 5, "\u7CF0", 7, "\u7CF9\u7CFA\u7CFC", 13, "\u7D0B", 5], + ["bc80", "\u7D11", 14, "\u7D21\u7D23\u7D24\u7D25\u7D26\u7D28\u7D29\u7D2A\u7D2C\u7D2D\u7D2E\u7D30", 6, "\u808C\u9965\u8FF9\u6FC0\u8BA5\u9E21\u59EC\u7EE9\u7F09\u5409\u6781\u68D8\u8F91\u7C4D\u96C6\u53CA\u6025\u75BE\u6C72\u5373\u5AC9\u7EA7\u6324\u51E0\u810A\u5DF1\u84DF\u6280\u5180\u5B63\u4F0E\u796D\u5242\u60B8\u6D4E\u5BC4\u5BC2\u8BA1\u8BB0\u65E2\u5FCC\u9645\u5993\u7EE7\u7EAA\u5609\u67B7\u5939\u4F73\u5BB6\u52A0\u835A\u988A\u8D3E\u7532\u94BE\u5047\u7A3C\u4EF7\u67B6\u9A7E\u5AC1\u6B7C\u76D1\u575A\u5C16\u7B3A\u95F4\u714E\u517C\u80A9\u8270\u5978\u7F04\u8327\u68C0\u67EC\u78B1\u7877\u62E3\u6361\u7B80\u4FED\u526A\u51CF\u8350\u69DB\u9274\u8DF5\u8D31\u89C1\u952E\u7BAD\u4EF6"], + ["bd40", "\u7D37", 54, "\u7D6F", 7], + ["bd80", "\u7D78", 32, "\u5065\u8230\u5251\u996F\u6E10\u6E85\u6DA7\u5EFA\u50F5\u59DC\u5C06\u6D46\u6C5F\u7586\u848B\u6868\u5956\u8BB2\u5320\u9171\u964D\u8549\u6912\u7901\u7126\u80F6\u4EA4\u90CA\u6D47\u9A84\u5A07\u56BC\u6405\u94F0\u77EB\u4FA5\u811A\u72E1\u89D2\u997A\u7F34\u7EDE\u527F\u6559\u9175\u8F7F\u8F83\u53EB\u7A96\u63ED\u63A5\u7686\u79F8\u8857\u9636\u622A\u52AB\u8282\u6854\u6770\u6377\u776B\u7AED\u6D01\u7ED3\u89E3\u59D0\u6212\u85C9\u82A5\u754C\u501F\u4ECB\u75A5\u8BEB\u5C4A\u5DFE\u7B4B\u65A4\u91D1\u4ECA\u6D25\u895F\u7D27\u9526\u4EC5\u8C28\u8FDB\u9773\u664B\u7981\u8FD1\u70EC\u6D78"], + ["be40", "\u7D99", 12, "\u7DA7", 6, "\u7DAF", 42], + ["be80", "\u7DDA", 32, "\u5C3D\u52B2\u8346\u5162\u830E\u775B\u6676\u9CB8\u4EAC\u60CA\u7CBE\u7CB3\u7ECF\u4E95\u8B66\u666F\u9888\u9759\u5883\u656C\u955C\u5F84\u75C9\u9756\u7ADF\u7ADE\u51C0\u70AF\u7A98\u63EA\u7A76\u7EA0\u7396\u97ED\u4E45\u7078\u4E5D\u9152\u53A9\u6551\u65E7\u81FC\u8205\u548E\u5C31\u759A\u97A0\u62D8\u72D9\u75BD\u5C45\u9A79\u83CA\u5C40\u5480\u77E9\u4E3E\u6CAE\u805A\u62D2\u636E\u5DE8\u5177\u8DDD\u8E1E\u952F\u4FF1\u53E5\u60E7\u70AC\u5267\u6350\u9E43\u5A1F\u5026\u7737\u5377\u7EE2\u6485\u652B\u6289\u6398\u5014\u7235\u89C9\u51B3\u8BC0\u7EDD\u5747\u83CC\u94A7\u519B\u541B\u5CFB"], + ["bf40", "\u7DFB", 62], + ["bf80", "\u7E3A\u7E3C", 4, "\u7E42", 4, "\u7E48", 21, "\u4FCA\u7AE3\u6D5A\u90E1\u9A8F\u5580\u5496\u5361\u54AF\u5F00\u63E9\u6977\u51EF\u6168\u520A\u582A\u52D8\u574E\u780D\u770B\u5EB7\u6177\u7CE0\u625B\u6297\u4EA2\u7095\u8003\u62F7\u70E4\u9760\u5777\u82DB\u67EF\u68F5\u78D5\u9897\u79D1\u58F3\u54B3\u53EF\u6E34\u514B\u523B\u5BA2\u8BFE\u80AF\u5543\u57A6\u6073\u5751\u542D\u7A7A\u6050\u5B54\u63A7\u62A0\u53E3\u6263\u5BC7\u67AF\u54ED\u7A9F\u82E6\u9177\u5E93\u88E4\u5938\u57AE\u630E\u8DE8\u80EF\u5757\u7B77\u4FA9\u5FEB\u5BBD\u6B3E\u5321\u7B50\u72C2\u6846\u77FF\u7736\u65F7\u51B5\u4E8F\u76D4\u5CBF\u7AA5\u8475\u594E\u9B41\u5080"], + ["c040", "\u7E5E", 35, "\u7E83", 23, "\u7E9C\u7E9D\u7E9E"], + ["c080", "\u7EAE\u7EB4\u7EBB\u7EBC\u7ED6\u7EE4\u7EEC\u7EF9\u7F0A\u7F10\u7F1E\u7F37\u7F39\u7F3B", 6, "\u7F43\u7F46", 9, "\u7F52\u7F53\u9988\u6127\u6E83\u5764\u6606\u6346\u56F0\u62EC\u6269\u5ED3\u9614\u5783\u62C9\u5587\u8721\u814A\u8FA3\u5566\u83B1\u6765\u8D56\u84DD\u5A6A\u680F\u62E6\u7BEE\u9611\u5170\u6F9C\u8C30\u63FD\u89C8\u61D2\u7F06\u70C2\u6EE5\u7405\u6994\u72FC\u5ECA\u90CE\u6717\u6D6A\u635E\u52B3\u7262\u8001\u4F6C\u59E5\u916A\u70D9\u6D9D\u52D2\u4E50\u96F7\u956D\u857E\u78CA\u7D2F\u5121\u5792\u64C2\u808B\u7C7B\u6CEA\u68F1\u695E\u51B7\u5398\u68A8\u7281\u9ECE\u7BF1\u72F8\u79BB\u6F13\u7406\u674E\u91CC\u9CA4\u793C\u8389\u8354\u540F\u6817\u4E3D\u5389\u52B1\u783E\u5386\u5229\u5088\u4F8B\u4FD0"], + ["c140", "\u7F56\u7F59\u7F5B\u7F5C\u7F5D\u7F5E\u7F60\u7F63", 4, "\u7F6B\u7F6C\u7F6D\u7F6F\u7F70\u7F73\u7F75\u7F76\u7F77\u7F78\u7F7A\u7F7B\u7F7C\u7F7D\u7F7F\u7F80\u7F82", 7, "\u7F8B\u7F8D\u7F8F", 4, "\u7F95", 4, "\u7F9B\u7F9C\u7FA0\u7FA2\u7FA3\u7FA5\u7FA6\u7FA8", 6, "\u7FB1"], + ["c180", "\u7FB3", 4, "\u7FBA\u7FBB\u7FBE\u7FC0\u7FC2\u7FC3\u7FC4\u7FC6\u7FC7\u7FC8\u7FC9\u7FCB\u7FCD\u7FCF", 4, "\u7FD6\u7FD7\u7FD9", 5, "\u7FE2\u7FE3\u75E2\u7ACB\u7C92\u6CA5\u96B6\u529B\u7483\u54E9\u4FE9\u8054\u83B2\u8FDE\u9570\u5EC9\u601C\u6D9F\u5E18\u655B\u8138\u94FE\u604B\u70BC\u7EC3\u7CAE\u51C9\u6881\u7CB1\u826F\u4E24\u8F86\u91CF\u667E\u4EAE\u8C05\u64A9\u804A\u50DA\u7597\u71CE\u5BE5\u8FBD\u6F66\u4E86\u6482\u9563\u5ED6\u6599\u5217\u88C2\u70C8\u52A3\u730E\u7433\u6797\u78F7\u9716\u4E34\u90BB\u9CDE\u6DCB\u51DB\u8D41\u541D\u62CE\u73B2\u83F1\u96F6\u9F84\u94C3\u4F36\u7F9A\u51CC\u7075\u9675\u5CAD\u9886\u53E6\u4EE4\u6E9C\u7409\u69B4\u786B\u998F\u7559\u5218\u7624\u6D41\u67F3\u516D\u9F99\u804B\u5499\u7B3C\u7ABF"], + ["c240", "\u7FE4\u7FE7\u7FE8\u7FEA\u7FEB\u7FEC\u7FED\u7FEF\u7FF2\u7FF4", 6, "\u7FFD\u7FFE\u7FFF\u8002\u8007\u8008\u8009\u800A\u800E\u800F\u8011\u8013\u801A\u801B\u801D\u801E\u801F\u8021\u8023\u8024\u802B", 5, "\u8032\u8034\u8039\u803A\u803C\u803E\u8040\u8041\u8044\u8045\u8047\u8048\u8049\u804E\u804F\u8050\u8051\u8053\u8055\u8056\u8057"], + ["c280", "\u8059\u805B", 13, "\u806B", 5, "\u8072", 11, "\u9686\u5784\u62E2\u9647\u697C\u5A04\u6402\u7BD3\u6F0F\u964B\u82A6\u5362\u9885\u5E90\u7089\u63B3\u5364\u864F\u9C81\u9E93\u788C\u9732\u8DEF\u8D42\u9E7F\u6F5E\u7984\u5F55\u9646\u622E\u9A74\u5415\u94DD\u4FA3\u65C5\u5C65\u5C61\u7F15\u8651\u6C2F\u5F8B\u7387\u6EE4\u7EFF\u5CE6\u631B\u5B6A\u6EE6\u5375\u4E71\u63A0\u7565\u62A1\u8F6E\u4F26\u4ED1\u6CA6\u7EB6\u8BBA\u841D\u87BA\u7F57\u903B\u9523\u7BA9\u9AA1\u88F8\u843D\u6D1B\u9A86\u7EDC\u5988\u9EBB\u739B\u7801\u8682\u9A6C\u9A82\u561B\u5417\u57CB\u4E70\u9EA6\u5356\u8FC8\u8109\u7792\u9992\u86EE\u6EE1\u8513\u66FC\u6162\u6F2B"], + ["c340", "\u807E\u8081\u8082\u8085\u8088\u808A\u808D", 5, "\u8094\u8095\u8097\u8099\u809E\u80A3\u80A6\u80A7\u80A8\u80AC\u80B0\u80B3\u80B5\u80B6\u80B8\u80B9\u80BB\u80C5\u80C7", 4, "\u80CF", 6, "\u80D8\u80DF\u80E0\u80E2\u80E3\u80E6\u80EE\u80F5\u80F7\u80F9\u80FB\u80FE\u80FF\u8100\u8101\u8103\u8104\u8105\u8107\u8108\u810B"], + ["c380", "\u810C\u8115\u8117\u8119\u811B\u811C\u811D\u811F", 12, "\u812D\u812E\u8130\u8133\u8134\u8135\u8137\u8139", 4, "\u813F\u8C29\u8292\u832B\u76F2\u6C13\u5FD9\u83BD\u732B\u8305\u951A\u6BDB\u77DB\u94C6\u536F\u8302\u5192\u5E3D\u8C8C\u8D38\u4E48\u73AB\u679A\u6885\u9176\u9709\u7164\u6CA1\u7709\u5A92\u9541\u6BCF\u7F8E\u6627\u5BD0\u59B9\u5A9A\u95E8\u95F7\u4EEC\u840C\u8499\u6AAC\u76DF\u9530\u731B\u68A6\u5B5F\u772F\u919A\u9761\u7CDC\u8FF7\u8C1C\u5F25\u7C73\u79D8\u89C5\u6CCC\u871C\u5BC6\u5E42\u68C9\u7720\u7EF5\u5195\u514D\u52C9\u5A29\u7F05\u9762\u82D7\u63CF\u7784\u85D0\u79D2\u6E3A\u5E99\u5999\u8511\u706D\u6C11\u62BF\u76BF\u654F\u60AF\u95FD\u660E\u879F\u9E23\u94ED\u540D\u547D\u8C2C\u6478"], + ["c440", "\u8140", 5, "\u8147\u8149\u814D\u814E\u814F\u8152\u8156\u8157\u8158\u815B", 4, "\u8161\u8162\u8163\u8164\u8166\u8168\u816A\u816B\u816C\u816F\u8172\u8173\u8175\u8176\u8177\u8178\u8181\u8183", 4, "\u8189\u818B\u818C\u818D\u818E\u8190\u8192", 5, "\u8199\u819A\u819E", 4, "\u81A4\u81A5"], + ["c480", "\u81A7\u81A9\u81AB", 7, "\u81B4", 5, "\u81BC\u81BD\u81BE\u81BF\u81C4\u81C5\u81C7\u81C8\u81C9\u81CB\u81CD", 6, "\u6479\u8611\u6A21\u819C\u78E8\u6469\u9B54\u62B9\u672B\u83AB\u58A8\u9ED8\u6CAB\u6F20\u5BDE\u964C\u8C0B\u725F\u67D0\u62C7\u7261\u4EA9\u59C6\u6BCD\u5893\u66AE\u5E55\u52DF\u6155\u6728\u76EE\u7766\u7267\u7A46\u62FF\u54EA\u5450\u94A0\u90A3\u5A1C\u7EB3\u6C16\u4E43\u5976\u8010\u5948\u5357\u7537\u96BE\u56CA\u6320\u8111\u607C\u95F9\u6DD6\u5462\u9981\u5185\u5AE9\u80FD\u59AE\u9713\u502A\u6CE5\u5C3C\u62DF\u4F60\u533F\u817B\u9006\u6EBA\u852B\u62C8\u5E74\u78BE\u64B5\u637B\u5FF5\u5A18\u917F\u9E1F\u5C3F\u634F\u8042\u5B7D\u556E\u954A\u954D\u6D85\u60A8\u67E0\u72DE\u51DD\u5B81"], + ["c540", "\u81D4", 14, "\u81E4\u81E5\u81E6\u81E8\u81E9\u81EB\u81EE", 4, "\u81F5", 5, "\u81FD\u81FF\u8203\u8207", 4, "\u820E\u820F\u8211\u8213\u8215", 5, "\u821D\u8220\u8224\u8225\u8226\u8227\u8229\u822E\u8232\u823A\u823C\u823D\u823F"], + ["c580", "\u8240\u8241\u8242\u8243\u8245\u8246\u8248\u824A\u824C\u824D\u824E\u8250", 7, "\u8259\u825B\u825C\u825D\u825E\u8260", 7, "\u8269\u62E7\u6CDE\u725B\u626D\u94AE\u7EBD\u8113\u6D53\u519C\u5F04\u5974\u52AA\u6012\u5973\u6696\u8650\u759F\u632A\u61E6\u7CEF\u8BFA\u54E6\u6B27\u9E25\u6BB4\u85D5\u5455\u5076\u6CA4\u556A\u8DB4\u722C\u5E15\u6015\u7436\u62CD\u6392\u724C\u5F98\u6E43\u6D3E\u6500\u6F58\u76D8\u78D0\u76FC\u7554\u5224\u53DB\u4E53\u5E9E\u65C1\u802A\u80D6\u629B\u5486\u5228\u70AE\u888D\u8DD1\u6CE1\u5478\u80DA\u57F9\u88F4\u8D54\u966A\u914D\u4F69\u6C9B\u55B7\u76C6\u7830\u62A8\u70F9\u6F8E\u5F6D\u84EC\u68DA\u787C\u7BF7\u81A8\u670B\u9E4F\u6367\u78B0\u576F\u7812\u9739\u6279\u62AB\u5288\u7435\u6BD7"], + ["c640", "\u826A\u826B\u826C\u826D\u8271\u8275\u8276\u8277\u8278\u827B\u827C\u8280\u8281\u8283\u8285\u8286\u8287\u8289\u828C\u8290\u8293\u8294\u8295\u8296\u829A\u829B\u829E\u82A0\u82A2\u82A3\u82A7\u82B2\u82B5\u82B6\u82BA\u82BB\u82BC\u82BF\u82C0\u82C2\u82C3\u82C5\u82C6\u82C9\u82D0\u82D6\u82D9\u82DA\u82DD\u82E2\u82E7\u82E8\u82E9\u82EA\u82EC\u82ED\u82EE\u82F0\u82F2\u82F3\u82F5\u82F6\u82F8"], + ["c680", "\u82FA\u82FC", 4, "\u830A\u830B\u830D\u8310\u8312\u8313\u8316\u8318\u8319\u831D", 9, "\u8329\u832A\u832E\u8330\u8332\u8337\u833B\u833D\u5564\u813E\u75B2\u76AE\u5339\u75DE\u50FB\u5C41\u8B6C\u7BC7\u504F\u7247\u9A97\u98D8\u6F02\u74E2\u7968\u6487\u77A5\u62FC\u9891\u8D2B\u54C1\u8058\u4E52\u576A\u82F9\u840D\u5E73\u51ED\u74F6\u8BC4\u5C4F\u5761\u6CFC\u9887\u5A46\u7834\u9B44\u8FEB\u7C95\u5256\u6251\u94FA\u4EC6\u8386\u8461\u83E9\u84B2\u57D4\u6734\u5703\u666E\u6D66\u8C31\u66DD\u7011\u671F\u6B3A\u6816\u621A\u59BB\u4E03\u51C4\u6F06\u67D2\u6C8F\u5176\u68CB\u5947\u6B67\u7566\u5D0E\u8110\u9F50\u65D7\u7948\u7941\u9A91\u8D77\u5C82\u4E5E\u4F01\u542F\u5951\u780C\u5668\u6C14\u8FC4\u5F03\u6C7D\u6CE3\u8BAB\u6390"], + ["c740", "\u833E\u833F\u8341\u8342\u8344\u8345\u8348\u834A", 4, "\u8353\u8355", 4, "\u835D\u8362\u8370", 6, "\u8379\u837A\u837E", 6, "\u8387\u8388\u838A\u838B\u838C\u838D\u838F\u8390\u8391\u8394\u8395\u8396\u8397\u8399\u839A\u839D\u839F\u83A1", 6, "\u83AC\u83AD\u83AE"], + ["c780", "\u83AF\u83B5\u83BB\u83BE\u83BF\u83C2\u83C3\u83C4\u83C6\u83C8\u83C9\u83CB\u83CD\u83CE\u83D0\u83D1\u83D2\u83D3\u83D5\u83D7\u83D9\u83DA\u83DB\u83DE\u83E2\u83E3\u83E4\u83E6\u83E7\u83E8\u83EB\u83EC\u83ED\u6070\u6D3D\u7275\u6266\u948E\u94C5\u5343\u8FC1\u7B7E\u4EDF\u8C26\u4E7E\u9ED4\u94B1\u94B3\u524D\u6F5C\u9063\u6D45\u8C34\u5811\u5D4C\u6B20\u6B49\u67AA\u545B\u8154\u7F8C\u5899\u8537\u5F3A\u62A2\u6A47\u9539\u6572\u6084\u6865\u77A7\u4E54\u4FA8\u5DE7\u9798\u64AC\u7FD8\u5CED\u4FCF\u7A8D\u5207\u8304\u4E14\u602F\u7A83\u94A6\u4FB5\u4EB2\u79E6\u7434\u52E4\u82B9\u64D2\u79BD\u5BDD\u6C81\u9752\u8F7B\u6C22\u503E\u537F\u6E05\u64CE\u6674\u6C30\u60C5\u9877\u8BF7\u5E86\u743C\u7A77\u79CB\u4E18\u90B1\u7403\u6C42\u56DA\u914B\u6CC5\u8D8B\u533A\u86C6\u66F2\u8EAF\u5C48\u9A71\u6E20"], + ["c840", "\u83EE\u83EF\u83F3", 4, "\u83FA\u83FB\u83FC\u83FE\u83FF\u8400\u8402\u8405\u8407\u8408\u8409\u840A\u8410\u8412", 5, "\u8419\u841A\u841B\u841E", 5, "\u8429", 7, "\u8432", 5, "\u8439\u843A\u843B\u843E", 7, "\u8447\u8448\u8449"], + ["c880", "\u844A", 6, "\u8452", 4, "\u8458\u845D\u845E\u845F\u8460\u8462\u8464", 4, "\u846A\u846E\u846F\u8470\u8472\u8474\u8477\u8479\u847B\u847C\u53D6\u5A36\u9F8B\u8DA3\u53BB\u5708\u98A7\u6743\u919B\u6CC9\u5168\u75CA\u62F3\u72AC\u5238\u529D\u7F3A\u7094\u7638\u5374\u9E4A\u69B7\u786E\u96C0\u88D9\u7FA4\u7136\u71C3\u5189\u67D3\u74E4\u58E4\u6518\u56B7\u8BA9\u9976\u6270\u7ED5\u60F9\u70ED\u58EC\u4EC1\u4EBA\u5FCD\u97E7\u4EFB\u8BA4\u5203\u598A\u7EAB\u6254\u4ECD\u65E5\u620E\u8338\u84C9\u8363\u878D\u7194\u6EB6\u5BB9\u7ED2\u5197\u63C9\u67D4\u8089\u8339\u8815\u5112\u5B7A\u5982\u8FB1\u4E73\u6C5D\u5165\u8925\u8F6F\u962E\u854A\u745E\u9510\u95F0\u6DA6\u82E5\u5F31\u6492\u6D12\u8428\u816E\u9CC3\u585E\u8D5B\u4E09\u53C1"], + ["c940", "\u847D", 4, "\u8483\u8484\u8485\u8486\u848A\u848D\u848F", 7, "\u8498\u849A\u849B\u849D\u849E\u849F\u84A0\u84A2", 12, "\u84B0\u84B1\u84B3\u84B5\u84B6\u84B7\u84BB\u84BC\u84BE\u84C0\u84C2\u84C3\u84C5\u84C6\u84C7\u84C8\u84CB\u84CC\u84CE\u84CF\u84D2\u84D4\u84D5\u84D7"], + ["c980", "\u84D8", 4, "\u84DE\u84E1\u84E2\u84E4\u84E7", 4, "\u84ED\u84EE\u84EF\u84F1", 10, "\u84FD\u84FE\u8500\u8501\u8502\u4F1E\u6563\u6851\u55D3\u4E27\u6414\u9A9A\u626B\u5AC2\u745F\u8272\u6DA9\u68EE\u50E7\u838E\u7802\u6740\u5239\u6C99\u7EB1\u50BB\u5565\u715E\u7B5B\u6652\u73CA\u82EB\u6749\u5C71\u5220\u717D\u886B\u95EA\u9655\u64C5\u8D61\u81B3\u5584\u6C55\u6247\u7F2E\u5892\u4F24\u5546\u8D4F\u664C\u4E0A\u5C1A\u88F3\u68A2\u634E\u7A0D\u70E7\u828D\u52FA\u97F6\u5C11\u54E8\u90B5\u7ECD\u5962\u8D4A\u86C7\u820C\u820D\u8D66\u6444\u5C04\u6151\u6D89\u793E\u8BBE\u7837\u7533\u547B\u4F38\u8EAB\u6DF1\u5A20\u7EC5\u795E\u6C88\u5BA1\u5A76\u751A\u80BE\u614E\u6E17\u58F0\u751F\u7525\u7272\u5347\u7EF3"], + ["ca40", "\u8503", 8, "\u850D\u850E\u850F\u8510\u8512\u8514\u8515\u8516\u8518\u8519\u851B\u851C\u851D\u851E\u8520\u8522", 8, "\u852D", 9, "\u853E", 4, "\u8544\u8545\u8546\u8547\u854B", 10], + ["ca80", "\u8557\u8558\u855A\u855B\u855C\u855D\u855F", 4, "\u8565\u8566\u8567\u8569", 8, "\u8573\u8575\u8576\u8577\u8578\u857C\u857D\u857F\u8580\u8581\u7701\u76DB\u5269\u80DC\u5723\u5E08\u5931\u72EE\u65BD\u6E7F\u8BD7\u5C38\u8671\u5341\u77F3\u62FE\u65F6\u4EC0\u98DF\u8680\u5B9E\u8BC6\u53F2\u77E2\u4F7F\u5C4E\u9A76\u59CB\u5F0F\u793A\u58EB\u4E16\u67FF\u4E8B\u62ED\u8A93\u901D\u52BF\u662F\u55DC\u566C\u9002\u4ED5\u4F8D\u91CA\u9970\u6C0F\u5E02\u6043\u5BA4\u89C6\u8BD5\u6536\u624B\u9996\u5B88\u5BFF\u6388\u552E\u53D7\u7626\u517D\u852C\u67A2\u68B3\u6B8A\u6292\u8F93\u53D4\u8212\u6DD1\u758F\u4E66\u8D4E\u5B70\u719F\u85AF\u6691\u66D9\u7F72\u8700\u9ECD\u9F20\u5C5E\u672F\u8FF0\u6811\u675F\u620D\u7AD6\u5885\u5EB6\u6570\u6F31"], + ["cb40", "\u8582\u8583\u8586\u8588", 6, "\u8590", 10, "\u859D", 6, "\u85A5\u85A6\u85A7\u85A9\u85AB\u85AC\u85AD\u85B1", 5, "\u85B8\u85BA", 6, "\u85C2", 6, "\u85CA", 4, "\u85D1\u85D2"], + ["cb80", "\u85D4\u85D6", 5, "\u85DD", 6, "\u85E5\u85E6\u85E7\u85E8\u85EA", 14, "\u6055\u5237\u800D\u6454\u8870\u7529\u5E05\u6813\u62F4\u971C\u53CC\u723D\u8C01\u6C34\u7761\u7A0E\u542E\u77AC\u987A\u821C\u8BF4\u7855\u6714\u70C1\u65AF\u6495\u5636\u601D\u79C1\u53F8\u4E1D\u6B7B\u8086\u5BFA\u55E3\u56DB\u4F3A\u4F3C\u9972\u5DF3\u677E\u8038\u6002\u9882\u9001\u5B8B\u8BBC\u8BF5\u641C\u8258\u64DE\u55FD\u82CF\u9165\u4FD7\u7D20\u901F\u7C9F\u50F3\u5851\u6EAF\u5BBF\u8BC9\u8083\u9178\u849C\u7B97\u867D\u968B\u968F\u7EE5\u9AD3\u788E\u5C81\u7A57\u9042\u96A7\u795F\u5B59\u635F\u7B0B\u84D1\u68AD\u5506\u7F29\u7410\u7D22\u9501\u6240\u584C\u4ED6\u5B83\u5979\u5854"], + ["cc40", "\u85F9\u85FA\u85FC\u85FD\u85FE\u8600", 4, "\u8606", 10, "\u8612\u8613\u8614\u8615\u8617", 15, "\u8628\u862A", 13, "\u8639\u863A\u863B\u863D\u863E\u863F\u8640"], + ["cc80", "\u8641", 11, "\u8652\u8653\u8655", 4, "\u865B\u865C\u865D\u865F\u8660\u8661\u8663", 7, "\u736D\u631E\u8E4B\u8E0F\u80CE\u82D4\u62AC\u53F0\u6CF0\u915E\u592A\u6001\u6C70\u574D\u644A\u8D2A\u762B\u6EE9\u575B\u6A80\u75F0\u6F6D\u8C2D\u8C08\u5766\u6BEF\u8892\u78B3\u63A2\u53F9\u70AD\u6C64\u5858\u642A\u5802\u68E0\u819B\u5510\u7CD6\u5018\u8EBA\u6DCC\u8D9F\u70EB\u638F\u6D9B\u6ED4\u7EE6\u8404\u6843\u9003\u6DD8\u9676\u8BA8\u5957\u7279\u85E4\u817E\u75BC\u8A8A\u68AF\u5254\u8E22\u9511\u63D0\u9898\u8E44\u557C\u4F53\u66FF\u568F\u60D5\u6D95\u5243\u5C49\u5929\u6DFB\u586B\u7530\u751C\u606C\u8214\u8146\u6311\u6761\u8FE2\u773A\u8DF3\u8D34\u94C1\u5E16\u5385\u542C\u70C3"], + ["cd40", "\u866D\u866F\u8670\u8672", 6, "\u8683", 6, "\u868E", 4, "\u8694\u8696", 5, "\u869E", 4, "\u86A5\u86A6\u86AB\u86AD\u86AE\u86B2\u86B3\u86B7\u86B8\u86B9\u86BB", 4, "\u86C1\u86C2\u86C3\u86C5\u86C8\u86CC\u86CD\u86D2\u86D3\u86D5\u86D6\u86D7\u86DA\u86DC"], + ["cd80", "\u86DD\u86E0\u86E1\u86E2\u86E3\u86E5\u86E6\u86E7\u86E8\u86EA\u86EB\u86EC\u86EF\u86F5\u86F6\u86F7\u86FA\u86FB\u86FC\u86FD\u86FF\u8701\u8704\u8705\u8706\u870B\u870C\u870E\u870F\u8710\u8711\u8714\u8716\u6C40\u5EF7\u505C\u4EAD\u5EAD\u633A\u8247\u901A\u6850\u916E\u77B3\u540C\u94DC\u5F64\u7AE5\u6876\u6345\u7B52\u7EDF\u75DB\u5077\u6295\u5934\u900F\u51F8\u79C3\u7A81\u56FE\u5F92\u9014\u6D82\u5C60\u571F\u5410\u5154\u6E4D\u56E2\u63A8\u9893\u817F\u8715\u892A\u9000\u541E\u5C6F\u81C0\u62D6\u6258\u8131\u9E35\u9640\u9A6E\u9A7C\u692D\u59A5\u62D3\u553E\u6316\u54C7\u86D9\u6D3C\u5A03\u74E6\u889C\u6B6A\u5916\u8C4C\u5F2F\u6E7E\u73A9\u987D\u4E38\u70F7\u5B8C\u7897\u633D\u665A\u7696\u60CB\u5B9B\u5A49\u4E07\u8155\u6C6A\u738B\u4EA1\u6789\u7F51\u5F80\u65FA\u671B\u5FD8\u5984\u5A01"], + ["ce40", "\u8719\u871B\u871D\u871F\u8720\u8724\u8726\u8727\u8728\u872A\u872B\u872C\u872D\u872F\u8730\u8732\u8733\u8735\u8736\u8738\u8739\u873A\u873C\u873D\u8740", 6, "\u874A\u874B\u874D\u874F\u8750\u8751\u8752\u8754\u8755\u8756\u8758\u875A", 5, "\u8761\u8762\u8766", 7, "\u876F\u8771\u8772\u8773\u8775"], + ["ce80", "\u8777\u8778\u8779\u877A\u877F\u8780\u8781\u8784\u8786\u8787\u8789\u878A\u878C\u878E", 4, "\u8794\u8795\u8796\u8798", 6, "\u87A0", 4, "\u5DCD\u5FAE\u5371\u97E6\u8FDD\u6845\u56F4\u552F\u60DF\u4E3A\u6F4D\u7EF4\u82C7\u840E\u59D4\u4F1F\u4F2A\u5C3E\u7EAC\u672A\u851A\u5473\u754F\u80C3\u5582\u9B4F\u4F4D\u6E2D\u8C13\u5C09\u6170\u536B\u761F\u6E29\u868A\u6587\u95FB\u7EB9\u543B\u7A33\u7D0A\u95EE\u55E1\u7FC1\u74EE\u631D\u8717\u6DA1\u7A9D\u6211\u65A1\u5367\u63E1\u6C83\u5DEB\u545C\u94A8\u4E4C\u6C61\u8BEC\u5C4B\u65E0\u829C\u68A7\u543E\u5434\u6BCB\u6B66\u4E94\u6342\u5348\u821E\u4F0D\u4FAE\u575E\u620A\u96FE\u6664\u7269\u52FF\u52A1\u609F\u8BEF\u6614\u7199\u6790\u897F\u7852\u77FD\u6670\u563B\u5438\u9521\u727A"], + ["cf40", "\u87A5\u87A6\u87A7\u87A9\u87AA\u87AE\u87B0\u87B1\u87B2\u87B4\u87B6\u87B7\u87B8\u87B9\u87BB\u87BC\u87BE\u87BF\u87C1", 4, "\u87C7\u87C8\u87C9\u87CC", 4, "\u87D4", 6, "\u87DC\u87DD\u87DE\u87DF\u87E1\u87E2\u87E3\u87E4\u87E6\u87E7\u87E8\u87E9\u87EB\u87EC\u87ED\u87EF", 9], + ["cf80", "\u87FA\u87FB\u87FC\u87FD\u87FF\u8800\u8801\u8802\u8804", 5, "\u880B", 7, "\u8814\u8817\u8818\u8819\u881A\u881C", 4, "\u8823\u7A00\u606F\u5E0C\u6089\u819D\u5915\u60DC\u7184\u70EF\u6EAA\u6C50\u7280\u6A84\u88AD\u5E2D\u4E60\u5AB3\u559C\u94E3\u6D17\u7CFB\u9699\u620F\u7EC6\u778E\u867E\u5323\u971E\u8F96\u6687\u5CE1\u4FA0\u72ED\u4E0B\u53A6\u590F\u5413\u6380\u9528\u5148\u4ED9\u9C9C\u7EA4\u54B8\u8D24\u8854\u8237\u95F2\u6D8E\u5F26\u5ACC\u663E\u9669\u73B0\u732E\u53BF\u817A\u9985\u7FA1\u5BAA\u9677\u9650\u7EBF\u76F8\u53A2\u9576\u9999\u7BB1\u8944\u6E58\u4E61\u7FD4\u7965\u8BE6\u60F3\u54CD\u4EAB\u9879\u5DF7\u6A61\u50CF\u5411\u8C61\u8427\u785D\u9704\u524A\u54EE\u56A3\u9500\u6D88\u5BB5\u6DC6\u6653"], + ["d040", "\u8824", 13, "\u8833", 5, "\u883A\u883B\u883D\u883E\u883F\u8841\u8842\u8843\u8846", 5, "\u884E", 5, "\u8855\u8856\u8858\u885A", 6, "\u8866\u8867\u886A\u886D\u886F\u8871\u8873\u8874\u8875\u8876\u8878\u8879\u887A"], + ["d080", "\u887B\u887C\u8880\u8883\u8886\u8887\u8889\u888A\u888C\u888E\u888F\u8890\u8891\u8893\u8894\u8895\u8897", 4, "\u889D", 4, "\u88A3\u88A5", 5, "\u5C0F\u5B5D\u6821\u8096\u5578\u7B11\u6548\u6954\u4E9B\u6B47\u874E\u978B\u534F\u631F\u643A\u90AA\u659C\u80C1\u8C10\u5199\u68B0\u5378\u87F9\u61C8\u6CC4\u6CFB\u8C22\u5C51\u85AA\u82AF\u950C\u6B23\u8F9B\u65B0\u5FFB\u5FC3\u4FE1\u8845\u661F\u8165\u7329\u60FA\u5174\u5211\u578B\u5F62\u90A2\u884C\u9192\u5E78\u674F\u6027\u59D3\u5144\u51F6\u80F8\u5308\u6C79\u96C4\u718A\u4F11\u4FEE\u7F9E\u673D\u55C5\u9508\u79C0\u8896\u7EE3\u589F\u620C\u9700\u865A\u5618\u987B\u5F90\u8BB8\u84C4\u9157\u53D9\u65ED\u5E8F\u755C\u6064\u7D6E\u5A7F\u7EEA\u7EED\u8F69\u55A7\u5BA3\u60AC\u65CB\u7384"], + ["d140", "\u88AC\u88AE\u88AF\u88B0\u88B2", 4, "\u88B8\u88B9\u88BA\u88BB\u88BD\u88BE\u88BF\u88C0\u88C3\u88C4\u88C7\u88C8\u88CA\u88CB\u88CC\u88CD\u88CF\u88D0\u88D1\u88D3\u88D6\u88D7\u88DA", 4, "\u88E0\u88E1\u88E6\u88E7\u88E9", 6, "\u88F2\u88F5\u88F6\u88F7\u88FA\u88FB\u88FD\u88FF\u8900\u8901\u8903", 5], + ["d180", "\u8909\u890B", 4, "\u8911\u8914", 4, "\u891C", 4, "\u8922\u8923\u8924\u8926\u8927\u8928\u8929\u892C\u892D\u892E\u892F\u8931\u8932\u8933\u8935\u8937\u9009\u7663\u7729\u7EDA\u9774\u859B\u5B66\u7A74\u96EA\u8840\u52CB\u718F\u5FAA\u65EC\u8BE2\u5BFB\u9A6F\u5DE1\u6B89\u6C5B\u8BAD\u8BAF\u900A\u8FC5\u538B\u62BC\u9E26\u9E2D\u5440\u4E2B\u82BD\u7259\u869C\u5D16\u8859\u6DAF\u96C5\u54D1\u4E9A\u8BB6\u7109\u54BD\u9609\u70DF\u6DF9\u76D0\u4E25\u7814\u8712\u5CA9\u5EF6\u8A00\u989C\u960E\u708E\u6CBF\u5944\u63A9\u773C\u884D\u6F14\u8273\u5830\u71D5\u538C\u781A\u96C1\u5501\u5F66\u7130\u5BB4\u8C1A\u9A8C\u6B83\u592E\u9E2F\u79E7\u6768\u626C\u4F6F\u75A1\u7F8A\u6D0B\u9633\u6C27\u4EF0\u75D2\u517B\u6837\u6F3E\u9080\u8170\u5996\u7476"], + ["d240", "\u8938", 8, "\u8942\u8943\u8945", 24, "\u8960", 5, "\u8967", 19, "\u897C"], + ["d280", "\u897D\u897E\u8980\u8982\u8984\u8985\u8987", 26, "\u6447\u5C27\u9065\u7A91\u8C23\u59DA\u54AC\u8200\u836F\u8981\u8000\u6930\u564E\u8036\u7237\u91CE\u51B6\u4E5F\u9875\u6396\u4E1A\u53F6\u66F3\u814B\u591C\u6DB2\u4E00\u58F9\u533B\u63D6\u94F1\u4F9D\u4F0A\u8863\u9890\u5937\u9057\u79FB\u4EEA\u80F0\u7591\u6C82\u5B9C\u59E8\u5F5D\u6905\u8681\u501A\u5DF2\u4E59\u77E3\u4EE5\u827A\u6291\u6613\u9091\u5C79\u4EBF\u5F79\u81C6\u9038\u8084\u75AB\u4EA6\u88D4\u610F\u6BC5\u5FC6\u4E49\u76CA\u6EA2\u8BE3\u8BAE\u8C0A\u8BD1\u5F02\u7FFC\u7FCC\u7ECE\u8335\u836B\u56E0\u6BB7\u97F3\u9634\u59FB\u541F\u94F6\u6DEB\u5BC5\u996E\u5C39\u5F15\u9690"], + ["d340", "\u89A2", 30, "\u89C3\u89CD\u89D3\u89D4\u89D5\u89D7\u89D8\u89D9\u89DB\u89DD\u89DF\u89E0\u89E1\u89E2\u89E4\u89E7\u89E8\u89E9\u89EA\u89EC\u89ED\u89EE\u89F0\u89F1\u89F2\u89F4", 6], + ["d380", "\u89FB", 4, "\u8A01", 5, "\u8A08", 21, "\u5370\u82F1\u6A31\u5A74\u9E70\u5E94\u7F28\u83B9\u8424\u8425\u8367\u8747\u8FCE\u8D62\u76C8\u5F71\u9896\u786C\u6620\u54DF\u62E5\u4F63\u81C3\u75C8\u5EB8\u96CD\u8E0A\u86F9\u548F\u6CF3\u6D8C\u6C38\u607F\u52C7\u7528\u5E7D\u4F18\u60A0\u5FE7\u5C24\u7531\u90AE\u94C0\u72B9\u6CB9\u6E38\u9149\u6709\u53CB\u53F3\u4F51\u91C9\u8BF1\u53C8\u5E7C\u8FC2\u6DE4\u4E8E\u76C2\u6986\u865E\u611A\u8206\u4F59\u4FDE\u903E\u9C7C\u6109\u6E1D\u6E14\u9685\u4E88\u5A31\u96E8\u4E0E\u5C7F\u79B9\u5B87\u8BED\u7FBD\u7389\u57DF\u828B\u90C1\u5401\u9047\u55BB\u5CEA\u5FA1\u6108\u6B32\u72F1\u80B2\u8A89"], + ["d440", "\u8A1E", 31, "\u8A3F", 8, "\u8A49", 21], + ["d480", "\u8A5F", 25, "\u8A7A", 6, "\u6D74\u5BD3\u88D5\u9884\u8C6B\u9A6D\u9E33\u6E0A\u51A4\u5143\u57A3\u8881\u539F\u63F4\u8F95\u56ED\u5458\u5706\u733F\u6E90\u7F18\u8FDC\u82D1\u613F\u6028\u9662\u66F0\u7EA6\u8D8A\u8DC3\u94A5\u5CB3\u7CA4\u6708\u60A6\u9605\u8018\u4E91\u90E7\u5300\u9668\u5141\u8FD0\u8574\u915D\u6655\u97F5\u5B55\u531D\u7838\u6742\u683D\u54C9\u707E\u5BB0\u8F7D\u518D\u5728\u54B1\u6512\u6682\u8D5E\u8D43\u810F\u846C\u906D\u7CDF\u51FF\u85FB\u67A3\u65E9\u6FA1\u86A4\u8E81\u566A\u9020\u7682\u7076\u71E5\u8D23\u62E9\u5219\u6CFD\u8D3C\u600E\u589E\u618E\u66FE\u8D60\u624E\u55B3\u6E23\u672D\u8F67"], + ["d540", "\u8A81", 7, "\u8A8B", 7, "\u8A94", 46], + ["d580", "\u8AC3", 32, "\u94E1\u95F8\u7728\u6805\u69A8\u548B\u4E4D\u70B8\u8BC8\u6458\u658B\u5B85\u7A84\u503A\u5BE8\u77BB\u6BE1\u8A79\u7C98\u6CBE\u76CF\u65A9\u8F97\u5D2D\u5C55\u8638\u6808\u5360\u6218\u7AD9\u6E5B\u7EFD\u6A1F\u7AE0\u5F70\u6F33\u5F20\u638C\u6DA8\u6756\u4E08\u5E10\u8D26\u4ED7\u80C0\u7634\u969C\u62DB\u662D\u627E\u6CBC\u8D75\u7167\u7F69\u5146\u8087\u53EC\u906E\u6298\u54F2\u86F0\u8F99\u8005\u9517\u8517\u8FD9\u6D59\u73CD\u659F\u771F\u7504\u7827\u81FB\u8D1E\u9488\u4FA6\u6795\u75B9\u8BCA\u9707\u632F\u9547\u9635\u84B8\u6323\u7741\u5F81\u72F0\u4E89\u6014\u6574\u62EF\u6B63\u653F"], + ["d640", "\u8AE4", 34, "\u8B08", 27], + ["d680", "\u8B24\u8B25\u8B27", 30, "\u5E27\u75C7\u90D1\u8BC1\u829D\u679D\u652F\u5431\u8718\u77E5\u80A2\u8102\u6C41\u4E4B\u7EC7\u804C\u76F4\u690D\u6B96\u6267\u503C\u4F84\u5740\u6307\u6B62\u8DBE\u53EA\u65E8\u7EB8\u5FD7\u631A\u63B7\u81F3\u81F4\u7F6E\u5E1C\u5CD9\u5236\u667A\u79E9\u7A1A\u8D28\u7099\u75D4\u6EDE\u6CBB\u7A92\u4E2D\u76C5\u5FE0\u949F\u8877\u7EC8\u79CD\u80BF\u91CD\u4EF2\u4F17\u821F\u5468\u5DDE\u6D32\u8BCC\u7CA5\u8F74\u8098\u5E1A\u5492\u76B1\u5B99\u663C\u9AA4\u73E0\u682A\u86DB\u6731\u732A\u8BF8\u8BDB\u9010\u7AF9\u70DB\u716E\u62C4\u77A9\u5631\u4E3B\u8457\u67F1\u52A9\u86C0\u8D2E\u94F8\u7B51"], + ["d740", "\u8B46", 31, "\u8B67", 4, "\u8B6D", 25], + ["d780", "\u8B87", 24, "\u8BAC\u8BB1\u8BBB\u8BC7\u8BD0\u8BEA\u8C09\u8C1E\u4F4F\u6CE8\u795D\u9A7B\u6293\u722A\u62FD\u4E13\u7816\u8F6C\u64B0\u8D5A\u7BC6\u6869\u5E84\u88C5\u5986\u649E\u58EE\u72B6\u690E\u9525\u8FFD\u8D58\u5760\u7F00\u8C06\u51C6\u6349\u62D9\u5353\u684C\u7422\u8301\u914C\u5544\u7740\u707C\u6D4A\u5179\u54A8\u8D44\u59FF\u6ECB\u6DC4\u5B5C\u7D2B\u4ED4\u7C7D\u6ED3\u5B50\u81EA\u6E0D\u5B57\u9B03\u68D5\u8E2A\u5B97\u7EFC\u603B\u7EB5\u90B9\u8D70\u594F\u63CD\u79DF\u8DB3\u5352\u65CF\u7956\u8BC5\u963B\u7EC4\u94BB\u7E82\u5634\u9189\u6700\u7F6A\u5C0A\u9075\u6628\u5DE6\u4F50\u67DE\u505A\u4F5C\u5750\u5EA7"], + ["d840", "\u8C38", 8, "\u8C42\u8C43\u8C44\u8C45\u8C48\u8C4A\u8C4B\u8C4D", 7, "\u8C56\u8C57\u8C58\u8C59\u8C5B", 5, "\u8C63", 6, "\u8C6C", 6, "\u8C74\u8C75\u8C76\u8C77\u8C7B", 6, "\u8C83\u8C84\u8C86\u8C87"], + ["d880", "\u8C88\u8C8B\u8C8D", 6, "\u8C95\u8C96\u8C97\u8C99", 20, "\u4E8D\u4E0C\u5140\u4E10\u5EFF\u5345\u4E15\u4E98\u4E1E\u9B32\u5B6C\u5669\u4E28\u79BA\u4E3F\u5315\u4E47\u592D\u723B\u536E\u6C10\u56DF\u80E4\u9997\u6BD3\u777E\u9F17\u4E36\u4E9F\u9F10\u4E5C\u4E69\u4E93\u8288\u5B5B\u556C\u560F\u4EC4\u538D\u539D\u53A3\u53A5\u53AE\u9765\u8D5D\u531A\u53F5\u5326\u532E\u533E\u8D5C\u5366\u5363\u5202\u5208\u520E\u522D\u5233\u523F\u5240\u524C\u525E\u5261\u525C\u84AF\u527D\u5282\u5281\u5290\u5293\u5182\u7F54\u4EBB\u4EC3\u4EC9\u4EC2\u4EE8\u4EE1\u4EEB\u4EDE\u4F1B\u4EF3\u4F22\u4F64\u4EF5\u4F25\u4F27\u4F09\u4F2B\u4F5E\u4F67\u6538\u4F5A\u4F5D"], + ["d940", "\u8CAE", 62], + ["d980", "\u8CED", 32, "\u4F5F\u4F57\u4F32\u4F3D\u4F76\u4F74\u4F91\u4F89\u4F83\u4F8F\u4F7E\u4F7B\u4FAA\u4F7C\u4FAC\u4F94\u4FE6\u4FE8\u4FEA\u4FC5\u4FDA\u4FE3\u4FDC\u4FD1\u4FDF\u4FF8\u5029\u504C\u4FF3\u502C\u500F\u502E\u502D\u4FFE\u501C\u500C\u5025\u5028\u507E\u5043\u5055\u5048\u504E\u506C\u507B\u50A5\u50A7\u50A9\u50BA\u50D6\u5106\u50ED\u50EC\u50E6\u50EE\u5107\u510B\u4EDD\u6C3D\u4F58\u4F65\u4FCE\u9FA0\u6C46\u7C74\u516E\u5DFD\u9EC9\u9998\u5181\u5914\u52F9\u530D\u8A07\u5310\u51EB\u5919\u5155\u4EA0\u5156\u4EB3\u886E\u88A4\u4EB5\u8114\u88D2\u7980\u5B34\u8803\u7FB8\u51AB\u51B1\u51BD\u51BC"], + ["da40", "\u8D0E", 14, "\u8D20\u8D51\u8D52\u8D57\u8D5F\u8D65\u8D68\u8D69\u8D6A\u8D6C\u8D6E\u8D6F\u8D71\u8D72\u8D78", 8, "\u8D82\u8D83\u8D86\u8D87\u8D88\u8D89\u8D8C", 4, "\u8D92\u8D93\u8D95", 9, "\u8DA0\u8DA1"], + ["da80", "\u8DA2\u8DA4", 12, "\u8DB2\u8DB6\u8DB7\u8DB9\u8DBB\u8DBD\u8DC0\u8DC1\u8DC2\u8DC5\u8DC7\u8DC8\u8DC9\u8DCA\u8DCD\u8DD0\u8DD2\u8DD3\u8DD4\u51C7\u5196\u51A2\u51A5\u8BA0\u8BA6\u8BA7\u8BAA\u8BB4\u8BB5\u8BB7\u8BC2\u8BC3\u8BCB\u8BCF\u8BCE\u8BD2\u8BD3\u8BD4\u8BD6\u8BD8\u8BD9\u8BDC\u8BDF\u8BE0\u8BE4\u8BE8\u8BE9\u8BEE\u8BF0\u8BF3\u8BF6\u8BF9\u8BFC\u8BFF\u8C00\u8C02\u8C04\u8C07\u8C0C\u8C0F\u8C11\u8C12\u8C14\u8C15\u8C16\u8C19\u8C1B\u8C18\u8C1D\u8C1F\u8C20\u8C21\u8C25\u8C27\u8C2A\u8C2B\u8C2E\u8C2F\u8C32\u8C33\u8C35\u8C36\u5369\u537A\u961D\u9622\u9621\u9631\u962A\u963D\u963C\u9642\u9649\u9654\u965F\u9667\u966C\u9672\u9674\u9688\u968D\u9697\u96B0\u9097\u909B\u909D\u9099\u90AC\u90A1\u90B4\u90B3\u90B6\u90BA"], + ["db40", "\u8DD5\u8DD8\u8DD9\u8DDC\u8DE0\u8DE1\u8DE2\u8DE5\u8DE6\u8DE7\u8DE9\u8DED\u8DEE\u8DF0\u8DF1\u8DF2\u8DF4\u8DF6\u8DFC\u8DFE", 6, "\u8E06\u8E07\u8E08\u8E0B\u8E0D\u8E0E\u8E10\u8E11\u8E12\u8E13\u8E15", 7, "\u8E20\u8E21\u8E24", 4, "\u8E2B\u8E2D\u8E30\u8E32\u8E33\u8E34\u8E36\u8E37\u8E38\u8E3B\u8E3C\u8E3E"], + ["db80", "\u8E3F\u8E43\u8E45\u8E46\u8E4C", 4, "\u8E53", 5, "\u8E5A", 11, "\u8E67\u8E68\u8E6A\u8E6B\u8E6E\u8E71\u90B8\u90B0\u90CF\u90C5\u90BE\u90D0\u90C4\u90C7\u90D3\u90E6\u90E2\u90DC\u90D7\u90DB\u90EB\u90EF\u90FE\u9104\u9122\u911E\u9123\u9131\u912F\u9139\u9143\u9146\u520D\u5942\u52A2\u52AC\u52AD\u52BE\u54FF\u52D0\u52D6\u52F0\u53DF\u71EE\u77CD\u5EF4\u51F5\u51FC\u9B2F\u53B6\u5F01\u755A\u5DEF\u574C\u57A9\u57A1\u587E\u58BC\u58C5\u58D1\u5729\u572C\u572A\u5733\u5739\u572E\u572F\u575C\u573B\u5742\u5769\u5785\u576B\u5786\u577C\u577B\u5768\u576D\u5776\u5773\u57AD\u57A4\u578C\u57B2\u57CF\u57A7\u57B4\u5793\u57A0\u57D5\u57D8\u57DA\u57D9\u57D2\u57B8\u57F4\u57EF\u57F8\u57E4\u57DD"], + ["dc40", "\u8E73\u8E75\u8E77", 4, "\u8E7D\u8E7E\u8E80\u8E82\u8E83\u8E84\u8E86\u8E88", 6, "\u8E91\u8E92\u8E93\u8E95", 6, "\u8E9D\u8E9F", 11, "\u8EAD\u8EAE\u8EB0\u8EB1\u8EB3", 6, "\u8EBB", 7], + ["dc80", "\u8EC3", 10, "\u8ECF", 21, "\u580B\u580D\u57FD\u57ED\u5800\u581E\u5819\u5844\u5820\u5865\u586C\u5881\u5889\u589A\u5880\u99A8\u9F19\u61FF\u8279\u827D\u827F\u828F\u828A\u82A8\u8284\u828E\u8291\u8297\u8299\u82AB\u82B8\u82BE\u82B0\u82C8\u82CA\u82E3\u8298\u82B7\u82AE\u82CB\u82CC\u82C1\u82A9\u82B4\u82A1\u82AA\u829F\u82C4\u82CE\u82A4\u82E1\u8309\u82F7\u82E4\u830F\u8307\u82DC\u82F4\u82D2\u82D8\u830C\u82FB\u82D3\u8311\u831A\u8306\u8314\u8315\u82E0\u82D5\u831C\u8351\u835B\u835C\u8308\u8392\u833C\u8334\u8331\u839B\u835E\u832F\u834F\u8347\u8343\u835F\u8340\u8317\u8360\u832D\u833A\u8333\u8366\u8365"], + ["dd40", "\u8EE5", 62], + ["dd80", "\u8F24", 32, "\u8368\u831B\u8369\u836C\u836A\u836D\u836E\u83B0\u8378\u83B3\u83B4\u83A0\u83AA\u8393\u839C\u8385\u837C\u83B6\u83A9\u837D\u83B8\u837B\u8398\u839E\u83A8\u83BA\u83BC\u83C1\u8401\u83E5\u83D8\u5807\u8418\u840B\u83DD\u83FD\u83D6\u841C\u8438\u8411\u8406\u83D4\u83DF\u840F\u8403\u83F8\u83F9\u83EA\u83C5\u83C0\u8426\u83F0\u83E1\u845C\u8451\u845A\u8459\u8473\u8487\u8488\u847A\u8489\u8478\u843C\u8446\u8469\u8476\u848C\u848E\u8431\u846D\u84C1\u84CD\u84D0\u84E6\u84BD\u84D3\u84CA\u84BF\u84BA\u84E0\u84A1\u84B9\u84B4\u8497\u84E5\u84E3\u850C\u750D\u8538\u84F0\u8539\u851F\u853A"], + ["de40", "\u8F45", 32, "\u8F6A\u8F80\u8F8C\u8F92\u8F9D\u8FA0\u8FA1\u8FA2\u8FA4\u8FA5\u8FA6\u8FA7\u8FAA\u8FAC\u8FAD\u8FAE\u8FAF\u8FB2\u8FB3\u8FB4\u8FB5\u8FB7\u8FB8\u8FBA\u8FBB\u8FBC\u8FBF\u8FC0\u8FC3\u8FC6"], + ["de80", "\u8FC9", 4, "\u8FCF\u8FD2\u8FD6\u8FD7\u8FDA\u8FE0\u8FE1\u8FE3\u8FE7\u8FEC\u8FEF\u8FF1\u8FF2\u8FF4\u8FF5\u8FF6\u8FFA\u8FFB\u8FFC\u8FFE\u8FFF\u9007\u9008\u900C\u900E\u9013\u9015\u9018\u8556\u853B\u84FF\u84FC\u8559\u8548\u8568\u8564\u855E\u857A\u77A2\u8543\u8572\u857B\u85A4\u85A8\u8587\u858F\u8579\u85AE\u859C\u8585\u85B9\u85B7\u85B0\u85D3\u85C1\u85DC\u85FF\u8627\u8605\u8629\u8616\u863C\u5EFE\u5F08\u593C\u5941\u8037\u5955\u595A\u5958\u530F\u5C22\u5C25\u5C2C\u5C34\u624C\u626A\u629F\u62BB\u62CA\u62DA\u62D7\u62EE\u6322\u62F6\u6339\u634B\u6343\u63AD\u63F6\u6371\u637A\u638E\u63B4\u636D\u63AC\u638A\u6369\u63AE\u63BC\u63F2\u63F8\u63E0\u63FF\u63C4\u63DE\u63CE\u6452\u63C6\u63BE\u6445\u6441\u640B\u641B\u6420\u640C\u6426\u6421\u645E\u6484\u646D\u6496"], + ["df40", "\u9019\u901C\u9023\u9024\u9025\u9027", 5, "\u9030", 4, "\u9037\u9039\u903A\u903D\u903F\u9040\u9043\u9045\u9046\u9048", 4, "\u904E\u9054\u9055\u9056\u9059\u905A\u905C", 5, "\u9064\u9066\u9067\u9069\u906A\u906B\u906C\u906F", 4, "\u9076", 6, "\u907E\u9081"], + ["df80", "\u9084\u9085\u9086\u9087\u9089\u908A\u908C", 4, "\u9092\u9094\u9096\u9098\u909A\u909C\u909E\u909F\u90A0\u90A4\u90A5\u90A7\u90A8\u90A9\u90AB\u90AD\u90B2\u90B7\u90BC\u90BD\u90BF\u90C0\u647A\u64B7\u64B8\u6499\u64BA\u64C0\u64D0\u64D7\u64E4\u64E2\u6509\u6525\u652E\u5F0B\u5FD2\u7519\u5F11\u535F\u53F1\u53FD\u53E9\u53E8\u53FB\u5412\u5416\u5406\u544B\u5452\u5453\u5454\u5456\u5443\u5421\u5457\u5459\u5423\u5432\u5482\u5494\u5477\u5471\u5464\u549A\u549B\u5484\u5476\u5466\u549D\u54D0\u54AD\u54C2\u54B4\u54D2\u54A7\u54A6\u54D3\u54D4\u5472\u54A3\u54D5\u54BB\u54BF\u54CC\u54D9\u54DA\u54DC\u54A9\u54AA\u54A4\u54DD\u54CF\u54DE\u551B\u54E7\u5520\u54FD\u5514\u54F3\u5522\u5523\u550F\u5511\u5527\u552A\u5567\u558F\u55B5\u5549\u556D\u5541\u5555\u553F\u5550\u553C"], + ["e040", "\u90C2\u90C3\u90C6\u90C8\u90C9\u90CB\u90CC\u90CD\u90D2\u90D4\u90D5\u90D6\u90D8\u90D9\u90DA\u90DE\u90DF\u90E0\u90E3\u90E4\u90E5\u90E9\u90EA\u90EC\u90EE\u90F0\u90F1\u90F2\u90F3\u90F5\u90F6\u90F7\u90F9\u90FA\u90FB\u90FC\u90FF\u9100\u9101\u9103\u9105", 19, "\u911A\u911B\u911C"], + ["e080", "\u911D\u911F\u9120\u9121\u9124", 10, "\u9130\u9132", 6, "\u913A", 8, "\u9144\u5537\u5556\u5575\u5576\u5577\u5533\u5530\u555C\u558B\u55D2\u5583\u55B1\u55B9\u5588\u5581\u559F\u557E\u55D6\u5591\u557B\u55DF\u55BD\u55BE\u5594\u5599\u55EA\u55F7\u55C9\u561F\u55D1\u55EB\u55EC\u55D4\u55E6\u55DD\u55C4\u55EF\u55E5\u55F2\u55F3\u55CC\u55CD\u55E8\u55F5\u55E4\u8F94\u561E\u5608\u560C\u5601\u5624\u5623\u55FE\u5600\u5627\u562D\u5658\u5639\u5657\u562C\u564D\u5662\u5659\u565C\u564C\u5654\u5686\u5664\u5671\u566B\u567B\u567C\u5685\u5693\u56AF\u56D4\u56D7\u56DD\u56E1\u56F5\u56EB\u56F9\u56FF\u5704\u570A\u5709\u571C\u5E0F\u5E19\u5E14\u5E11\u5E31\u5E3B\u5E3C"], + ["e140", "\u9145\u9147\u9148\u9151\u9153\u9154\u9155\u9156\u9158\u9159\u915B\u915C\u915F\u9160\u9166\u9167\u9168\u916B\u916D\u9173\u917A\u917B\u917C\u9180", 4, "\u9186\u9188\u918A\u918E\u918F\u9193", 6, "\u919C", 5, "\u91A4", 5, "\u91AB\u91AC\u91B0\u91B1\u91B2\u91B3\u91B6\u91B7\u91B8\u91B9\u91BB"], + ["e180", "\u91BC", 10, "\u91C8\u91CB\u91D0\u91D2", 9, "\u91DD", 8, "\u5E37\u5E44\u5E54\u5E5B\u5E5E\u5E61\u5C8C\u5C7A\u5C8D\u5C90\u5C96\u5C88\u5C98\u5C99\u5C91\u5C9A\u5C9C\u5CB5\u5CA2\u5CBD\u5CAC\u5CAB\u5CB1\u5CA3\u5CC1\u5CB7\u5CC4\u5CD2\u5CE4\u5CCB\u5CE5\u5D02\u5D03\u5D27\u5D26\u5D2E\u5D24\u5D1E\u5D06\u5D1B\u5D58\u5D3E\u5D34\u5D3D\u5D6C\u5D5B\u5D6F\u5D5D\u5D6B\u5D4B\u5D4A\u5D69\u5D74\u5D82\u5D99\u5D9D\u8C73\u5DB7\u5DC5\u5F73\u5F77\u5F82\u5F87\u5F89\u5F8C\u5F95\u5F99\u5F9C\u5FA8\u5FAD\u5FB5\u5FBC\u8862\u5F61\u72AD\u72B0\u72B4\u72B7\u72B8\u72C3\u72C1\u72CE\u72CD\u72D2\u72E8\u72EF\u72E9\u72F2\u72F4\u72F7\u7301\u72F3\u7303\u72FA"], + ["e240", "\u91E6", 62], + ["e280", "\u9225", 32, "\u72FB\u7317\u7313\u7321\u730A\u731E\u731D\u7315\u7322\u7339\u7325\u732C\u7338\u7331\u7350\u734D\u7357\u7360\u736C\u736F\u737E\u821B\u5925\u98E7\u5924\u5902\u9963\u9967", 5, "\u9974\u9977\u997D\u9980\u9984\u9987\u998A\u998D\u9990\u9991\u9993\u9994\u9995\u5E80\u5E91\u5E8B\u5E96\u5EA5\u5EA0\u5EB9\u5EB5\u5EBE\u5EB3\u8D53\u5ED2\u5ED1\u5EDB\u5EE8\u5EEA\u81BA\u5FC4\u5FC9\u5FD6\u5FCF\u6003\u5FEE\u6004\u5FE1\u5FE4\u5FFE\u6005\u6006\u5FEA\u5FED\u5FF8\u6019\u6035\u6026\u601B\u600F\u600D\u6029\u602B\u600A\u603F\u6021\u6078\u6079\u607B\u607A\u6042"], + ["e340", "\u9246", 45, "\u9275", 16], + ["e380", "\u9286", 7, "\u928F", 24, "\u606A\u607D\u6096\u609A\u60AD\u609D\u6083\u6092\u608C\u609B\u60EC\u60BB\u60B1\u60DD\u60D8\u60C6\u60DA\u60B4\u6120\u6126\u6115\u6123\u60F4\u6100\u610E\u612B\u614A\u6175\u61AC\u6194\u61A7\u61B7\u61D4\u61F5\u5FDD\u96B3\u95E9\u95EB\u95F1\u95F3\u95F5\u95F6\u95FC\u95FE\u9603\u9604\u9606\u9608\u960A\u960B\u960C\u960D\u960F\u9612\u9615\u9616\u9617\u9619\u961A\u4E2C\u723F\u6215\u6C35\u6C54\u6C5C\u6C4A\u6CA3\u6C85\u6C90\u6C94\u6C8C\u6C68\u6C69\u6C74\u6C76\u6C86\u6CA9\u6CD0\u6CD4\u6CAD\u6CF7\u6CF8\u6CF1\u6CD7\u6CB2\u6CE0\u6CD6\u6CFA\u6CEB\u6CEE\u6CB1\u6CD3\u6CEF\u6CFE"], + ["e440", "\u92A8", 5, "\u92AF", 24, "\u92C9", 31], + ["e480", "\u92E9", 32, "\u6D39\u6D27\u6D0C\u6D43\u6D48\u6D07\u6D04\u6D19\u6D0E\u6D2B\u6D4D\u6D2E\u6D35\u6D1A\u6D4F\u6D52\u6D54\u6D33\u6D91\u6D6F\u6D9E\u6DA0\u6D5E\u6D93\u6D94\u6D5C\u6D60\u6D7C\u6D63\u6E1A\u6DC7\u6DC5\u6DDE\u6E0E\u6DBF\u6DE0\u6E11\u6DE6\u6DDD\u6DD9\u6E16\u6DAB\u6E0C\u6DAE\u6E2B\u6E6E\u6E4E\u6E6B\u6EB2\u6E5F\u6E86\u6E53\u6E54\u6E32\u6E25\u6E44\u6EDF\u6EB1\u6E98\u6EE0\u6F2D\u6EE2\u6EA5\u6EA7\u6EBD\u6EBB\u6EB7\u6ED7\u6EB4\u6ECF\u6E8F\u6EC2\u6E9F\u6F62\u6F46\u6F47\u6F24\u6F15\u6EF9\u6F2F\u6F36\u6F4B\u6F74\u6F2A\u6F09\u6F29\u6F89\u6F8D\u6F8C\u6F78\u6F72\u6F7C\u6F7A\u6FD1"], + ["e540", "\u930A", 51, "\u933F", 10], + ["e580", "\u934A", 31, "\u936B\u6FC9\u6FA7\u6FB9\u6FB6\u6FC2\u6FE1\u6FEE\u6FDE\u6FE0\u6FEF\u701A\u7023\u701B\u7039\u7035\u704F\u705E\u5B80\u5B84\u5B95\u5B93\u5BA5\u5BB8\u752F\u9A9E\u6434\u5BE4\u5BEE\u8930\u5BF0\u8E47\u8B07\u8FB6\u8FD3\u8FD5\u8FE5\u8FEE\u8FE4\u8FE9\u8FE6\u8FF3\u8FE8\u9005\u9004\u900B\u9026\u9011\u900D\u9016\u9021\u9035\u9036\u902D\u902F\u9044\u9051\u9052\u9050\u9068\u9058\u9062\u905B\u66B9\u9074\u907D\u9082\u9088\u9083\u908B\u5F50\u5F57\u5F56\u5F58\u5C3B\u54AB\u5C50\u5C59\u5B71\u5C63\u5C66\u7FBC\u5F2A\u5F29\u5F2D\u8274\u5F3C\u9B3B\u5C6E\u5981\u5983\u598D\u59A9\u59AA\u59A3"], + ["e640", "\u936C", 34, "\u9390", 27], + ["e680", "\u93AC", 29, "\u93CB\u93CC\u93CD\u5997\u59CA\u59AB\u599E\u59A4\u59D2\u59B2\u59AF\u59D7\u59BE\u5A05\u5A06\u59DD\u5A08\u59E3\u59D8\u59F9\u5A0C\u5A09\u5A32\u5A34\u5A11\u5A23\u5A13\u5A40\u5A67\u5A4A\u5A55\u5A3C\u5A62\u5A75\u80EC\u5AAA\u5A9B\u5A77\u5A7A\u5ABE\u5AEB\u5AB2\u5AD2\u5AD4\u5AB8\u5AE0\u5AE3\u5AF1\u5AD6\u5AE6\u5AD8\u5ADC\u5B09\u5B17\u5B16\u5B32\u5B37\u5B40\u5C15\u5C1C\u5B5A\u5B65\u5B73\u5B51\u5B53\u5B62\u9A75\u9A77\u9A78\u9A7A\u9A7F\u9A7D\u9A80\u9A81\u9A85\u9A88\u9A8A\u9A90\u9A92\u9A93\u9A96\u9A98\u9A9B\u9A9C\u9A9D\u9A9F\u9AA0\u9AA2\u9AA3\u9AA5\u9AA7\u7E9F\u7EA1\u7EA3\u7EA5\u7EA8\u7EA9"], + ["e740", "\u93CE", 7, "\u93D7", 54], + ["e780", "\u940E", 32, "\u7EAD\u7EB0\u7EBE\u7EC0\u7EC1\u7EC2\u7EC9\u7ECB\u7ECC\u7ED0\u7ED4\u7ED7\u7EDB\u7EE0\u7EE1\u7EE8\u7EEB\u7EEE\u7EEF\u7EF1\u7EF2\u7F0D\u7EF6\u7EFA\u7EFB\u7EFE\u7F01\u7F02\u7F03\u7F07\u7F08\u7F0B\u7F0C\u7F0F\u7F11\u7F12\u7F17\u7F19\u7F1C\u7F1B\u7F1F\u7F21", 6, "\u7F2A\u7F2B\u7F2C\u7F2D\u7F2F", 4, "\u7F35\u5E7A\u757F\u5DDB\u753E\u9095\u738E\u7391\u73AE\u73A2\u739F\u73CF\u73C2\u73D1\u73B7\u73B3\u73C0\u73C9\u73C8\u73E5\u73D9\u987C\u740A\u73E9\u73E7\u73DE\u73BA\u73F2\u740F\u742A\u745B\u7426\u7425\u7428\u7430\u742E\u742C"], + ["e840", "\u942F", 14, "\u943F", 43, "\u946C\u946D\u946E\u946F"], + ["e880", "\u9470", 20, "\u9491\u9496\u9498\u94C7\u94CF\u94D3\u94D4\u94DA\u94E6\u94FB\u951C\u9520\u741B\u741A\u7441\u745C\u7457\u7455\u7459\u7477\u746D\u747E\u749C\u748E\u7480\u7481\u7487\u748B\u749E\u74A8\u74A9\u7490\u74A7\u74D2\u74BA\u97EA\u97EB\u97EC\u674C\u6753\u675E\u6748\u6769\u67A5\u6787\u676A\u6773\u6798\u67A7\u6775\u67A8\u679E\u67AD\u678B\u6777\u677C\u67F0\u6809\u67D8\u680A\u67E9\u67B0\u680C\u67D9\u67B5\u67DA\u67B3\u67DD\u6800\u67C3\u67B8\u67E2\u680E\u67C1\u67FD\u6832\u6833\u6860\u6861\u684E\u6862\u6844\u6864\u6883\u681D\u6855\u6866\u6841\u6867\u6840\u683E\u684A\u6849\u6829\u68B5\u688F\u6874\u6877\u6893\u686B\u68C2\u696E\u68FC\u691F\u6920\u68F9"], + ["e940", "\u9527\u9533\u953D\u9543\u9548\u954B\u9555\u955A\u9560\u956E\u9574\u9575\u9577", 7, "\u9580", 42], + ["e980", "\u95AB", 32, "\u6924\u68F0\u690B\u6901\u6957\u68E3\u6910\u6971\u6939\u6960\u6942\u695D\u6984\u696B\u6980\u6998\u6978\u6934\u69CC\u6987\u6988\u69CE\u6989\u6966\u6963\u6979\u699B\u69A7\u69BB\u69AB\u69AD\u69D4\u69B1\u69C1\u69CA\u69DF\u6995\u69E0\u698D\u69FF\u6A2F\u69ED\u6A17\u6A18\u6A65\u69F2\u6A44\u6A3E\u6AA0\u6A50\u6A5B\u6A35\u6A8E\u6A79\u6A3D\u6A28\u6A58\u6A7C\u6A91\u6A90\u6AA9\u6A97\u6AAB\u7337\u7352\u6B81\u6B82\u6B87\u6B84\u6B92\u6B93\u6B8D\u6B9A\u6B9B\u6BA1\u6BAA\u8F6B\u8F6D\u8F71\u8F72\u8F73\u8F75\u8F76\u8F78\u8F77\u8F79\u8F7A\u8F7C\u8F7E\u8F81\u8F82\u8F84\u8F87\u8F8B"], + ["ea40", "\u95CC", 27, "\u95EC\u95FF\u9607\u9613\u9618\u961B\u961E\u9620\u9623", 6, "\u962B\u962C\u962D\u962F\u9630\u9637\u9638\u9639\u963A\u963E\u9641\u9643\u964A\u964E\u964F\u9651\u9652\u9653\u9656\u9657"], + ["ea80", "\u9658\u9659\u965A\u965C\u965D\u965E\u9660\u9663\u9665\u9666\u966B\u966D", 4, "\u9673\u9678", 12, "\u9687\u9689\u968A\u8F8D\u8F8E\u8F8F\u8F98\u8F9A\u8ECE\u620B\u6217\u621B\u621F\u6222\u6221\u6225\u6224\u622C\u81E7\u74EF\u74F4\u74FF\u750F\u7511\u7513\u6534\u65EE\u65EF\u65F0\u660A\u6619\u6772\u6603\u6615\u6600\u7085\u66F7\u661D\u6634\u6631\u6636\u6635\u8006\u665F\u6654\u6641\u664F\u6656\u6661\u6657\u6677\u6684\u668C\u66A7\u669D\u66BE\u66DB\u66DC\u66E6\u66E9\u8D32\u8D33\u8D36\u8D3B\u8D3D\u8D40\u8D45\u8D46\u8D48\u8D49\u8D47\u8D4D\u8D55\u8D59\u89C7\u89CA\u89CB\u89CC\u89CE\u89CF\u89D0\u89D1\u726E\u729F\u725D\u7266\u726F\u727E\u727F\u7284\u728B\u728D\u728F\u7292\u6308\u6332\u63B0"], + ["eb40", "\u968C\u968E\u9691\u9692\u9693\u9695\u9696\u969A\u969B\u969D", 9, "\u96A8", 7, "\u96B1\u96B2\u96B4\u96B5\u96B7\u96B8\u96BA\u96BB\u96BF\u96C2\u96C3\u96C8\u96CA\u96CB\u96D0\u96D1\u96D3\u96D4\u96D6", 9, "\u96E1", 6, "\u96EB"], + ["eb80", "\u96EC\u96ED\u96EE\u96F0\u96F1\u96F2\u96F4\u96F5\u96F8\u96FA\u96FB\u96FC\u96FD\u96FF\u9702\u9703\u9705\u970A\u970B\u970C\u9710\u9711\u9712\u9714\u9715\u9717", 4, "\u971D\u971F\u9720\u643F\u64D8\u8004\u6BEA\u6BF3\u6BFD\u6BF5\u6BF9\u6C05\u6C07\u6C06\u6C0D\u6C15\u6C18\u6C19\u6C1A\u6C21\u6C29\u6C24\u6C2A\u6C32\u6535\u6555\u656B\u724D\u7252\u7256\u7230\u8662\u5216\u809F\u809C\u8093\u80BC\u670A\u80BD\u80B1\u80AB\u80AD\u80B4\u80B7\u80E7\u80E8\u80E9\u80EA\u80DB\u80C2\u80C4\u80D9\u80CD\u80D7\u6710\u80DD\u80EB\u80F1\u80F4\u80ED\u810D\u810E\u80F2\u80FC\u6715\u8112\u8C5A\u8136\u811E\u812C\u8118\u8132\u8148\u814C\u8153\u8174\u8159\u815A\u8171\u8160\u8169\u817C\u817D\u816D\u8167\u584D\u5AB5\u8188\u8182\u8191\u6ED5\u81A3\u81AA\u81CC\u6726\u81CA\u81BB"], + ["ec40", "\u9721", 8, "\u972B\u972C\u972E\u972F\u9731\u9733", 4, "\u973A\u973B\u973C\u973D\u973F", 18, "\u9754\u9755\u9757\u9758\u975A\u975C\u975D\u975F\u9763\u9764\u9766\u9767\u9768\u976A", 7], + ["ec80", "\u9772\u9775\u9777", 4, "\u977D", 7, "\u9786", 4, "\u978C\u978E\u978F\u9790\u9793\u9795\u9796\u9797\u9799", 4, "\u81C1\u81A6\u6B24\u6B37\u6B39\u6B43\u6B46\u6B59\u98D1\u98D2\u98D3\u98D5\u98D9\u98DA\u6BB3\u5F40\u6BC2\u89F3\u6590\u9F51\u6593\u65BC\u65C6\u65C4\u65C3\u65CC\u65CE\u65D2\u65D6\u7080\u709C\u7096\u709D\u70BB\u70C0\u70B7\u70AB\u70B1\u70E8\u70CA\u7110\u7113\u7116\u712F\u7131\u7173\u715C\u7168\u7145\u7172\u714A\u7178\u717A\u7198\u71B3\u71B5\u71A8\u71A0\u71E0\u71D4\u71E7\u71F9\u721D\u7228\u706C\u7118\u7166\u71B9\u623E\u623D\u6243\u6248\u6249\u793B\u7940\u7946\u7949\u795B\u795C\u7953\u795A\u7962\u7957\u7960\u796F\u7967\u797A\u7985\u798A\u799A\u79A7\u79B3\u5FD1\u5FD0"], + ["ed40", "\u979E\u979F\u97A1\u97A2\u97A4", 6, "\u97AC\u97AE\u97B0\u97B1\u97B3\u97B5", 46], + ["ed80", "\u97E4\u97E5\u97E8\u97EE", 4, "\u97F4\u97F7", 23, "\u603C\u605D\u605A\u6067\u6041\u6059\u6063\u60AB\u6106\u610D\u615D\u61A9\u619D\u61CB\u61D1\u6206\u8080\u807F\u6C93\u6CF6\u6DFC\u77F6\u77F8\u7800\u7809\u7817\u7818\u7811\u65AB\u782D\u781C\u781D\u7839\u783A\u783B\u781F\u783C\u7825\u782C\u7823\u7829\u784E\u786D\u7856\u7857\u7826\u7850\u7847\u784C\u786A\u789B\u7893\u789A\u7887\u789C\u78A1\u78A3\u78B2\u78B9\u78A5\u78D4\u78D9\u78C9\u78EC\u78F2\u7905\u78F4\u7913\u7924\u791E\u7934\u9F9B\u9EF9\u9EFB\u9EFC\u76F1\u7704\u770D\u76F9\u7707\u7708\u771A\u7722\u7719\u772D\u7726\u7735\u7738\u7750\u7751\u7747\u7743\u775A\u7768"], + ["ee40", "\u980F", 62], + ["ee80", "\u984E", 32, "\u7762\u7765\u777F\u778D\u777D\u7780\u778C\u7791\u779F\u77A0\u77B0\u77B5\u77BD\u753A\u7540\u754E\u754B\u7548\u755B\u7572\u7579\u7583\u7F58\u7F61\u7F5F\u8A48\u7F68\u7F74\u7F71\u7F79\u7F81\u7F7E\u76CD\u76E5\u8832\u9485\u9486\u9487\u948B\u948A\u948C\u948D\u948F\u9490\u9494\u9497\u9495\u949A\u949B\u949C\u94A3\u94A4\u94AB\u94AA\u94AD\u94AC\u94AF\u94B0\u94B2\u94B4\u94B6", 4, "\u94BC\u94BD\u94BF\u94C4\u94C8", 6, "\u94D0\u94D1\u94D2\u94D5\u94D6\u94D7\u94D9\u94D8\u94DB\u94DE\u94DF\u94E0\u94E2\u94E4\u94E5\u94E7\u94E8\u94EA"], + ["ef40", "\u986F", 5, "\u988B\u988E\u9892\u9895\u9899\u98A3\u98A8", 37, "\u98CF\u98D0\u98D4\u98D6\u98D7\u98DB\u98DC\u98DD\u98E0", 4], + ["ef80", "\u98E5\u98E6\u98E9", 30, "\u94E9\u94EB\u94EE\u94EF\u94F3\u94F4\u94F5\u94F7\u94F9\u94FC\u94FD\u94FF\u9503\u9502\u9506\u9507\u9509\u950A\u950D\u950E\u950F\u9512", 4, "\u9518\u951B\u951D\u951E\u951F\u9522\u952A\u952B\u9529\u952C\u9531\u9532\u9534\u9536\u9537\u9538\u953C\u953E\u953F\u9542\u9535\u9544\u9545\u9546\u9549\u954C\u954E\u954F\u9552\u9553\u9554\u9556\u9557\u9558\u9559\u955B\u955E\u955F\u955D\u9561\u9562\u9564", 8, "\u956F\u9571\u9572\u9573\u953A\u77E7\u77EC\u96C9\u79D5\u79ED\u79E3\u79EB\u7A06\u5D47\u7A03\u7A02\u7A1E\u7A14"], + ["f040", "\u9908", 4, "\u990E\u990F\u9911", 28, "\u992F", 26], + ["f080", "\u994A", 9, "\u9956", 12, "\u9964\u9966\u9973\u9978\u9979\u997B\u997E\u9982\u9983\u9989\u7A39\u7A37\u7A51\u9ECF\u99A5\u7A70\u7688\u768E\u7693\u7699\u76A4\u74DE\u74E0\u752C\u9E20\u9E22\u9E28", 4, "\u9E32\u9E31\u9E36\u9E38\u9E37\u9E39\u9E3A\u9E3E\u9E41\u9E42\u9E44\u9E46\u9E47\u9E48\u9E49\u9E4B\u9E4C\u9E4E\u9E51\u9E55\u9E57\u9E5A\u9E5B\u9E5C\u9E5E\u9E63\u9E66", 6, "\u9E71\u9E6D\u9E73\u7592\u7594\u7596\u75A0\u759D\u75AC\u75A3\u75B3\u75B4\u75B8\u75C4\u75B1\u75B0\u75C3\u75C2\u75D6\u75CD\u75E3\u75E8\u75E6\u75E4\u75EB\u75E7\u7603\u75F1\u75FC\u75FF\u7610\u7600\u7605\u760C\u7617\u760A\u7625\u7618\u7615\u7619"], + ["f140", "\u998C\u998E\u999A", 10, "\u99A6\u99A7\u99A9", 47], + ["f180", "\u99D9", 32, "\u761B\u763C\u7622\u7620\u7640\u762D\u7630\u763F\u7635\u7643\u763E\u7633\u764D\u765E\u7654\u765C\u7656\u766B\u766F\u7FCA\u7AE6\u7A78\u7A79\u7A80\u7A86\u7A88\u7A95\u7AA6\u7AA0\u7AAC\u7AA8\u7AAD\u7AB3\u8864\u8869\u8872\u887D\u887F\u8882\u88A2\u88C6\u88B7\u88BC\u88C9\u88E2\u88CE\u88E3\u88E5\u88F1\u891A\u88FC\u88E8\u88FE\u88F0\u8921\u8919\u8913\u891B\u890A\u8934\u892B\u8936\u8941\u8966\u897B\u758B\u80E5\u76B2\u76B4\u77DC\u8012\u8014\u8016\u801C\u8020\u8022\u8025\u8026\u8027\u8029\u8028\u8031\u800B\u8035\u8043\u8046\u804D\u8052\u8069\u8071\u8983\u9878\u9880\u9883"], + ["f240", "\u99FA", 62], + ["f280", "\u9A39", 32, "\u9889\u988C\u988D\u988F\u9894\u989A\u989B\u989E\u989F\u98A1\u98A2\u98A5\u98A6\u864D\u8654\u866C\u866E\u867F\u867A\u867C\u867B\u86A8\u868D\u868B\u86AC\u869D\u86A7\u86A3\u86AA\u8693\u86A9\u86B6\u86C4\u86B5\u86CE\u86B0\u86BA\u86B1\u86AF\u86C9\u86CF\u86B4\u86E9\u86F1\u86F2\u86ED\u86F3\u86D0\u8713\u86DE\u86F4\u86DF\u86D8\u86D1\u8703\u8707\u86F8\u8708\u870A\u870D\u8709\u8723\u873B\u871E\u8725\u872E\u871A\u873E\u8748\u8734\u8731\u8729\u8737\u873F\u8782\u8722\u877D\u877E\u877B\u8760\u8770\u874C\u876E\u878B\u8753\u8763\u877C\u8764\u8759\u8765\u8793\u87AF\u87A8\u87D2"], + ["f340", "\u9A5A", 17, "\u9A72\u9A83\u9A89\u9A8D\u9A8E\u9A94\u9A95\u9A99\u9AA6\u9AA9", 6, "\u9AB2\u9AB3\u9AB4\u9AB5\u9AB9\u9ABB\u9ABD\u9ABE\u9ABF\u9AC3\u9AC4\u9AC6", 4, "\u9ACD\u9ACE\u9ACF\u9AD0\u9AD2\u9AD4\u9AD5\u9AD6\u9AD7\u9AD9\u9ADA\u9ADB\u9ADC"], + ["f380", "\u9ADD\u9ADE\u9AE0\u9AE2\u9AE3\u9AE4\u9AE5\u9AE7\u9AE8\u9AE9\u9AEA\u9AEC\u9AEE\u9AF0", 8, "\u9AFA\u9AFC", 6, "\u9B04\u9B05\u9B06\u87C6\u8788\u8785\u87AD\u8797\u8783\u87AB\u87E5\u87AC\u87B5\u87B3\u87CB\u87D3\u87BD\u87D1\u87C0\u87CA\u87DB\u87EA\u87E0\u87EE\u8816\u8813\u87FE\u880A\u881B\u8821\u8839\u883C\u7F36\u7F42\u7F44\u7F45\u8210\u7AFA\u7AFD\u7B08\u7B03\u7B04\u7B15\u7B0A\u7B2B\u7B0F\u7B47\u7B38\u7B2A\u7B19\u7B2E\u7B31\u7B20\u7B25\u7B24\u7B33\u7B3E\u7B1E\u7B58\u7B5A\u7B45\u7B75\u7B4C\u7B5D\u7B60\u7B6E\u7B7B\u7B62\u7B72\u7B71\u7B90\u7BA6\u7BA7\u7BB8\u7BAC\u7B9D\u7BA8\u7B85\u7BAA\u7B9C\u7BA2\u7BAB\u7BB4\u7BD1\u7BC1\u7BCC\u7BDD\u7BDA\u7BE5\u7BE6\u7BEA\u7C0C\u7BFE\u7BFC\u7C0F\u7C16\u7C0B"], + ["f440", "\u9B07\u9B09", 5, "\u9B10\u9B11\u9B12\u9B14", 10, "\u9B20\u9B21\u9B22\u9B24", 10, "\u9B30\u9B31\u9B33", 7, "\u9B3D\u9B3E\u9B3F\u9B40\u9B46\u9B4A\u9B4B\u9B4C\u9B4E\u9B50\u9B52\u9B53\u9B55", 5], + ["f480", "\u9B5B", 32, "\u7C1F\u7C2A\u7C26\u7C38\u7C41\u7C40\u81FE\u8201\u8202\u8204\u81EC\u8844\u8221\u8222\u8223\u822D\u822F\u8228\u822B\u8238\u823B\u8233\u8234\u823E\u8244\u8249\u824B\u824F\u825A\u825F\u8268\u887E\u8885\u8888\u88D8\u88DF\u895E\u7F9D\u7F9F\u7FA7\u7FAF\u7FB0\u7FB2\u7C7C\u6549\u7C91\u7C9D\u7C9C\u7C9E\u7CA2\u7CB2\u7CBC\u7CBD\u7CC1\u7CC7\u7CCC\u7CCD\u7CC8\u7CC5\u7CD7\u7CE8\u826E\u66A8\u7FBF\u7FCE\u7FD5\u7FE5\u7FE1\u7FE6\u7FE9\u7FEE\u7FF3\u7CF8\u7D77\u7DA6\u7DAE\u7E47\u7E9B\u9EB8\u9EB4\u8D73\u8D84\u8D94\u8D91\u8DB1\u8D67\u8D6D\u8C47\u8C49\u914A\u9150\u914E\u914F\u9164"], + ["f540", "\u9B7C", 62], + ["f580", "\u9BBB", 32, "\u9162\u9161\u9170\u9169\u916F\u917D\u917E\u9172\u9174\u9179\u918C\u9185\u9190\u918D\u9191\u91A2\u91A3\u91AA\u91AD\u91AE\u91AF\u91B5\u91B4\u91BA\u8C55\u9E7E\u8DB8\u8DEB\u8E05\u8E59\u8E69\u8DB5\u8DBF\u8DBC\u8DBA\u8DC4\u8DD6\u8DD7\u8DDA\u8DDE\u8DCE\u8DCF\u8DDB\u8DC6\u8DEC\u8DF7\u8DF8\u8DE3\u8DF9\u8DFB\u8DE4\u8E09\u8DFD\u8E14\u8E1D\u8E1F\u8E2C\u8E2E\u8E23\u8E2F\u8E3A\u8E40\u8E39\u8E35\u8E3D\u8E31\u8E49\u8E41\u8E42\u8E51\u8E52\u8E4A\u8E70\u8E76\u8E7C\u8E6F\u8E74\u8E85\u8E8F\u8E94\u8E90\u8E9C\u8E9E\u8C78\u8C82\u8C8A\u8C85\u8C98\u8C94\u659B\u89D6\u89DE\u89DA\u89DC"], + ["f640", "\u9BDC", 62], + ["f680", "\u9C1B", 32, "\u89E5\u89EB\u89EF\u8A3E\u8B26\u9753\u96E9\u96F3\u96EF\u9706\u9701\u9708\u970F\u970E\u972A\u972D\u9730\u973E\u9F80\u9F83\u9F85", 5, "\u9F8C\u9EFE\u9F0B\u9F0D\u96B9\u96BC\u96BD\u96CE\u96D2\u77BF\u96E0\u928E\u92AE\u92C8\u933E\u936A\u93CA\u938F\u943E\u946B\u9C7F\u9C82\u9C85\u9C86\u9C87\u9C88\u7A23\u9C8B\u9C8E\u9C90\u9C91\u9C92\u9C94\u9C95\u9C9A\u9C9B\u9C9E", 5, "\u9CA5", 4, "\u9CAB\u9CAD\u9CAE\u9CB0", 7, "\u9CBA\u9CBB\u9CBC\u9CBD\u9CC4\u9CC5\u9CC6\u9CC7\u9CCA\u9CCB"], + ["f740", "\u9C3C", 62], + ["f780", "\u9C7B\u9C7D\u9C7E\u9C80\u9C83\u9C84\u9C89\u9C8A\u9C8C\u9C8F\u9C93\u9C96\u9C97\u9C98\u9C99\u9C9D\u9CAA\u9CAC\u9CAF\u9CB9\u9CBE", 4, "\u9CC8\u9CC9\u9CD1\u9CD2\u9CDA\u9CDB\u9CE0\u9CE1\u9CCC", 4, "\u9CD3\u9CD4\u9CD5\u9CD7\u9CD8\u9CD9\u9CDC\u9CDD\u9CDF\u9CE2\u977C\u9785\u9791\u9792\u9794\u97AF\u97AB\u97A3\u97B2\u97B4\u9AB1\u9AB0\u9AB7\u9E58\u9AB6\u9ABA\u9ABC\u9AC1\u9AC0\u9AC5\u9AC2\u9ACB\u9ACC\u9AD1\u9B45\u9B43\u9B47\u9B49\u9B48\u9B4D\u9B51\u98E8\u990D\u992E\u9955\u9954\u9ADF\u9AE1\u9AE6\u9AEF\u9AEB\u9AFB\u9AED\u9AF9\u9B08\u9B0F\u9B13\u9B1F\u9B23\u9EBD\u9EBE\u7E3B\u9E82\u9E87\u9E88\u9E8B\u9E92\u93D6\u9E9D\u9E9F\u9EDB\u9EDC\u9EDD\u9EE0\u9EDF\u9EE2\u9EE9\u9EE7\u9EE5\u9EEA\u9EEF\u9F22\u9F2C\u9F2F\u9F39\u9F37\u9F3D\u9F3E\u9F44"], + ["f840", "\u9CE3", 62], + ["f880", "\u9D22", 32], + ["f940", "\u9D43", 62], + ["f980", "\u9D82", 32], + ["fa40", "\u9DA3", 62], + ["fa80", "\u9DE2", 32], + ["fb40", "\u9E03", 27, "\u9E24\u9E27\u9E2E\u9E30\u9E34\u9E3B\u9E3C\u9E40\u9E4D\u9E50\u9E52\u9E53\u9E54\u9E56\u9E59\u9E5D\u9E5F\u9E60\u9E61\u9E62\u9E65\u9E6E\u9E6F\u9E72\u9E74", 9, "\u9E80"], + ["fb80", "\u9E81\u9E83\u9E84\u9E85\u9E86\u9E89\u9E8A\u9E8C", 5, "\u9E94", 8, "\u9E9E\u9EA0", 5, "\u9EA7\u9EA8\u9EA9\u9EAA"], + ["fc40", "\u9EAB", 8, "\u9EB5\u9EB6\u9EB7\u9EB9\u9EBA\u9EBC\u9EBF", 4, "\u9EC5\u9EC6\u9EC7\u9EC8\u9ECA\u9ECB\u9ECC\u9ED0\u9ED2\u9ED3\u9ED5\u9ED6\u9ED7\u9ED9\u9EDA\u9EDE\u9EE1\u9EE3\u9EE4\u9EE6\u9EE8\u9EEB\u9EEC\u9EED\u9EEE\u9EF0", 8, "\u9EFA\u9EFD\u9EFF", 6], + ["fc80", "\u9F06", 4, "\u9F0C\u9F0F\u9F11\u9F12\u9F14\u9F15\u9F16\u9F18\u9F1A", 5, "\u9F21\u9F23", 8, "\u9F2D\u9F2E\u9F30\u9F31"], + ["fd40", "\u9F32", 4, "\u9F38\u9F3A\u9F3C\u9F3F", 4, "\u9F45", 10, "\u9F52", 38], + ["fd80", "\u9F79", 5, "\u9F81\u9F82\u9F8D", 11, "\u9F9C\u9F9D\u9F9E\u9FA1", 4, "\uF92C\uF979\uF995\uF9E7\uF9F1"], + ["fe40", "\uFA0C\uFA0D\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA18\uFA1F\uFA20\uFA21\uFA23\uFA24\uFA27\uFA28\uFA29"] + ]; + } +}); + +// node_modules/iconv-lite/encodings/tables/gbk-added.json +var require_gbk_added = __commonJS({ + "node_modules/iconv-lite/encodings/tables/gbk-added.json"(exports2, module2) { + module2.exports = [ + ["a140", "\uE4C6", 62], + ["a180", "\uE505", 32], + ["a240", "\uE526", 62], + ["a280", "\uE565", 32], + ["a2ab", "\uE766", 5], + ["a2e3", "\u20AC\uE76D"], + ["a2ef", "\uE76E\uE76F"], + ["a2fd", "\uE770\uE771"], + ["a340", "\uE586", 62], + ["a380", "\uE5C5", 31, "\u3000"], + ["a440", "\uE5E6", 62], + ["a480", "\uE625", 32], + ["a4f4", "\uE772", 10], + ["a540", "\uE646", 62], + ["a580", "\uE685", 32], + ["a5f7", "\uE77D", 7], + ["a640", "\uE6A6", 62], + ["a680", "\uE6E5", 32], + ["a6b9", "\uE785", 7], + ["a6d9", "\uE78D", 6], + ["a6ec", "\uE794\uE795"], + ["a6f3", "\uE796"], + ["a6f6", "\uE797", 8], + ["a740", "\uE706", 62], + ["a780", "\uE745", 32], + ["a7c2", "\uE7A0", 14], + ["a7f2", "\uE7AF", 12], + ["a896", "\uE7BC", 10], + ["a8bc", "\uE7C7"], + ["a8bf", "\u01F9"], + ["a8c1", "\uE7C9\uE7CA\uE7CB\uE7CC"], + ["a8ea", "\uE7CD", 20], + ["a958", "\uE7E2"], + ["a95b", "\uE7E3"], + ["a95d", "\uE7E4\uE7E5\uE7E6"], + ["a989", "\u303E\u2FF0", 11], + ["a997", "\uE7F4", 12], + ["a9f0", "\uE801", 14], + ["aaa1", "\uE000", 93], + ["aba1", "\uE05E", 93], + ["aca1", "\uE0BC", 93], + ["ada1", "\uE11A", 93], + ["aea1", "\uE178", 93], + ["afa1", "\uE1D6", 93], + ["d7fa", "\uE810", 4], + ["f8a1", "\uE234", 93], + ["f9a1", "\uE292", 93], + ["faa1", "\uE2F0", 93], + ["fba1", "\uE34E", 93], + ["fca1", "\uE3AC", 93], + ["fda1", "\uE40A", 93], + ["fe50", "\u2E81\uE816\uE817\uE818\u2E84\u3473\u3447\u2E88\u2E8B\uE81E\u359E\u361A\u360E\u2E8C\u2E97\u396E\u3918\uE826\u39CF\u39DF\u3A73\u39D0\uE82B\uE82C\u3B4E\u3C6E\u3CE0\u2EA7\uE831\uE832\u2EAA\u4056\u415F\u2EAE\u4337\u2EB3\u2EB6\u2EB7\uE83B\u43B1\u43AC\u2EBB\u43DD\u44D6\u4661\u464C\uE843"], + ["fe80", "\u4723\u4729\u477C\u478D\u2ECA\u4947\u497A\u497D\u4982\u4983\u4985\u4986\u499F\u499B\u49B7\u49B6\uE854\uE855\u4CA3\u4C9F\u4CA0\u4CA1\u4C77\u4CA2\u4D13", 6, "\u4DAE\uE864\uE468", 93] + ]; + } +}); + +// node_modules/iconv-lite/encodings/tables/gb18030-ranges.json +var require_gb18030_ranges = __commonJS({ + "node_modules/iconv-lite/encodings/tables/gb18030-ranges.json"(exports2, module2) { + module2.exports = { uChars: [128, 165, 169, 178, 184, 216, 226, 235, 238, 244, 248, 251, 253, 258, 276, 284, 300, 325, 329, 334, 364, 463, 465, 467, 469, 471, 473, 475, 477, 506, 594, 610, 712, 716, 730, 930, 938, 962, 970, 1026, 1104, 1106, 8209, 8215, 8218, 8222, 8231, 8241, 8244, 8246, 8252, 8365, 8452, 8454, 8458, 8471, 8482, 8556, 8570, 8596, 8602, 8713, 8720, 8722, 8726, 8731, 8737, 8740, 8742, 8748, 8751, 8760, 8766, 8777, 8781, 8787, 8802, 8808, 8816, 8854, 8858, 8870, 8896, 8979, 9322, 9372, 9548, 9588, 9616, 9622, 9634, 9652, 9662, 9672, 9676, 9680, 9702, 9735, 9738, 9793, 9795, 11906, 11909, 11913, 11917, 11928, 11944, 11947, 11951, 11956, 11960, 11964, 11979, 12284, 12292, 12312, 12319, 12330, 12351, 12436, 12447, 12535, 12543, 12586, 12842, 12850, 12964, 13200, 13215, 13218, 13253, 13263, 13267, 13270, 13384, 13428, 13727, 13839, 13851, 14617, 14703, 14801, 14816, 14964, 15183, 15471, 15585, 16471, 16736, 17208, 17325, 17330, 17374, 17623, 17997, 18018, 18212, 18218, 18301, 18318, 18760, 18811, 18814, 18820, 18823, 18844, 18848, 18872, 19576, 19620, 19738, 19887, 40870, 59244, 59336, 59367, 59413, 59417, 59423, 59431, 59437, 59443, 59452, 59460, 59478, 59493, 63789, 63866, 63894, 63976, 63986, 64016, 64018, 64021, 64025, 64034, 64037, 64042, 65074, 65093, 65107, 65112, 65127, 65132, 65375, 65510, 65536], gbChars: [0, 36, 38, 45, 50, 81, 89, 95, 96, 100, 103, 104, 105, 109, 126, 133, 148, 172, 175, 179, 208, 306, 307, 308, 309, 310, 311, 312, 313, 341, 428, 443, 544, 545, 558, 741, 742, 749, 750, 805, 819, 820, 7922, 7924, 7925, 7927, 7934, 7943, 7944, 7945, 7950, 8062, 8148, 8149, 8152, 8164, 8174, 8236, 8240, 8262, 8264, 8374, 8380, 8381, 8384, 8388, 8390, 8392, 8393, 8394, 8396, 8401, 8406, 8416, 8419, 8424, 8437, 8439, 8445, 8482, 8485, 8496, 8521, 8603, 8936, 8946, 9046, 9050, 9063, 9066, 9076, 9092, 9100, 9108, 9111, 9113, 9131, 9162, 9164, 9218, 9219, 11329, 11331, 11334, 11336, 11346, 11361, 11363, 11366, 11370, 11372, 11375, 11389, 11682, 11686, 11687, 11692, 11694, 11714, 11716, 11723, 11725, 11730, 11736, 11982, 11989, 12102, 12336, 12348, 12350, 12384, 12393, 12395, 12397, 12510, 12553, 12851, 12962, 12973, 13738, 13823, 13919, 13933, 14080, 14298, 14585, 14698, 15583, 15847, 16318, 16434, 16438, 16481, 16729, 17102, 17122, 17315, 17320, 17402, 17418, 17859, 17909, 17911, 17915, 17916, 17936, 17939, 17961, 18664, 18703, 18814, 18962, 19043, 33469, 33470, 33471, 33484, 33485, 33490, 33497, 33501, 33505, 33513, 33520, 33536, 33550, 37845, 37921, 37948, 38029, 38038, 38064, 38065, 38066, 38069, 38075, 38076, 38078, 39108, 39109, 39113, 39114, 39115, 39116, 39265, 39394, 189e3] }; + } +}); + +// node_modules/iconv-lite/encodings/tables/cp949.json +var require_cp949 = __commonJS({ + "node_modules/iconv-lite/encodings/tables/cp949.json"(exports2, module2) { + module2.exports = [ + ["0", "\0", 127], + ["8141", "\uAC02\uAC03\uAC05\uAC06\uAC0B", 4, "\uAC18\uAC1E\uAC1F\uAC21\uAC22\uAC23\uAC25", 6, "\uAC2E\uAC32\uAC33\uAC34"], + ["8161", "\uAC35\uAC36\uAC37\uAC3A\uAC3B\uAC3D\uAC3E\uAC3F\uAC41", 9, "\uAC4C\uAC4E", 5, "\uAC55"], + ["8181", "\uAC56\uAC57\uAC59\uAC5A\uAC5B\uAC5D", 18, "\uAC72\uAC73\uAC75\uAC76\uAC79\uAC7B", 4, "\uAC82\uAC87\uAC88\uAC8D\uAC8E\uAC8F\uAC91\uAC92\uAC93\uAC95", 6, "\uAC9E\uACA2", 5, "\uACAB\uACAD\uACAE\uACB1", 6, "\uACBA\uACBE\uACBF\uACC0\uACC2\uACC3\uACC5\uACC6\uACC7\uACC9\uACCA\uACCB\uACCD", 7, "\uACD6\uACD8", 7, "\uACE2\uACE3\uACE5\uACE6\uACE9\uACEB\uACED\uACEE\uACF2\uACF4\uACF7", 4, "\uACFE\uACFF\uAD01\uAD02\uAD03\uAD05\uAD07", 4, "\uAD0E\uAD10\uAD12\uAD13"], + ["8241", "\uAD14\uAD15\uAD16\uAD17\uAD19\uAD1A\uAD1B\uAD1D\uAD1E\uAD1F\uAD21", 7, "\uAD2A\uAD2B\uAD2E", 5], + ["8261", "\uAD36\uAD37\uAD39\uAD3A\uAD3B\uAD3D", 6, "\uAD46\uAD48\uAD4A", 5, "\uAD51\uAD52\uAD53\uAD55\uAD56\uAD57"], + ["8281", "\uAD59", 7, "\uAD62\uAD64", 7, "\uAD6E\uAD6F\uAD71\uAD72\uAD77\uAD78\uAD79\uAD7A\uAD7E\uAD80\uAD83", 4, "\uAD8A\uAD8B\uAD8D\uAD8E\uAD8F\uAD91", 10, "\uAD9E", 5, "\uADA5", 17, "\uADB8", 7, "\uADC2\uADC3\uADC5\uADC6\uADC7\uADC9", 6, "\uADD2\uADD4", 7, "\uADDD\uADDE\uADDF\uADE1\uADE2\uADE3\uADE5", 18], + ["8341", "\uADFA\uADFB\uADFD\uADFE\uAE02", 5, "\uAE0A\uAE0C\uAE0E", 5, "\uAE15", 7], + ["8361", "\uAE1D", 18, "\uAE32\uAE33\uAE35\uAE36\uAE39\uAE3B\uAE3C"], + ["8381", "\uAE3D\uAE3E\uAE3F\uAE42\uAE44\uAE47\uAE48\uAE49\uAE4B\uAE4F\uAE51\uAE52\uAE53\uAE55\uAE57", 4, "\uAE5E\uAE62\uAE63\uAE64\uAE66\uAE67\uAE6A\uAE6B\uAE6D\uAE6E\uAE6F\uAE71", 6, "\uAE7A\uAE7E", 5, "\uAE86", 5, "\uAE8D", 46, "\uAEBF\uAEC1\uAEC2\uAEC3\uAEC5", 6, "\uAECE\uAED2", 5, "\uAEDA\uAEDB\uAEDD", 8], + ["8441", "\uAEE6\uAEE7\uAEE9\uAEEA\uAEEC\uAEEE", 5, "\uAEF5\uAEF6\uAEF7\uAEF9\uAEFA\uAEFB\uAEFD", 8], + ["8461", "\uAF06\uAF09\uAF0A\uAF0B\uAF0C\uAF0E\uAF0F\uAF11", 18], + ["8481", "\uAF24", 7, "\uAF2E\uAF2F\uAF31\uAF33\uAF35", 6, "\uAF3E\uAF40\uAF44\uAF45\uAF46\uAF47\uAF4A", 5, "\uAF51", 10, "\uAF5E", 5, "\uAF66", 18, "\uAF7A", 5, "\uAF81\uAF82\uAF83\uAF85\uAF86\uAF87\uAF89", 6, "\uAF92\uAF93\uAF94\uAF96", 5, "\uAF9D", 26, "\uAFBA\uAFBB\uAFBD\uAFBE"], + ["8541", "\uAFBF\uAFC1", 5, "\uAFCA\uAFCC\uAFCF", 4, "\uAFD5", 6, "\uAFDD", 4], + ["8561", "\uAFE2", 5, "\uAFEA", 5, "\uAFF2\uAFF3\uAFF5\uAFF6\uAFF7\uAFF9", 6, "\uB002\uB003"], + ["8581", "\uB005", 6, "\uB00D\uB00E\uB00F\uB011\uB012\uB013\uB015", 6, "\uB01E", 9, "\uB029", 26, "\uB046\uB047\uB049\uB04B\uB04D\uB04F\uB050\uB051\uB052\uB056\uB058\uB05A\uB05B\uB05C\uB05E", 29, "\uB07E\uB07F\uB081\uB082\uB083\uB085", 6, "\uB08E\uB090\uB092", 5, "\uB09B\uB09D\uB09E\uB0A3\uB0A4"], + ["8641", "\uB0A5\uB0A6\uB0A7\uB0AA\uB0B0\uB0B2\uB0B6\uB0B7\uB0B9\uB0BA\uB0BB\uB0BD", 6, "\uB0C6\uB0CA", 5, "\uB0D2"], + ["8661", "\uB0D3\uB0D5\uB0D6\uB0D7\uB0D9", 6, "\uB0E1\uB0E2\uB0E3\uB0E4\uB0E6", 10], + ["8681", "\uB0F1", 22, "\uB10A\uB10D\uB10E\uB10F\uB111\uB114\uB115\uB116\uB117\uB11A\uB11E", 4, "\uB126\uB127\uB129\uB12A\uB12B\uB12D", 6, "\uB136\uB13A", 5, "\uB142\uB143\uB145\uB146\uB147\uB149", 6, "\uB152\uB153\uB156\uB157\uB159\uB15A\uB15B\uB15D\uB15E\uB15F\uB161", 22, "\uB17A\uB17B\uB17D\uB17E\uB17F\uB181\uB183", 4, "\uB18A\uB18C\uB18E\uB18F\uB190\uB191\uB195\uB196\uB197\uB199\uB19A\uB19B\uB19D"], + ["8741", "\uB19E", 9, "\uB1A9", 15], + ["8761", "\uB1B9", 18, "\uB1CD\uB1CE\uB1CF\uB1D1\uB1D2\uB1D3\uB1D5"], + ["8781", "\uB1D6", 5, "\uB1DE\uB1E0", 7, "\uB1EA\uB1EB\uB1ED\uB1EE\uB1EF\uB1F1", 7, "\uB1FA\uB1FC\uB1FE", 5, "\uB206\uB207\uB209\uB20A\uB20D", 6, "\uB216\uB218\uB21A", 5, "\uB221", 18, "\uB235", 6, "\uB23D", 26, "\uB259\uB25A\uB25B\uB25D\uB25E\uB25F\uB261", 6, "\uB26A", 4], + ["8841", "\uB26F", 4, "\uB276", 5, "\uB27D", 6, "\uB286\uB287\uB288\uB28A", 4], + ["8861", "\uB28F\uB292\uB293\uB295\uB296\uB297\uB29B", 4, "\uB2A2\uB2A4\uB2A7\uB2A8\uB2A9\uB2AB\uB2AD\uB2AE\uB2AF\uB2B1\uB2B2\uB2B3\uB2B5\uB2B6\uB2B7"], + ["8881", "\uB2B8", 15, "\uB2CA\uB2CB\uB2CD\uB2CE\uB2CF\uB2D1\uB2D3", 4, "\uB2DA\uB2DC\uB2DE\uB2DF\uB2E0\uB2E1\uB2E3\uB2E7\uB2E9\uB2EA\uB2F0\uB2F1\uB2F2\uB2F6\uB2FC\uB2FD\uB2FE\uB302\uB303\uB305\uB306\uB307\uB309", 6, "\uB312\uB316", 5, "\uB31D", 54, "\uB357\uB359\uB35A\uB35D\uB360\uB361\uB362\uB363"], + ["8941", "\uB366\uB368\uB36A\uB36C\uB36D\uB36F\uB372\uB373\uB375\uB376\uB377\uB379", 6, "\uB382\uB386", 5, "\uB38D"], + ["8961", "\uB38E\uB38F\uB391\uB392\uB393\uB395", 10, "\uB3A2", 5, "\uB3A9\uB3AA\uB3AB\uB3AD"], + ["8981", "\uB3AE", 21, "\uB3C6\uB3C7\uB3C9\uB3CA\uB3CD\uB3CF\uB3D1\uB3D2\uB3D3\uB3D6\uB3D8\uB3DA\uB3DC\uB3DE\uB3DF\uB3E1\uB3E2\uB3E3\uB3E5\uB3E6\uB3E7\uB3E9", 18, "\uB3FD", 18, "\uB411", 6, "\uB419\uB41A\uB41B\uB41D\uB41E\uB41F\uB421", 6, "\uB42A\uB42C", 7, "\uB435", 15], + ["8a41", "\uB445", 10, "\uB452\uB453\uB455\uB456\uB457\uB459", 6, "\uB462\uB464\uB466"], + ["8a61", "\uB467", 4, "\uB46D", 18, "\uB481\uB482"], + ["8a81", "\uB483", 4, "\uB489", 19, "\uB49E", 5, "\uB4A5\uB4A6\uB4A7\uB4A9\uB4AA\uB4AB\uB4AD", 7, "\uB4B6\uB4B8\uB4BA", 5, "\uB4C1\uB4C2\uB4C3\uB4C5\uB4C6\uB4C7\uB4C9", 6, "\uB4D1\uB4D2\uB4D3\uB4D4\uB4D6", 5, "\uB4DE\uB4DF\uB4E1\uB4E2\uB4E5\uB4E7", 4, "\uB4EE\uB4F0\uB4F2", 5, "\uB4F9", 26, "\uB516\uB517\uB519\uB51A\uB51D"], + ["8b41", "\uB51E", 5, "\uB526\uB52B", 4, "\uB532\uB533\uB535\uB536\uB537\uB539", 6, "\uB542\uB546"], + ["8b61", "\uB547\uB548\uB549\uB54A\uB54E\uB54F\uB551\uB552\uB553\uB555", 6, "\uB55E\uB562", 8], + ["8b81", "\uB56B", 52, "\uB5A2\uB5A3\uB5A5\uB5A6\uB5A7\uB5A9\uB5AC\uB5AD\uB5AE\uB5AF\uB5B2\uB5B6", 4, "\uB5BE\uB5BF\uB5C1\uB5C2\uB5C3\uB5C5", 6, "\uB5CE\uB5D2", 5, "\uB5D9", 18, "\uB5ED", 18], + ["8c41", "\uB600", 15, "\uB612\uB613\uB615\uB616\uB617\uB619", 4], + ["8c61", "\uB61E", 6, "\uB626", 5, "\uB62D", 6, "\uB635", 5], + ["8c81", "\uB63B", 12, "\uB649", 26, "\uB665\uB666\uB667\uB669", 50, "\uB69E\uB69F\uB6A1\uB6A2\uB6A3\uB6A5", 5, "\uB6AD\uB6AE\uB6AF\uB6B0\uB6B2", 16], + ["8d41", "\uB6C3", 16, "\uB6D5", 8], + ["8d61", "\uB6DE", 17, "\uB6F1\uB6F2\uB6F3\uB6F5\uB6F6\uB6F7\uB6F9\uB6FA"], + ["8d81", "\uB6FB", 4, "\uB702\uB703\uB704\uB706", 33, "\uB72A\uB72B\uB72D\uB72E\uB731", 6, "\uB73A\uB73C", 7, "\uB745\uB746\uB747\uB749\uB74A\uB74B\uB74D", 6, "\uB756", 9, "\uB761\uB762\uB763\uB765\uB766\uB767\uB769", 6, "\uB772\uB774\uB776", 5, "\uB77E\uB77F\uB781\uB782\uB783\uB785", 6, "\uB78E\uB793\uB794\uB795\uB79A\uB79B\uB79D\uB79E"], + ["8e41", "\uB79F\uB7A1", 6, "\uB7AA\uB7AE", 5, "\uB7B6\uB7B7\uB7B9", 8], + ["8e61", "\uB7C2", 4, "\uB7C8\uB7CA", 19], + ["8e81", "\uB7DE", 13, "\uB7EE\uB7EF\uB7F1\uB7F2\uB7F3\uB7F5", 6, "\uB7FE\uB802", 4, "\uB80A\uB80B\uB80D\uB80E\uB80F\uB811", 6, "\uB81A\uB81C\uB81E", 5, "\uB826\uB827\uB829\uB82A\uB82B\uB82D", 6, "\uB836\uB83A", 5, "\uB841\uB842\uB843\uB845", 11, "\uB852\uB854", 7, "\uB85E\uB85F\uB861\uB862\uB863\uB865", 6, "\uB86E\uB870\uB872", 5, "\uB879\uB87A\uB87B\uB87D", 7], + ["8f41", "\uB885", 7, "\uB88E", 17], + ["8f61", "\uB8A0", 7, "\uB8A9", 6, "\uB8B1\uB8B2\uB8B3\uB8B5\uB8B6\uB8B7\uB8B9", 4], + ["8f81", "\uB8BE\uB8BF\uB8C2\uB8C4\uB8C6", 5, "\uB8CD\uB8CE\uB8CF\uB8D1\uB8D2\uB8D3\uB8D5", 7, "\uB8DE\uB8E0\uB8E2", 5, "\uB8EA\uB8EB\uB8ED\uB8EE\uB8EF\uB8F1", 6, "\uB8FA\uB8FC\uB8FE", 5, "\uB905", 18, "\uB919", 6, "\uB921", 26, "\uB93E\uB93F\uB941\uB942\uB943\uB945", 6, "\uB94D\uB94E\uB950\uB952", 5], + ["9041", "\uB95A\uB95B\uB95D\uB95E\uB95F\uB961", 6, "\uB96A\uB96C\uB96E", 5, "\uB976\uB977\uB979\uB97A\uB97B\uB97D"], + ["9061", "\uB97E", 5, "\uB986\uB988\uB98B\uB98C\uB98F", 15], + ["9081", "\uB99F", 12, "\uB9AE\uB9AF\uB9B1\uB9B2\uB9B3\uB9B5", 6, "\uB9BE\uB9C0\uB9C2", 5, "\uB9CA\uB9CB\uB9CD\uB9D3", 4, "\uB9DA\uB9DC\uB9DF\uB9E0\uB9E2\uB9E6\uB9E7\uB9E9\uB9EA\uB9EB\uB9ED", 6, "\uB9F6\uB9FB", 4, "\uBA02", 5, "\uBA09", 11, "\uBA16", 33, "\uBA3A\uBA3B\uBA3D\uBA3E\uBA3F\uBA41\uBA43\uBA44\uBA45\uBA46"], + ["9141", "\uBA47\uBA4A\uBA4C\uBA4F\uBA50\uBA51\uBA52\uBA56\uBA57\uBA59\uBA5A\uBA5B\uBA5D", 6, "\uBA66\uBA6A", 5], + ["9161", "\uBA72\uBA73\uBA75\uBA76\uBA77\uBA79", 9, "\uBA86\uBA88\uBA89\uBA8A\uBA8B\uBA8D", 5], + ["9181", "\uBA93", 20, "\uBAAA\uBAAD\uBAAE\uBAAF\uBAB1\uBAB3", 4, "\uBABA\uBABC\uBABE", 5, "\uBAC5\uBAC6\uBAC7\uBAC9", 14, "\uBADA", 33, "\uBAFD\uBAFE\uBAFF\uBB01\uBB02\uBB03\uBB05", 7, "\uBB0E\uBB10\uBB12", 5, "\uBB19\uBB1A\uBB1B\uBB1D\uBB1E\uBB1F\uBB21", 6], + ["9241", "\uBB28\uBB2A\uBB2C", 7, "\uBB37\uBB39\uBB3A\uBB3F", 4, "\uBB46\uBB48\uBB4A\uBB4B\uBB4C\uBB4E\uBB51\uBB52"], + ["9261", "\uBB53\uBB55\uBB56\uBB57\uBB59", 7, "\uBB62\uBB64", 7, "\uBB6D", 4], + ["9281", "\uBB72", 21, "\uBB89\uBB8A\uBB8B\uBB8D\uBB8E\uBB8F\uBB91", 18, "\uBBA5\uBBA6\uBBA7\uBBA9\uBBAA\uBBAB\uBBAD", 6, "\uBBB5\uBBB6\uBBB8", 7, "\uBBC1\uBBC2\uBBC3\uBBC5\uBBC6\uBBC7\uBBC9", 6, "\uBBD1\uBBD2\uBBD4", 35, "\uBBFA\uBBFB\uBBFD\uBBFE\uBC01"], + ["9341", "\uBC03", 4, "\uBC0A\uBC0E\uBC10\uBC12\uBC13\uBC19\uBC1A\uBC20\uBC21\uBC22\uBC23\uBC26\uBC28\uBC2A\uBC2B\uBC2C\uBC2E\uBC2F\uBC32\uBC33\uBC35"], + ["9361", "\uBC36\uBC37\uBC39", 6, "\uBC42\uBC46\uBC47\uBC48\uBC4A\uBC4B\uBC4E\uBC4F\uBC51", 8], + ["9381", "\uBC5A\uBC5B\uBC5C\uBC5E", 37, "\uBC86\uBC87\uBC89\uBC8A\uBC8D\uBC8F", 4, "\uBC96\uBC98\uBC9B", 4, "\uBCA2\uBCA3\uBCA5\uBCA6\uBCA9", 6, "\uBCB2\uBCB6", 5, "\uBCBE\uBCBF\uBCC1\uBCC2\uBCC3\uBCC5", 7, "\uBCCE\uBCD2\uBCD3\uBCD4\uBCD6\uBCD7\uBCD9\uBCDA\uBCDB\uBCDD", 22, "\uBCF7\uBCF9\uBCFA\uBCFB\uBCFD"], + ["9441", "\uBCFE", 5, "\uBD06\uBD08\uBD0A", 5, "\uBD11\uBD12\uBD13\uBD15", 8], + ["9461", "\uBD1E", 5, "\uBD25", 6, "\uBD2D", 12], + ["9481", "\uBD3A", 5, "\uBD41", 6, "\uBD4A\uBD4B\uBD4D\uBD4E\uBD4F\uBD51", 6, "\uBD5A", 9, "\uBD65\uBD66\uBD67\uBD69", 22, "\uBD82\uBD83\uBD85\uBD86\uBD8B", 4, "\uBD92\uBD94\uBD96\uBD97\uBD98\uBD9B\uBD9D", 6, "\uBDA5", 10, "\uBDB1", 6, "\uBDB9", 24], + ["9541", "\uBDD2\uBDD3\uBDD6\uBDD7\uBDD9\uBDDA\uBDDB\uBDDD", 11, "\uBDEA", 5, "\uBDF1"], + ["9561", "\uBDF2\uBDF3\uBDF5\uBDF6\uBDF7\uBDF9", 6, "\uBE01\uBE02\uBE04\uBE06", 5, "\uBE0E\uBE0F\uBE11\uBE12\uBE13"], + ["9581", "\uBE15", 6, "\uBE1E\uBE20", 35, "\uBE46\uBE47\uBE49\uBE4A\uBE4B\uBE4D\uBE4F", 4, "\uBE56\uBE58\uBE5C\uBE5D\uBE5E\uBE5F\uBE62\uBE63\uBE65\uBE66\uBE67\uBE69\uBE6B", 4, "\uBE72\uBE76", 4, "\uBE7E\uBE7F\uBE81\uBE82\uBE83\uBE85", 6, "\uBE8E\uBE92", 5, "\uBE9A", 13, "\uBEA9", 14], + ["9641", "\uBEB8", 23, "\uBED2\uBED3"], + ["9661", "\uBED5\uBED6\uBED9", 6, "\uBEE1\uBEE2\uBEE6", 5, "\uBEED", 8], + ["9681", "\uBEF6", 10, "\uBF02", 5, "\uBF0A", 13, "\uBF1A\uBF1E", 33, "\uBF42\uBF43\uBF45\uBF46\uBF47\uBF49", 6, "\uBF52\uBF53\uBF54\uBF56", 44], + ["9741", "\uBF83", 16, "\uBF95", 8], + ["9761", "\uBF9E", 17, "\uBFB1", 7], + ["9781", "\uBFB9", 11, "\uBFC6", 5, "\uBFCE\uBFCF\uBFD1\uBFD2\uBFD3\uBFD5", 6, "\uBFDD\uBFDE\uBFE0\uBFE2", 89, "\uC03D\uC03E\uC03F"], + ["9841", "\uC040", 16, "\uC052", 5, "\uC059\uC05A\uC05B"], + ["9861", "\uC05D\uC05E\uC05F\uC061", 6, "\uC06A", 15], + ["9881", "\uC07A", 21, "\uC092\uC093\uC095\uC096\uC097\uC099", 6, "\uC0A2\uC0A4\uC0A6", 5, "\uC0AE\uC0B1\uC0B2\uC0B7", 4, "\uC0BE\uC0C2\uC0C3\uC0C4\uC0C6\uC0C7\uC0CA\uC0CB\uC0CD\uC0CE\uC0CF\uC0D1", 6, "\uC0DA\uC0DE", 5, "\uC0E6\uC0E7\uC0E9\uC0EA\uC0EB\uC0ED", 6, "\uC0F6\uC0F8\uC0FA", 5, "\uC101\uC102\uC103\uC105\uC106\uC107\uC109", 6, "\uC111\uC112\uC113\uC114\uC116", 5, "\uC121\uC122\uC125\uC128\uC129\uC12A\uC12B\uC12E"], + ["9941", "\uC132\uC133\uC134\uC135\uC137\uC13A\uC13B\uC13D\uC13E\uC13F\uC141", 6, "\uC14A\uC14E", 5, "\uC156\uC157"], + ["9961", "\uC159\uC15A\uC15B\uC15D", 6, "\uC166\uC16A", 5, "\uC171\uC172\uC173\uC175\uC176\uC177\uC179\uC17A\uC17B"], + ["9981", "\uC17C", 8, "\uC186", 5, "\uC18F\uC191\uC192\uC193\uC195\uC197", 4, "\uC19E\uC1A0\uC1A2\uC1A3\uC1A4\uC1A6\uC1A7\uC1AA\uC1AB\uC1AD\uC1AE\uC1AF\uC1B1", 11, "\uC1BE", 5, "\uC1C5\uC1C6\uC1C7\uC1C9\uC1CA\uC1CB\uC1CD", 6, "\uC1D5\uC1D6\uC1D9", 6, "\uC1E1\uC1E2\uC1E3\uC1E5\uC1E6\uC1E7\uC1E9", 6, "\uC1F2\uC1F4", 7, "\uC1FE\uC1FF\uC201\uC202\uC203\uC205", 6, "\uC20E\uC210\uC212", 5, "\uC21A\uC21B\uC21D\uC21E\uC221\uC222\uC223"], + ["9a41", "\uC224\uC225\uC226\uC227\uC22A\uC22C\uC22E\uC230\uC233\uC235", 16], + ["9a61", "\uC246\uC247\uC249", 6, "\uC252\uC253\uC255\uC256\uC257\uC259", 6, "\uC261\uC262\uC263\uC264\uC266"], + ["9a81", "\uC267", 4, "\uC26E\uC26F\uC271\uC272\uC273\uC275", 6, "\uC27E\uC280\uC282", 5, "\uC28A", 5, "\uC291", 6, "\uC299\uC29A\uC29C\uC29E", 5, "\uC2A6\uC2A7\uC2A9\uC2AA\uC2AB\uC2AE", 5, "\uC2B6\uC2B8\uC2BA", 33, "\uC2DE\uC2DF\uC2E1\uC2E2\uC2E5", 5, "\uC2EE\uC2F0\uC2F2\uC2F3\uC2F4\uC2F5\uC2F7\uC2FA\uC2FD\uC2FE\uC2FF\uC301", 6, "\uC30A\uC30B\uC30E\uC30F"], + ["9b41", "\uC310\uC311\uC312\uC316\uC317\uC319\uC31A\uC31B\uC31D", 6, "\uC326\uC327\uC32A", 8], + ["9b61", "\uC333", 17, "\uC346", 7], + ["9b81", "\uC34E", 25, "\uC36A\uC36B\uC36D\uC36E\uC36F\uC371\uC373", 4, "\uC37A\uC37B\uC37E", 5, "\uC385\uC386\uC387\uC389\uC38A\uC38B\uC38D", 50, "\uC3C1", 22, "\uC3DA"], + ["9c41", "\uC3DB\uC3DD\uC3DE\uC3E1\uC3E3", 4, "\uC3EA\uC3EB\uC3EC\uC3EE", 5, "\uC3F6\uC3F7\uC3F9", 5], + ["9c61", "\uC3FF", 8, "\uC409", 6, "\uC411", 9], + ["9c81", "\uC41B", 8, "\uC425", 6, "\uC42D\uC42E\uC42F\uC431\uC432\uC433\uC435", 6, "\uC43E", 9, "\uC449", 26, "\uC466\uC467\uC469\uC46A\uC46B\uC46D", 6, "\uC476\uC477\uC478\uC47A", 5, "\uC481", 18, "\uC495", 6, "\uC49D", 12], + ["9d41", "\uC4AA", 13, "\uC4B9\uC4BA\uC4BB\uC4BD", 8], + ["9d61", "\uC4C6", 25], + ["9d81", "\uC4E0", 8, "\uC4EA", 5, "\uC4F2\uC4F3\uC4F5\uC4F6\uC4F7\uC4F9\uC4FB\uC4FC\uC4FD\uC4FE\uC502", 9, "\uC50D\uC50E\uC50F\uC511\uC512\uC513\uC515", 6, "\uC51D", 10, "\uC52A\uC52B\uC52D\uC52E\uC52F\uC531", 6, "\uC53A\uC53C\uC53E", 5, "\uC546\uC547\uC54B\uC54F\uC550\uC551\uC552\uC556\uC55A\uC55B\uC55C\uC55F\uC562\uC563\uC565\uC566\uC567\uC569", 6, "\uC572\uC576", 5, "\uC57E\uC57F\uC581\uC582\uC583\uC585\uC586\uC588\uC589\uC58A\uC58B\uC58E\uC590\uC592\uC593\uC594"], + ["9e41", "\uC596\uC599\uC59A\uC59B\uC59D\uC59E\uC59F\uC5A1", 7, "\uC5AA", 9, "\uC5B6"], + ["9e61", "\uC5B7\uC5BA\uC5BF", 4, "\uC5CB\uC5CD\uC5CF\uC5D2\uC5D3\uC5D5\uC5D6\uC5D7\uC5D9", 6, "\uC5E2\uC5E4\uC5E6\uC5E7"], + ["9e81", "\uC5E8\uC5E9\uC5EA\uC5EB\uC5EF\uC5F1\uC5F2\uC5F3\uC5F5\uC5F8\uC5F9\uC5FA\uC5FB\uC602\uC603\uC604\uC609\uC60A\uC60B\uC60D\uC60E\uC60F\uC611", 6, "\uC61A\uC61D", 6, "\uC626\uC627\uC629\uC62A\uC62B\uC62F\uC631\uC632\uC636\uC638\uC63A\uC63C\uC63D\uC63E\uC63F\uC642\uC643\uC645\uC646\uC647\uC649", 6, "\uC652\uC656", 5, "\uC65E\uC65F\uC661", 10, "\uC66D\uC66E\uC670\uC672", 5, "\uC67A\uC67B\uC67D\uC67E\uC67F\uC681", 6, "\uC68A\uC68C\uC68E", 5, "\uC696\uC697\uC699\uC69A\uC69B\uC69D", 6, "\uC6A6"], + ["9f41", "\uC6A8\uC6AA", 5, "\uC6B2\uC6B3\uC6B5\uC6B6\uC6B7\uC6BB", 4, "\uC6C2\uC6C4\uC6C6", 5, "\uC6CE"], + ["9f61", "\uC6CF\uC6D1\uC6D2\uC6D3\uC6D5", 6, "\uC6DE\uC6DF\uC6E2", 5, "\uC6EA\uC6EB\uC6ED\uC6EE\uC6EF\uC6F1\uC6F2"], + ["9f81", "\uC6F3", 4, "\uC6FA\uC6FB\uC6FC\uC6FE", 5, "\uC706\uC707\uC709\uC70A\uC70B\uC70D", 6, "\uC716\uC718\uC71A", 5, "\uC722\uC723\uC725\uC726\uC727\uC729", 6, "\uC732\uC734\uC736\uC738\uC739\uC73A\uC73B\uC73E\uC73F\uC741\uC742\uC743\uC745", 4, "\uC74B\uC74E\uC750\uC759\uC75A\uC75B\uC75D\uC75E\uC75F\uC761", 6, "\uC769\uC76A\uC76C", 7, "\uC776\uC777\uC779\uC77A\uC77B\uC77F\uC780\uC781\uC782\uC786\uC78B\uC78C\uC78D\uC78F\uC792\uC793\uC795\uC799\uC79B", 4, "\uC7A2\uC7A7", 4, "\uC7AE\uC7AF\uC7B1\uC7B2\uC7B3\uC7B5\uC7B6\uC7B7"], + ["a041", "\uC7B8\uC7B9\uC7BA\uC7BB\uC7BE\uC7C2", 5, "\uC7CA\uC7CB\uC7CD\uC7CF\uC7D1", 6, "\uC7D9\uC7DA\uC7DB\uC7DC"], + ["a061", "\uC7DE", 5, "\uC7E5\uC7E6\uC7E7\uC7E9\uC7EA\uC7EB\uC7ED", 13], + ["a081", "\uC7FB", 4, "\uC802\uC803\uC805\uC806\uC807\uC809\uC80B", 4, "\uC812\uC814\uC817", 4, "\uC81E\uC81F\uC821\uC822\uC823\uC825", 6, "\uC82E\uC830\uC832", 5, "\uC839\uC83A\uC83B\uC83D\uC83E\uC83F\uC841", 6, "\uC84A\uC84B\uC84E", 5, "\uC855", 26, "\uC872\uC873\uC875\uC876\uC877\uC879\uC87B", 4, "\uC882\uC884\uC888\uC889\uC88A\uC88E", 5, "\uC895", 7, "\uC89E\uC8A0\uC8A2\uC8A3\uC8A4"], + ["a141", "\uC8A5\uC8A6\uC8A7\uC8A9", 18, "\uC8BE\uC8BF\uC8C0\uC8C1"], + ["a161", "\uC8C2\uC8C3\uC8C5\uC8C6\uC8C7\uC8C9\uC8CA\uC8CB\uC8CD", 6, "\uC8D6\uC8D8\uC8DA", 5, "\uC8E2\uC8E3\uC8E5"], + ["a181", "\uC8E6", 14, "\uC8F6", 5, "\uC8FE\uC8FF\uC901\uC902\uC903\uC907", 4, "\uC90E\u3000\u3001\u3002\xB7\u2025\u2026\xA8\u3003\xAD\u2015\u2225\uFF3C\u223C\u2018\u2019\u201C\u201D\u3014\u3015\u3008", 9, "\xB1\xD7\xF7\u2260\u2264\u2265\u221E\u2234\xB0\u2032\u2033\u2103\u212B\uFFE0\uFFE1\uFFE5\u2642\u2640\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\xA7\u203B\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u2192\u2190\u2191\u2193\u2194\u3013\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229\u2227\u2228\uFFE2"], + ["a241", "\uC910\uC912", 5, "\uC919", 18], + ["a261", "\uC92D", 6, "\uC935", 18], + ["a281", "\uC948", 7, "\uC952\uC953\uC955\uC956\uC957\uC959", 6, "\uC962\uC964", 7, "\uC96D\uC96E\uC96F\u21D2\u21D4\u2200\u2203\xB4\uFF5E\u02C7\u02D8\u02DD\u02DA\u02D9\xB8\u02DB\xA1\xBF\u02D0\u222E\u2211\u220F\xA4\u2109\u2030\u25C1\u25C0\u25B7\u25B6\u2664\u2660\u2661\u2665\u2667\u2663\u2299\u25C8\u25A3\u25D0\u25D1\u2592\u25A4\u25A5\u25A8\u25A7\u25A6\u25A9\u2668\u260F\u260E\u261C\u261E\xB6\u2020\u2021\u2195\u2197\u2199\u2196\u2198\u266D\u2669\u266A\u266C\u327F\u321C\u2116\u33C7\u2122\u33C2\u33D8\u2121\u20AC\xAE"], + ["a341", "\uC971\uC972\uC973\uC975", 6, "\uC97D", 10, "\uC98A\uC98B\uC98D\uC98E\uC98F"], + ["a361", "\uC991", 6, "\uC99A\uC99C\uC99E", 16], + ["a381", "\uC9AF", 16, "\uC9C2\uC9C3\uC9C5\uC9C6\uC9C9\uC9CB", 4, "\uC9D2\uC9D4\uC9D7\uC9D8\uC9DB\uFF01", 58, "\uFFE6\uFF3D", 32, "\uFFE3"], + ["a441", "\uC9DE\uC9DF\uC9E1\uC9E3\uC9E5\uC9E6\uC9E8\uC9E9\uC9EA\uC9EB\uC9EE\uC9F2", 5, "\uC9FA\uC9FB\uC9FD\uC9FE\uC9FF\uCA01\uCA02\uCA03\uCA04"], + ["a461", "\uCA05\uCA06\uCA07\uCA0A\uCA0E", 5, "\uCA15\uCA16\uCA17\uCA19", 12], + ["a481", "\uCA26\uCA27\uCA28\uCA2A", 28, "\u3131", 93], + ["a541", "\uCA47", 4, "\uCA4E\uCA4F\uCA51\uCA52\uCA53\uCA55", 6, "\uCA5E\uCA62", 5, "\uCA69\uCA6A"], + ["a561", "\uCA6B", 17, "\uCA7E", 5, "\uCA85\uCA86"], + ["a581", "\uCA87", 16, "\uCA99", 14, "\u2170", 9], + ["a5b0", "\u2160", 9], + ["a5c1", "\u0391", 16, "\u03A3", 6], + ["a5e1", "\u03B1", 16, "\u03C3", 6], + ["a641", "\uCAA8", 19, "\uCABE\uCABF\uCAC1\uCAC2\uCAC3\uCAC5"], + ["a661", "\uCAC6", 5, "\uCACE\uCAD0\uCAD2\uCAD4\uCAD5\uCAD6\uCAD7\uCADA", 5, "\uCAE1", 6], + ["a681", "\uCAE8\uCAE9\uCAEA\uCAEB\uCAED", 6, "\uCAF5", 18, "\uCB09\uCB0A\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542\u2512\u2511\u251A\u2519\u2516\u2515\u250E\u250D\u251E\u251F\u2521\u2522\u2526\u2527\u2529\u252A\u252D\u252E\u2531\u2532\u2535\u2536\u2539\u253A\u253D\u253E\u2540\u2541\u2543", 7], + ["a741", "\uCB0B", 4, "\uCB11\uCB12\uCB13\uCB15\uCB16\uCB17\uCB19", 6, "\uCB22", 7], + ["a761", "\uCB2A", 22, "\uCB42\uCB43\uCB44"], + ["a781", "\uCB45\uCB46\uCB47\uCB4A\uCB4B\uCB4D\uCB4E\uCB4F\uCB51", 6, "\uCB5A\uCB5B\uCB5C\uCB5E", 5, "\uCB65", 7, "\u3395\u3396\u3397\u2113\u3398\u33C4\u33A3\u33A4\u33A5\u33A6\u3399", 9, "\u33CA\u338D\u338E\u338F\u33CF\u3388\u3389\u33C8\u33A7\u33A8\u33B0", 9, "\u3380", 4, "\u33BA", 5, "\u3390", 4, "\u2126\u33C0\u33C1\u338A\u338B\u338C\u33D6\u33C5\u33AD\u33AE\u33AF\u33DB\u33A9\u33AA\u33AB\u33AC\u33DD\u33D0\u33D3\u33C3\u33C9\u33DC\u33C6"], + ["a841", "\uCB6D", 10, "\uCB7A", 14], + ["a861", "\uCB89", 18, "\uCB9D", 6], + ["a881", "\uCBA4", 19, "\uCBB9", 11, "\xC6\xD0\xAA\u0126"], + ["a8a6", "\u0132"], + ["a8a8", "\u013F\u0141\xD8\u0152\xBA\xDE\u0166\u014A"], + ["a8b1", "\u3260", 27, "\u24D0", 25, "\u2460", 14, "\xBD\u2153\u2154\xBC\xBE\u215B\u215C\u215D\u215E"], + ["a941", "\uCBC5", 14, "\uCBD5", 10], + ["a961", "\uCBE0\uCBE1\uCBE2\uCBE3\uCBE5\uCBE6\uCBE8\uCBEA", 18], + ["a981", "\uCBFD", 14, "\uCC0E\uCC0F\uCC11\uCC12\uCC13\uCC15", 6, "\uCC1E\uCC1F\uCC20\uCC23\uCC24\xE6\u0111\xF0\u0127\u0131\u0133\u0138\u0140\u0142\xF8\u0153\xDF\xFE\u0167\u014B\u0149\u3200", 27, "\u249C", 25, "\u2474", 14, "\xB9\xB2\xB3\u2074\u207F\u2081\u2082\u2083\u2084"], + ["aa41", "\uCC25\uCC26\uCC2A\uCC2B\uCC2D\uCC2F\uCC31", 6, "\uCC3A\uCC3F", 4, "\uCC46\uCC47\uCC49\uCC4A\uCC4B\uCC4D\uCC4E"], + ["aa61", "\uCC4F", 4, "\uCC56\uCC5A", 5, "\uCC61\uCC62\uCC63\uCC65\uCC67\uCC69", 6, "\uCC71\uCC72"], + ["aa81", "\uCC73\uCC74\uCC76", 29, "\u3041", 82], + ["ab41", "\uCC94\uCC95\uCC96\uCC97\uCC9A\uCC9B\uCC9D\uCC9E\uCC9F\uCCA1", 6, "\uCCAA\uCCAE", 5, "\uCCB6\uCCB7\uCCB9"], + ["ab61", "\uCCBA\uCCBB\uCCBD", 6, "\uCCC6\uCCC8\uCCCA", 5, "\uCCD1\uCCD2\uCCD3\uCCD5", 5], + ["ab81", "\uCCDB", 8, "\uCCE5", 6, "\uCCED\uCCEE\uCCEF\uCCF1", 12, "\u30A1", 85], + ["ac41", "\uCCFE\uCCFF\uCD00\uCD02", 5, "\uCD0A\uCD0B\uCD0D\uCD0E\uCD0F\uCD11", 6, "\uCD1A\uCD1C\uCD1E\uCD1F\uCD20"], + ["ac61", "\uCD21\uCD22\uCD23\uCD25\uCD26\uCD27\uCD29\uCD2A\uCD2B\uCD2D", 11, "\uCD3A", 4], + ["ac81", "\uCD3F", 28, "\uCD5D\uCD5E\uCD5F\u0410", 5, "\u0401\u0416", 25], + ["acd1", "\u0430", 5, "\u0451\u0436", 25], + ["ad41", "\uCD61\uCD62\uCD63\uCD65", 6, "\uCD6E\uCD70\uCD72", 5, "\uCD79", 7], + ["ad61", "\uCD81", 6, "\uCD89", 10, "\uCD96\uCD97\uCD99\uCD9A\uCD9B\uCD9D\uCD9E\uCD9F"], + ["ad81", "\uCDA0\uCDA1\uCDA2\uCDA3\uCDA6\uCDA8\uCDAA", 5, "\uCDB1", 18, "\uCDC5"], + ["ae41", "\uCDC6", 5, "\uCDCD\uCDCE\uCDCF\uCDD1", 16], + ["ae61", "\uCDE2", 5, "\uCDE9\uCDEA\uCDEB\uCDED\uCDEE\uCDEF\uCDF1", 6, "\uCDFA\uCDFC\uCDFE", 4], + ["ae81", "\uCE03\uCE05\uCE06\uCE07\uCE09\uCE0A\uCE0B\uCE0D", 6, "\uCE15\uCE16\uCE17\uCE18\uCE1A", 5, "\uCE22\uCE23\uCE25\uCE26\uCE27\uCE29\uCE2A\uCE2B"], + ["af41", "\uCE2C\uCE2D\uCE2E\uCE2F\uCE32\uCE34\uCE36", 19], + ["af61", "\uCE4A", 13, "\uCE5A\uCE5B\uCE5D\uCE5E\uCE62", 5, "\uCE6A\uCE6C"], + ["af81", "\uCE6E", 5, "\uCE76\uCE77\uCE79\uCE7A\uCE7B\uCE7D", 6, "\uCE86\uCE88\uCE8A", 5, "\uCE92\uCE93\uCE95\uCE96\uCE97\uCE99"], + ["b041", "\uCE9A", 5, "\uCEA2\uCEA6", 5, "\uCEAE", 12], + ["b061", "\uCEBB", 5, "\uCEC2", 19], + ["b081", "\uCED6", 13, "\uCEE6\uCEE7\uCEE9\uCEEA\uCEED", 6, "\uCEF6\uCEFA", 5, "\uAC00\uAC01\uAC04\uAC07\uAC08\uAC09\uAC0A\uAC10", 7, "\uAC19", 4, "\uAC20\uAC24\uAC2C\uAC2D\uAC2F\uAC30\uAC31\uAC38\uAC39\uAC3C\uAC40\uAC4B\uAC4D\uAC54\uAC58\uAC5C\uAC70\uAC71\uAC74\uAC77\uAC78\uAC7A\uAC80\uAC81\uAC83\uAC84\uAC85\uAC86\uAC89\uAC8A\uAC8B\uAC8C\uAC90\uAC94\uAC9C\uAC9D\uAC9F\uACA0\uACA1\uACA8\uACA9\uACAA\uACAC\uACAF\uACB0\uACB8\uACB9\uACBB\uACBC\uACBD\uACC1\uACC4\uACC8\uACCC\uACD5\uACD7\uACE0\uACE1\uACE4\uACE7\uACE8\uACEA\uACEC\uACEF\uACF0\uACF1\uACF3\uACF5\uACF6\uACFC\uACFD\uAD00\uAD04\uAD06"], + ["b141", "\uCF02\uCF03\uCF05\uCF06\uCF07\uCF09", 6, "\uCF12\uCF14\uCF16", 5, "\uCF1D\uCF1E\uCF1F\uCF21\uCF22\uCF23"], + ["b161", "\uCF25", 6, "\uCF2E\uCF32", 5, "\uCF39", 11], + ["b181", "\uCF45", 14, "\uCF56\uCF57\uCF59\uCF5A\uCF5B\uCF5D", 6, "\uCF66\uCF68\uCF6A\uCF6B\uCF6C\uAD0C\uAD0D\uAD0F\uAD11\uAD18\uAD1C\uAD20\uAD29\uAD2C\uAD2D\uAD34\uAD35\uAD38\uAD3C\uAD44\uAD45\uAD47\uAD49\uAD50\uAD54\uAD58\uAD61\uAD63\uAD6C\uAD6D\uAD70\uAD73\uAD74\uAD75\uAD76\uAD7B\uAD7C\uAD7D\uAD7F\uAD81\uAD82\uAD88\uAD89\uAD8C\uAD90\uAD9C\uAD9D\uADA4\uADB7\uADC0\uADC1\uADC4\uADC8\uADD0\uADD1\uADD3\uADDC\uADE0\uADE4\uADF8\uADF9\uADFC\uADFF\uAE00\uAE01\uAE08\uAE09\uAE0B\uAE0D\uAE14\uAE30\uAE31\uAE34\uAE37\uAE38\uAE3A\uAE40\uAE41\uAE43\uAE45\uAE46\uAE4A\uAE4C\uAE4D\uAE4E\uAE50\uAE54\uAE56\uAE5C\uAE5D\uAE5F\uAE60\uAE61\uAE65\uAE68\uAE69\uAE6C\uAE70\uAE78"], + ["b241", "\uCF6D\uCF6E\uCF6F\uCF72\uCF73\uCF75\uCF76\uCF77\uCF79", 6, "\uCF81\uCF82\uCF83\uCF84\uCF86", 5, "\uCF8D"], + ["b261", "\uCF8E", 18, "\uCFA2", 5, "\uCFA9"], + ["b281", "\uCFAA", 5, "\uCFB1", 18, "\uCFC5", 6, "\uAE79\uAE7B\uAE7C\uAE7D\uAE84\uAE85\uAE8C\uAEBC\uAEBD\uAEBE\uAEC0\uAEC4\uAECC\uAECD\uAECF\uAED0\uAED1\uAED8\uAED9\uAEDC\uAEE8\uAEEB\uAEED\uAEF4\uAEF8\uAEFC\uAF07\uAF08\uAF0D\uAF10\uAF2C\uAF2D\uAF30\uAF32\uAF34\uAF3C\uAF3D\uAF3F\uAF41\uAF42\uAF43\uAF48\uAF49\uAF50\uAF5C\uAF5D\uAF64\uAF65\uAF79\uAF80\uAF84\uAF88\uAF90\uAF91\uAF95\uAF9C\uAFB8\uAFB9\uAFBC\uAFC0\uAFC7\uAFC8\uAFC9\uAFCB\uAFCD\uAFCE\uAFD4\uAFDC\uAFE8\uAFE9\uAFF0\uAFF1\uAFF4\uAFF8\uB000\uB001\uB004\uB00C\uB010\uB014\uB01C\uB01D\uB028\uB044\uB045\uB048\uB04A\uB04C\uB04E\uB053\uB054\uB055\uB057\uB059"], + ["b341", "\uCFCC", 19, "\uCFE2\uCFE3\uCFE5\uCFE6\uCFE7\uCFE9"], + ["b361", "\uCFEA", 5, "\uCFF2\uCFF4\uCFF6", 5, "\uCFFD\uCFFE\uCFFF\uD001\uD002\uD003\uD005", 5], + ["b381", "\uD00B", 5, "\uD012", 5, "\uD019", 19, "\uB05D\uB07C\uB07D\uB080\uB084\uB08C\uB08D\uB08F\uB091\uB098\uB099\uB09A\uB09C\uB09F\uB0A0\uB0A1\uB0A2\uB0A8\uB0A9\uB0AB", 4, "\uB0B1\uB0B3\uB0B4\uB0B5\uB0B8\uB0BC\uB0C4\uB0C5\uB0C7\uB0C8\uB0C9\uB0D0\uB0D1\uB0D4\uB0D8\uB0E0\uB0E5\uB108\uB109\uB10B\uB10C\uB110\uB112\uB113\uB118\uB119\uB11B\uB11C\uB11D\uB123\uB124\uB125\uB128\uB12C\uB134\uB135\uB137\uB138\uB139\uB140\uB141\uB144\uB148\uB150\uB151\uB154\uB155\uB158\uB15C\uB160\uB178\uB179\uB17C\uB180\uB182\uB188\uB189\uB18B\uB18D\uB192\uB193\uB194\uB198\uB19C\uB1A8\uB1CC\uB1D0\uB1D4\uB1DC\uB1DD"], + ["b441", "\uD02E", 5, "\uD036\uD037\uD039\uD03A\uD03B\uD03D", 6, "\uD046\uD048\uD04A", 5], + ["b461", "\uD051\uD052\uD053\uD055\uD056\uD057\uD059", 6, "\uD061", 10, "\uD06E\uD06F"], + ["b481", "\uD071\uD072\uD073\uD075", 6, "\uD07E\uD07F\uD080\uD082", 18, "\uB1DF\uB1E8\uB1E9\uB1EC\uB1F0\uB1F9\uB1FB\uB1FD\uB204\uB205\uB208\uB20B\uB20C\uB214\uB215\uB217\uB219\uB220\uB234\uB23C\uB258\uB25C\uB260\uB268\uB269\uB274\uB275\uB27C\uB284\uB285\uB289\uB290\uB291\uB294\uB298\uB299\uB29A\uB2A0\uB2A1\uB2A3\uB2A5\uB2A6\uB2AA\uB2AC\uB2B0\uB2B4\uB2C8\uB2C9\uB2CC\uB2D0\uB2D2\uB2D8\uB2D9\uB2DB\uB2DD\uB2E2\uB2E4\uB2E5\uB2E6\uB2E8\uB2EB", 4, "\uB2F3\uB2F4\uB2F5\uB2F7", 4, "\uB2FF\uB300\uB301\uB304\uB308\uB310\uB311\uB313\uB314\uB315\uB31C\uB354\uB355\uB356\uB358\uB35B\uB35C\uB35E\uB35F\uB364\uB365"], + ["b541", "\uD095", 14, "\uD0A6\uD0A7\uD0A9\uD0AA\uD0AB\uD0AD", 5], + ["b561", "\uD0B3\uD0B6\uD0B8\uD0BA", 5, "\uD0C2\uD0C3\uD0C5\uD0C6\uD0C7\uD0CA", 5, "\uD0D2\uD0D6", 4], + ["b581", "\uD0DB\uD0DE\uD0DF\uD0E1\uD0E2\uD0E3\uD0E5", 6, "\uD0EE\uD0F2", 5, "\uD0F9", 11, "\uB367\uB369\uB36B\uB36E\uB370\uB371\uB374\uB378\uB380\uB381\uB383\uB384\uB385\uB38C\uB390\uB394\uB3A0\uB3A1\uB3A8\uB3AC\uB3C4\uB3C5\uB3C8\uB3CB\uB3CC\uB3CE\uB3D0\uB3D4\uB3D5\uB3D7\uB3D9\uB3DB\uB3DD\uB3E0\uB3E4\uB3E8\uB3FC\uB410\uB418\uB41C\uB420\uB428\uB429\uB42B\uB434\uB450\uB451\uB454\uB458\uB460\uB461\uB463\uB465\uB46C\uB480\uB488\uB49D\uB4A4\uB4A8\uB4AC\uB4B5\uB4B7\uB4B9\uB4C0\uB4C4\uB4C8\uB4D0\uB4D5\uB4DC\uB4DD\uB4E0\uB4E3\uB4E4\uB4E6\uB4EC\uB4ED\uB4EF\uB4F1\uB4F8\uB514\uB515\uB518\uB51B\uB51C\uB524\uB525\uB527\uB528\uB529\uB52A\uB530\uB531\uB534\uB538"], + ["b641", "\uD105", 7, "\uD10E", 17], + ["b661", "\uD120", 15, "\uD132\uD133\uD135\uD136\uD137\uD139\uD13B\uD13C\uD13D\uD13E"], + ["b681", "\uD13F\uD142\uD146", 5, "\uD14E\uD14F\uD151\uD152\uD153\uD155", 6, "\uD15E\uD160\uD162", 5, "\uD169\uD16A\uD16B\uD16D\uB540\uB541\uB543\uB544\uB545\uB54B\uB54C\uB54D\uB550\uB554\uB55C\uB55D\uB55F\uB560\uB561\uB5A0\uB5A1\uB5A4\uB5A8\uB5AA\uB5AB\uB5B0\uB5B1\uB5B3\uB5B4\uB5B5\uB5BB\uB5BC\uB5BD\uB5C0\uB5C4\uB5CC\uB5CD\uB5CF\uB5D0\uB5D1\uB5D8\uB5EC\uB610\uB611\uB614\uB618\uB625\uB62C\uB634\uB648\uB664\uB668\uB69C\uB69D\uB6A0\uB6A4\uB6AB\uB6AC\uB6B1\uB6D4\uB6F0\uB6F4\uB6F8\uB700\uB701\uB705\uB728\uB729\uB72C\uB72F\uB730\uB738\uB739\uB73B\uB744\uB748\uB74C\uB754\uB755\uB760\uB764\uB768\uB770\uB771\uB773\uB775\uB77C\uB77D\uB780\uB784\uB78C\uB78D\uB78F\uB790\uB791\uB792\uB796\uB797"], + ["b741", "\uD16E", 13, "\uD17D", 6, "\uD185\uD186\uD187\uD189\uD18A"], + ["b761", "\uD18B", 20, "\uD1A2\uD1A3\uD1A5\uD1A6\uD1A7"], + ["b781", "\uD1A9", 6, "\uD1B2\uD1B4\uD1B6\uD1B7\uD1B8\uD1B9\uD1BB\uD1BD\uD1BE\uD1BF\uD1C1", 14, "\uB798\uB799\uB79C\uB7A0\uB7A8\uB7A9\uB7AB\uB7AC\uB7AD\uB7B4\uB7B5\uB7B8\uB7C7\uB7C9\uB7EC\uB7ED\uB7F0\uB7F4\uB7FC\uB7FD\uB7FF\uB800\uB801\uB807\uB808\uB809\uB80C\uB810\uB818\uB819\uB81B\uB81D\uB824\uB825\uB828\uB82C\uB834\uB835\uB837\uB838\uB839\uB840\uB844\uB851\uB853\uB85C\uB85D\uB860\uB864\uB86C\uB86D\uB86F\uB871\uB878\uB87C\uB88D\uB8A8\uB8B0\uB8B4\uB8B8\uB8C0\uB8C1\uB8C3\uB8C5\uB8CC\uB8D0\uB8D4\uB8DD\uB8DF\uB8E1\uB8E8\uB8E9\uB8EC\uB8F0\uB8F8\uB8F9\uB8FB\uB8FD\uB904\uB918\uB920\uB93C\uB93D\uB940\uB944\uB94C\uB94F\uB951\uB958\uB959\uB95C\uB960\uB968\uB969"], + ["b841", "\uD1D0", 7, "\uD1D9", 17], + ["b861", "\uD1EB", 8, "\uD1F5\uD1F6\uD1F7\uD1F9", 13], + ["b881", "\uD208\uD20A", 5, "\uD211", 24, "\uB96B\uB96D\uB974\uB975\uB978\uB97C\uB984\uB985\uB987\uB989\uB98A\uB98D\uB98E\uB9AC\uB9AD\uB9B0\uB9B4\uB9BC\uB9BD\uB9BF\uB9C1\uB9C8\uB9C9\uB9CC\uB9CE", 4, "\uB9D8\uB9D9\uB9DB\uB9DD\uB9DE\uB9E1\uB9E3\uB9E4\uB9E5\uB9E8\uB9EC\uB9F4\uB9F5\uB9F7\uB9F8\uB9F9\uB9FA\uBA00\uBA01\uBA08\uBA15\uBA38\uBA39\uBA3C\uBA40\uBA42\uBA48\uBA49\uBA4B\uBA4D\uBA4E\uBA53\uBA54\uBA55\uBA58\uBA5C\uBA64\uBA65\uBA67\uBA68\uBA69\uBA70\uBA71\uBA74\uBA78\uBA83\uBA84\uBA85\uBA87\uBA8C\uBAA8\uBAA9\uBAAB\uBAAC\uBAB0\uBAB2\uBAB8\uBAB9\uBABB\uBABD\uBAC4\uBAC8\uBAD8\uBAD9\uBAFC"], + ["b941", "\uD22A\uD22B\uD22E\uD22F\uD231\uD232\uD233\uD235", 6, "\uD23E\uD240\uD242", 5, "\uD249\uD24A\uD24B\uD24C"], + ["b961", "\uD24D", 14, "\uD25D", 6, "\uD265\uD266\uD267\uD268"], + ["b981", "\uD269", 22, "\uD282\uD283\uD285\uD286\uD287\uD289\uD28A\uD28B\uD28C\uBB00\uBB04\uBB0D\uBB0F\uBB11\uBB18\uBB1C\uBB20\uBB29\uBB2B\uBB34\uBB35\uBB36\uBB38\uBB3B\uBB3C\uBB3D\uBB3E\uBB44\uBB45\uBB47\uBB49\uBB4D\uBB4F\uBB50\uBB54\uBB58\uBB61\uBB63\uBB6C\uBB88\uBB8C\uBB90\uBBA4\uBBA8\uBBAC\uBBB4\uBBB7\uBBC0\uBBC4\uBBC8\uBBD0\uBBD3\uBBF8\uBBF9\uBBFC\uBBFF\uBC00\uBC02\uBC08\uBC09\uBC0B\uBC0C\uBC0D\uBC0F\uBC11\uBC14", 4, "\uBC1B", 4, "\uBC24\uBC25\uBC27\uBC29\uBC2D\uBC30\uBC31\uBC34\uBC38\uBC40\uBC41\uBC43\uBC44\uBC45\uBC49\uBC4C\uBC4D\uBC50\uBC5D\uBC84\uBC85\uBC88\uBC8B\uBC8C\uBC8E\uBC94\uBC95\uBC97"], + ["ba41", "\uD28D\uD28E\uD28F\uD292\uD293\uD294\uD296", 5, "\uD29D\uD29E\uD29F\uD2A1\uD2A2\uD2A3\uD2A5", 6, "\uD2AD"], + ["ba61", "\uD2AE\uD2AF\uD2B0\uD2B2", 5, "\uD2BA\uD2BB\uD2BD\uD2BE\uD2C1\uD2C3", 4, "\uD2CA\uD2CC", 5], + ["ba81", "\uD2D2\uD2D3\uD2D5\uD2D6\uD2D7\uD2D9\uD2DA\uD2DB\uD2DD", 6, "\uD2E6", 9, "\uD2F2\uD2F3\uD2F5\uD2F6\uD2F7\uD2F9\uD2FA\uBC99\uBC9A\uBCA0\uBCA1\uBCA4\uBCA7\uBCA8\uBCB0\uBCB1\uBCB3\uBCB4\uBCB5\uBCBC\uBCBD\uBCC0\uBCC4\uBCCD\uBCCF\uBCD0\uBCD1\uBCD5\uBCD8\uBCDC\uBCF4\uBCF5\uBCF6\uBCF8\uBCFC\uBD04\uBD05\uBD07\uBD09\uBD10\uBD14\uBD24\uBD2C\uBD40\uBD48\uBD49\uBD4C\uBD50\uBD58\uBD59\uBD64\uBD68\uBD80\uBD81\uBD84\uBD87\uBD88\uBD89\uBD8A\uBD90\uBD91\uBD93\uBD95\uBD99\uBD9A\uBD9C\uBDA4\uBDB0\uBDB8\uBDD4\uBDD5\uBDD8\uBDDC\uBDE9\uBDF0\uBDF4\uBDF8\uBE00\uBE03\uBE05\uBE0C\uBE0D\uBE10\uBE14\uBE1C\uBE1D\uBE1F\uBE44\uBE45\uBE48\uBE4C\uBE4E\uBE54\uBE55\uBE57\uBE59\uBE5A\uBE5B\uBE60\uBE61\uBE64"], + ["bb41", "\uD2FB", 4, "\uD302\uD304\uD306", 5, "\uD30F\uD311\uD312\uD313\uD315\uD317", 4, "\uD31E\uD322\uD323"], + ["bb61", "\uD324\uD326\uD327\uD32A\uD32B\uD32D\uD32E\uD32F\uD331", 6, "\uD33A\uD33E", 5, "\uD346\uD347\uD348\uD349"], + ["bb81", "\uD34A", 31, "\uBE68\uBE6A\uBE70\uBE71\uBE73\uBE74\uBE75\uBE7B\uBE7C\uBE7D\uBE80\uBE84\uBE8C\uBE8D\uBE8F\uBE90\uBE91\uBE98\uBE99\uBEA8\uBED0\uBED1\uBED4\uBED7\uBED8\uBEE0\uBEE3\uBEE4\uBEE5\uBEEC\uBF01\uBF08\uBF09\uBF18\uBF19\uBF1B\uBF1C\uBF1D\uBF40\uBF41\uBF44\uBF48\uBF50\uBF51\uBF55\uBF94\uBFB0\uBFC5\uBFCC\uBFCD\uBFD0\uBFD4\uBFDC\uBFDF\uBFE1\uC03C\uC051\uC058\uC05C\uC060\uC068\uC069\uC090\uC091\uC094\uC098\uC0A0\uC0A1\uC0A3\uC0A5\uC0AC\uC0AD\uC0AF\uC0B0\uC0B3\uC0B4\uC0B5\uC0B6\uC0BC\uC0BD\uC0BF\uC0C0\uC0C1\uC0C5\uC0C8\uC0C9\uC0CC\uC0D0\uC0D8\uC0D9\uC0DB\uC0DC\uC0DD\uC0E4"], + ["bc41", "\uD36A", 17, "\uD37E\uD37F\uD381\uD382\uD383\uD385\uD386\uD387"], + ["bc61", "\uD388\uD389\uD38A\uD38B\uD38E\uD392", 5, "\uD39A\uD39B\uD39D\uD39E\uD39F\uD3A1", 6, "\uD3AA\uD3AC\uD3AE"], + ["bc81", "\uD3AF", 4, "\uD3B5\uD3B6\uD3B7\uD3B9\uD3BA\uD3BB\uD3BD", 6, "\uD3C6\uD3C7\uD3CA", 5, "\uD3D1", 5, "\uC0E5\uC0E8\uC0EC\uC0F4\uC0F5\uC0F7\uC0F9\uC100\uC104\uC108\uC110\uC115\uC11C", 4, "\uC123\uC124\uC126\uC127\uC12C\uC12D\uC12F\uC130\uC131\uC136\uC138\uC139\uC13C\uC140\uC148\uC149\uC14B\uC14C\uC14D\uC154\uC155\uC158\uC15C\uC164\uC165\uC167\uC168\uC169\uC170\uC174\uC178\uC185\uC18C\uC18D\uC18E\uC190\uC194\uC196\uC19C\uC19D\uC19F\uC1A1\uC1A5\uC1A8\uC1A9\uC1AC\uC1B0\uC1BD\uC1C4\uC1C8\uC1CC\uC1D4\uC1D7\uC1D8\uC1E0\uC1E4\uC1E8\uC1F0\uC1F1\uC1F3\uC1FC\uC1FD\uC200\uC204\uC20C\uC20D\uC20F\uC211\uC218\uC219\uC21C\uC21F\uC220\uC228\uC229\uC22B\uC22D"], + ["bd41", "\uD3D7\uD3D9", 7, "\uD3E2\uD3E4", 7, "\uD3EE\uD3EF\uD3F1\uD3F2\uD3F3\uD3F5\uD3F6\uD3F7"], + ["bd61", "\uD3F8\uD3F9\uD3FA\uD3FB\uD3FE\uD400\uD402", 5, "\uD409", 13], + ["bd81", "\uD417", 5, "\uD41E", 25, "\uC22F\uC231\uC232\uC234\uC248\uC250\uC251\uC254\uC258\uC260\uC265\uC26C\uC26D\uC270\uC274\uC27C\uC27D\uC27F\uC281\uC288\uC289\uC290\uC298\uC29B\uC29D\uC2A4\uC2A5\uC2A8\uC2AC\uC2AD\uC2B4\uC2B5\uC2B7\uC2B9\uC2DC\uC2DD\uC2E0\uC2E3\uC2E4\uC2EB\uC2EC\uC2ED\uC2EF\uC2F1\uC2F6\uC2F8\uC2F9\uC2FB\uC2FC\uC300\uC308\uC309\uC30C\uC30D\uC313\uC314\uC315\uC318\uC31C\uC324\uC325\uC328\uC329\uC345\uC368\uC369\uC36C\uC370\uC372\uC378\uC379\uC37C\uC37D\uC384\uC388\uC38C\uC3C0\uC3D8\uC3D9\uC3DC\uC3DF\uC3E0\uC3E2\uC3E8\uC3E9\uC3ED\uC3F4\uC3F5\uC3F8\uC408\uC410\uC424\uC42C\uC430"], + ["be41", "\uD438", 7, "\uD441\uD442\uD443\uD445", 14], + ["be61", "\uD454", 7, "\uD45D\uD45E\uD45F\uD461\uD462\uD463\uD465", 7, "\uD46E\uD470\uD471\uD472"], + ["be81", "\uD473", 4, "\uD47A\uD47B\uD47D\uD47E\uD481\uD483", 4, "\uD48A\uD48C\uD48E", 5, "\uD495", 8, "\uC434\uC43C\uC43D\uC448\uC464\uC465\uC468\uC46C\uC474\uC475\uC479\uC480\uC494\uC49C\uC4B8\uC4BC\uC4E9\uC4F0\uC4F1\uC4F4\uC4F8\uC4FA\uC4FF\uC500\uC501\uC50C\uC510\uC514\uC51C\uC528\uC529\uC52C\uC530\uC538\uC539\uC53B\uC53D\uC544\uC545\uC548\uC549\uC54A\uC54C\uC54D\uC54E\uC553\uC554\uC555\uC557\uC558\uC559\uC55D\uC55E\uC560\uC561\uC564\uC568\uC570\uC571\uC573\uC574\uC575\uC57C\uC57D\uC580\uC584\uC587\uC58C\uC58D\uC58F\uC591\uC595\uC597\uC598\uC59C\uC5A0\uC5A9\uC5B4\uC5B5\uC5B8\uC5B9\uC5BB\uC5BC\uC5BD\uC5BE\uC5C4", 6, "\uC5CC\uC5CE"], + ["bf41", "\uD49E", 10, "\uD4AA", 14], + ["bf61", "\uD4B9", 18, "\uD4CD\uD4CE\uD4CF\uD4D1\uD4D2\uD4D3\uD4D5"], + ["bf81", "\uD4D6", 5, "\uD4DD\uD4DE\uD4E0", 7, "\uD4E9\uD4EA\uD4EB\uD4ED\uD4EE\uD4EF\uD4F1", 6, "\uD4F9\uD4FA\uD4FC\uC5D0\uC5D1\uC5D4\uC5D8\uC5E0\uC5E1\uC5E3\uC5E5\uC5EC\uC5ED\uC5EE\uC5F0\uC5F4\uC5F6\uC5F7\uC5FC", 5, "\uC605\uC606\uC607\uC608\uC60C\uC610\uC618\uC619\uC61B\uC61C\uC624\uC625\uC628\uC62C\uC62D\uC62E\uC630\uC633\uC634\uC635\uC637\uC639\uC63B\uC640\uC641\uC644\uC648\uC650\uC651\uC653\uC654\uC655\uC65C\uC65D\uC660\uC66C\uC66F\uC671\uC678\uC679\uC67C\uC680\uC688\uC689\uC68B\uC68D\uC694\uC695\uC698\uC69C\uC6A4\uC6A5\uC6A7\uC6A9\uC6B0\uC6B1\uC6B4\uC6B8\uC6B9\uC6BA\uC6C0\uC6C1\uC6C3\uC6C5\uC6CC\uC6CD\uC6D0\uC6D4\uC6DC\uC6DD\uC6E0\uC6E1\uC6E8"], + ["c041", "\uD4FE", 5, "\uD505\uD506\uD507\uD509\uD50A\uD50B\uD50D", 6, "\uD516\uD518", 5], + ["c061", "\uD51E", 25], + ["c081", "\uD538\uD539\uD53A\uD53B\uD53E\uD53F\uD541\uD542\uD543\uD545", 6, "\uD54E\uD550\uD552", 5, "\uD55A\uD55B\uD55D\uD55E\uD55F\uD561\uD562\uD563\uC6E9\uC6EC\uC6F0\uC6F8\uC6F9\uC6FD\uC704\uC705\uC708\uC70C\uC714\uC715\uC717\uC719\uC720\uC721\uC724\uC728\uC730\uC731\uC733\uC735\uC737\uC73C\uC73D\uC740\uC744\uC74A\uC74C\uC74D\uC74F\uC751", 7, "\uC75C\uC760\uC768\uC76B\uC774\uC775\uC778\uC77C\uC77D\uC77E\uC783\uC784\uC785\uC787\uC788\uC789\uC78A\uC78E\uC790\uC791\uC794\uC796\uC797\uC798\uC79A\uC7A0\uC7A1\uC7A3\uC7A4\uC7A5\uC7A6\uC7AC\uC7AD\uC7B0\uC7B4\uC7BC\uC7BD\uC7BF\uC7C0\uC7C1\uC7C8\uC7C9\uC7CC\uC7CE\uC7D0\uC7D8\uC7DD\uC7E4\uC7E8\uC7EC\uC800\uC801\uC804\uC808\uC80A"], + ["c141", "\uD564\uD566\uD567\uD56A\uD56C\uD56E", 5, "\uD576\uD577\uD579\uD57A\uD57B\uD57D", 6, "\uD586\uD58A\uD58B"], + ["c161", "\uD58C\uD58D\uD58E\uD58F\uD591", 19, "\uD5A6\uD5A7"], + ["c181", "\uD5A8", 31, "\uC810\uC811\uC813\uC815\uC816\uC81C\uC81D\uC820\uC824\uC82C\uC82D\uC82F\uC831\uC838\uC83C\uC840\uC848\uC849\uC84C\uC84D\uC854\uC870\uC871\uC874\uC878\uC87A\uC880\uC881\uC883\uC885\uC886\uC887\uC88B\uC88C\uC88D\uC894\uC89D\uC89F\uC8A1\uC8A8\uC8BC\uC8BD\uC8C4\uC8C8\uC8CC\uC8D4\uC8D5\uC8D7\uC8D9\uC8E0\uC8E1\uC8E4\uC8F5\uC8FC\uC8FD\uC900\uC904\uC905\uC906\uC90C\uC90D\uC90F\uC911\uC918\uC92C\uC934\uC950\uC951\uC954\uC958\uC960\uC961\uC963\uC96C\uC970\uC974\uC97C\uC988\uC989\uC98C\uC990\uC998\uC999\uC99B\uC99D\uC9C0\uC9C1\uC9C4\uC9C7\uC9C8\uC9CA\uC9D0\uC9D1\uC9D3"], + ["c241", "\uD5CA\uD5CB\uD5CD\uD5CE\uD5CF\uD5D1\uD5D3", 4, "\uD5DA\uD5DC\uD5DE", 5, "\uD5E6\uD5E7\uD5E9\uD5EA\uD5EB\uD5ED\uD5EE"], + ["c261", "\uD5EF", 4, "\uD5F6\uD5F8\uD5FA", 5, "\uD602\uD603\uD605\uD606\uD607\uD609", 6, "\uD612"], + ["c281", "\uD616", 5, "\uD61D\uD61E\uD61F\uD621\uD622\uD623\uD625", 7, "\uD62E", 9, "\uD63A\uD63B\uC9D5\uC9D6\uC9D9\uC9DA\uC9DC\uC9DD\uC9E0\uC9E2\uC9E4\uC9E7\uC9EC\uC9ED\uC9EF\uC9F0\uC9F1\uC9F8\uC9F9\uC9FC\uCA00\uCA08\uCA09\uCA0B\uCA0C\uCA0D\uCA14\uCA18\uCA29\uCA4C\uCA4D\uCA50\uCA54\uCA5C\uCA5D\uCA5F\uCA60\uCA61\uCA68\uCA7D\uCA84\uCA98\uCABC\uCABD\uCAC0\uCAC4\uCACC\uCACD\uCACF\uCAD1\uCAD3\uCAD8\uCAD9\uCAE0\uCAEC\uCAF4\uCB08\uCB10\uCB14\uCB18\uCB20\uCB21\uCB41\uCB48\uCB49\uCB4C\uCB50\uCB58\uCB59\uCB5D\uCB64\uCB78\uCB79\uCB9C\uCBB8\uCBD4\uCBE4\uCBE7\uCBE9\uCC0C\uCC0D\uCC10\uCC14\uCC1C\uCC1D\uCC21\uCC22\uCC27\uCC28\uCC29\uCC2C\uCC2E\uCC30\uCC38\uCC39\uCC3B"], + ["c341", "\uD63D\uD63E\uD63F\uD641\uD642\uD643\uD644\uD646\uD647\uD64A\uD64C\uD64E\uD64F\uD650\uD652\uD653\uD656\uD657\uD659\uD65A\uD65B\uD65D", 4], + ["c361", "\uD662", 4, "\uD668\uD66A", 5, "\uD672\uD673\uD675", 11], + ["c381", "\uD681\uD682\uD684\uD686", 5, "\uD68E\uD68F\uD691\uD692\uD693\uD695", 7, "\uD69E\uD6A0\uD6A2", 5, "\uD6A9\uD6AA\uCC3C\uCC3D\uCC3E\uCC44\uCC45\uCC48\uCC4C\uCC54\uCC55\uCC57\uCC58\uCC59\uCC60\uCC64\uCC66\uCC68\uCC70\uCC75\uCC98\uCC99\uCC9C\uCCA0\uCCA8\uCCA9\uCCAB\uCCAC\uCCAD\uCCB4\uCCB5\uCCB8\uCCBC\uCCC4\uCCC5\uCCC7\uCCC9\uCCD0\uCCD4\uCCE4\uCCEC\uCCF0\uCD01\uCD08\uCD09\uCD0C\uCD10\uCD18\uCD19\uCD1B\uCD1D\uCD24\uCD28\uCD2C\uCD39\uCD5C\uCD60\uCD64\uCD6C\uCD6D\uCD6F\uCD71\uCD78\uCD88\uCD94\uCD95\uCD98\uCD9C\uCDA4\uCDA5\uCDA7\uCDA9\uCDB0\uCDC4\uCDCC\uCDD0\uCDE8\uCDEC\uCDF0\uCDF8\uCDF9\uCDFB\uCDFD\uCE04\uCE08\uCE0C\uCE14\uCE19\uCE20\uCE21\uCE24\uCE28\uCE30\uCE31\uCE33\uCE35"], + ["c441", "\uD6AB\uD6AD\uD6AE\uD6AF\uD6B1", 7, "\uD6BA\uD6BC", 7, "\uD6C6\uD6C7\uD6C9\uD6CA\uD6CB"], + ["c461", "\uD6CD\uD6CE\uD6CF\uD6D0\uD6D2\uD6D3\uD6D5\uD6D6\uD6D8\uD6DA", 5, "\uD6E1\uD6E2\uD6E3\uD6E5\uD6E6\uD6E7\uD6E9", 4], + ["c481", "\uD6EE\uD6EF\uD6F1\uD6F2\uD6F3\uD6F4\uD6F6", 5, "\uD6FE\uD6FF\uD701\uD702\uD703\uD705", 11, "\uD712\uD713\uD714\uCE58\uCE59\uCE5C\uCE5F\uCE60\uCE61\uCE68\uCE69\uCE6B\uCE6D\uCE74\uCE75\uCE78\uCE7C\uCE84\uCE85\uCE87\uCE89\uCE90\uCE91\uCE94\uCE98\uCEA0\uCEA1\uCEA3\uCEA4\uCEA5\uCEAC\uCEAD\uCEC1\uCEE4\uCEE5\uCEE8\uCEEB\uCEEC\uCEF4\uCEF5\uCEF7\uCEF8\uCEF9\uCF00\uCF01\uCF04\uCF08\uCF10\uCF11\uCF13\uCF15\uCF1C\uCF20\uCF24\uCF2C\uCF2D\uCF2F\uCF30\uCF31\uCF38\uCF54\uCF55\uCF58\uCF5C\uCF64\uCF65\uCF67\uCF69\uCF70\uCF71\uCF74\uCF78\uCF80\uCF85\uCF8C\uCFA1\uCFA8\uCFB0\uCFC4\uCFE0\uCFE1\uCFE4\uCFE8\uCFF0\uCFF1\uCFF3\uCFF5\uCFFC\uD000\uD004\uD011\uD018\uD02D\uD034\uD035\uD038\uD03C"], + ["c541", "\uD715\uD716\uD717\uD71A\uD71B\uD71D\uD71E\uD71F\uD721", 6, "\uD72A\uD72C\uD72E", 5, "\uD736\uD737\uD739"], + ["c561", "\uD73A\uD73B\uD73D", 6, "\uD745\uD746\uD748\uD74A", 5, "\uD752\uD753\uD755\uD75A", 4], + ["c581", "\uD75F\uD762\uD764\uD766\uD767\uD768\uD76A\uD76B\uD76D\uD76E\uD76F\uD771\uD772\uD773\uD775", 6, "\uD77E\uD77F\uD780\uD782", 5, "\uD78A\uD78B\uD044\uD045\uD047\uD049\uD050\uD054\uD058\uD060\uD06C\uD06D\uD070\uD074\uD07C\uD07D\uD081\uD0A4\uD0A5\uD0A8\uD0AC\uD0B4\uD0B5\uD0B7\uD0B9\uD0C0\uD0C1\uD0C4\uD0C8\uD0C9\uD0D0\uD0D1\uD0D3\uD0D4\uD0D5\uD0DC\uD0DD\uD0E0\uD0E4\uD0EC\uD0ED\uD0EF\uD0F0\uD0F1\uD0F8\uD10D\uD130\uD131\uD134\uD138\uD13A\uD140\uD141\uD143\uD144\uD145\uD14C\uD14D\uD150\uD154\uD15C\uD15D\uD15F\uD161\uD168\uD16C\uD17C\uD184\uD188\uD1A0\uD1A1\uD1A4\uD1A8\uD1B0\uD1B1\uD1B3\uD1B5\uD1BA\uD1BC\uD1C0\uD1D8\uD1F4\uD1F8\uD207\uD209\uD210\uD22C\uD22D\uD230\uD234\uD23C\uD23D\uD23F\uD241\uD248\uD25C"], + ["c641", "\uD78D\uD78E\uD78F\uD791", 6, "\uD79A\uD79C\uD79E", 5], + ["c6a1", "\uD264\uD280\uD281\uD284\uD288\uD290\uD291\uD295\uD29C\uD2A0\uD2A4\uD2AC\uD2B1\uD2B8\uD2B9\uD2BC\uD2BF\uD2C0\uD2C2\uD2C8\uD2C9\uD2CB\uD2D4\uD2D8\uD2DC\uD2E4\uD2E5\uD2F0\uD2F1\uD2F4\uD2F8\uD300\uD301\uD303\uD305\uD30C\uD30D\uD30E\uD310\uD314\uD316\uD31C\uD31D\uD31F\uD320\uD321\uD325\uD328\uD329\uD32C\uD330\uD338\uD339\uD33B\uD33C\uD33D\uD344\uD345\uD37C\uD37D\uD380\uD384\uD38C\uD38D\uD38F\uD390\uD391\uD398\uD399\uD39C\uD3A0\uD3A8\uD3A9\uD3AB\uD3AD\uD3B4\uD3B8\uD3BC\uD3C4\uD3C5\uD3C8\uD3C9\uD3D0\uD3D8\uD3E1\uD3E3\uD3EC\uD3ED\uD3F0\uD3F4\uD3FC\uD3FD\uD3FF\uD401"], + ["c7a1", "\uD408\uD41D\uD440\uD444\uD45C\uD460\uD464\uD46D\uD46F\uD478\uD479\uD47C\uD47F\uD480\uD482\uD488\uD489\uD48B\uD48D\uD494\uD4A9\uD4CC\uD4D0\uD4D4\uD4DC\uD4DF\uD4E8\uD4EC\uD4F0\uD4F8\uD4FB\uD4FD\uD504\uD508\uD50C\uD514\uD515\uD517\uD53C\uD53D\uD540\uD544\uD54C\uD54D\uD54F\uD551\uD558\uD559\uD55C\uD560\uD565\uD568\uD569\uD56B\uD56D\uD574\uD575\uD578\uD57C\uD584\uD585\uD587\uD588\uD589\uD590\uD5A5\uD5C8\uD5C9\uD5CC\uD5D0\uD5D2\uD5D8\uD5D9\uD5DB\uD5DD\uD5E4\uD5E5\uD5E8\uD5EC\uD5F4\uD5F5\uD5F7\uD5F9\uD600\uD601\uD604\uD608\uD610\uD611\uD613\uD614\uD615\uD61C\uD620"], + ["c8a1", "\uD624\uD62D\uD638\uD639\uD63C\uD640\uD645\uD648\uD649\uD64B\uD64D\uD651\uD654\uD655\uD658\uD65C\uD667\uD669\uD670\uD671\uD674\uD683\uD685\uD68C\uD68D\uD690\uD694\uD69D\uD69F\uD6A1\uD6A8\uD6AC\uD6B0\uD6B9\uD6BB\uD6C4\uD6C5\uD6C8\uD6CC\uD6D1\uD6D4\uD6D7\uD6D9\uD6E0\uD6E4\uD6E8\uD6F0\uD6F5\uD6FC\uD6FD\uD700\uD704\uD711\uD718\uD719\uD71C\uD720\uD728\uD729\uD72B\uD72D\uD734\uD735\uD738\uD73C\uD744\uD747\uD749\uD750\uD751\uD754\uD756\uD757\uD758\uD759\uD760\uD761\uD763\uD765\uD769\uD76C\uD770\uD774\uD77C\uD77D\uD781\uD788\uD789\uD78C\uD790\uD798\uD799\uD79B\uD79D"], + ["caa1", "\u4F3D\u4F73\u5047\u50F9\u52A0\u53EF\u5475\u54E5\u5609\u5AC1\u5BB6\u6687\u67B6\u67B7\u67EF\u6B4C\u73C2\u75C2\u7A3C\u82DB\u8304\u8857\u8888\u8A36\u8CC8\u8DCF\u8EFB\u8FE6\u99D5\u523B\u5374\u5404\u606A\u6164\u6BBC\u73CF\u811A\u89BA\u89D2\u95A3\u4F83\u520A\u58BE\u5978\u59E6\u5E72\u5E79\u61C7\u63C0\u6746\u67EC\u687F\u6F97\u764E\u770B\u78F5\u7A08\u7AFF\u7C21\u809D\u826E\u8271\u8AEB\u9593\u4E6B\u559D\u66F7\u6E34\u78A3\u7AED\u845B\u8910\u874E\u97A8\u52D8\u574E\u582A\u5D4C\u611F\u61BE\u6221\u6562\u67D1\u6A44\u6E1B\u7518\u75B3\u76E3\u77B0\u7D3A\u90AF\u9451\u9452\u9F95"], + ["cba1", "\u5323\u5CAC\u7532\u80DB\u9240\u9598\u525B\u5808\u59DC\u5CA1\u5D17\u5EB7\u5F3A\u5F4A\u6177\u6C5F\u757A\u7586\u7CE0\u7D73\u7DB1\u7F8C\u8154\u8221\u8591\u8941\u8B1B\u92FC\u964D\u9C47\u4ECB\u4EF7\u500B\u51F1\u584F\u6137\u613E\u6168\u6539\u69EA\u6F11\u75A5\u7686\u76D6\u7B87\u82A5\u84CB\uF900\u93A7\u958B\u5580\u5BA2\u5751\uF901\u7CB3\u7FB9\u91B5\u5028\u53BB\u5C45\u5DE8\u62D2\u636E\u64DA\u64E7\u6E20\u70AC\u795B\u8DDD\u8E1E\uF902\u907D\u9245\u92F8\u4E7E\u4EF6\u5065\u5DFE\u5EFA\u6106\u6957\u8171\u8654\u8E47\u9375\u9A2B\u4E5E\u5091\u6770\u6840\u5109\u528D\u5292\u6AA2"], + ["cca1", "\u77BC\u9210\u9ED4\u52AB\u602F\u8FF2\u5048\u61A9\u63ED\u64CA\u683C\u6A84\u6FC0\u8188\u89A1\u9694\u5805\u727D\u72AC\u7504\u7D79\u7E6D\u80A9\u898B\u8B74\u9063\u9D51\u6289\u6C7A\u6F54\u7D50\u7F3A\u8A23\u517C\u614A\u7B9D\u8B19\u9257\u938C\u4EAC\u4FD3\u501E\u50BE\u5106\u52C1\u52CD\u537F\u5770\u5883\u5E9A\u5F91\u6176\u61AC\u64CE\u656C\u666F\u66BB\u66F4\u6897\u6D87\u7085\u70F1\u749F\u74A5\u74CA\u75D9\u786C\u78EC\u7ADF\u7AF6\u7D45\u7D93\u8015\u803F\u811B\u8396\u8B66\u8F15\u9015\u93E1\u9803\u9838\u9A5A\u9BE8\u4FC2\u5553\u583A\u5951\u5B63\u5C46\u60B8\u6212\u6842\u68B0"], + ["cda1", "\u68E8\u6EAA\u754C\u7678\u78CE\u7A3D\u7CFB\u7E6B\u7E7C\u8A08\u8AA1\u8C3F\u968E\u9DC4\u53E4\u53E9\u544A\u5471\u56FA\u59D1\u5B64\u5C3B\u5EAB\u62F7\u6537\u6545\u6572\u66A0\u67AF\u69C1\u6CBD\u75FC\u7690\u777E\u7A3F\u7F94\u8003\u80A1\u818F\u82E6\u82FD\u83F0\u85C1\u8831\u88B4\u8AA5\uF903\u8F9C\u932E\u96C7\u9867\u9AD8\u9F13\u54ED\u659B\u66F2\u688F\u7A40\u8C37\u9D60\u56F0\u5764\u5D11\u6606\u68B1\u68CD\u6EFE\u7428\u889E\u9BE4\u6C68\uF904\u9AA8\u4F9B\u516C\u5171\u529F\u5B54\u5DE5\u6050\u606D\u62F1\u63A7\u653B\u73D9\u7A7A\u86A3\u8CA2\u978F\u4E32\u5BE1\u6208\u679C\u74DC"], + ["cea1", "\u79D1\u83D3\u8A87\u8AB2\u8DE8\u904E\u934B\u9846\u5ED3\u69E8\u85FF\u90ED\uF905\u51A0\u5B98\u5BEC\u6163\u68FA\u6B3E\u704C\u742F\u74D8\u7BA1\u7F50\u83C5\u89C0\u8CAB\u95DC\u9928\u522E\u605D\u62EC\u9002\u4F8A\u5149\u5321\u58D9\u5EE3\u66E0\u6D38\u709A\u72C2\u73D6\u7B50\u80F1\u945B\u5366\u639B\u7F6B\u4E56\u5080\u584A\u58DE\u602A\u6127\u62D0\u69D0\u9B41\u5B8F\u7D18\u80B1\u8F5F\u4EA4\u50D1\u54AC\u55AC\u5B0C\u5DA0\u5DE7\u652A\u654E\u6821\u6A4B\u72E1\u768E\u77EF\u7D5E\u7FF9\u81A0\u854E\u86DF\u8F03\u8F4E\u90CA\u9903\u9A55\u9BAB\u4E18\u4E45\u4E5D\u4EC7\u4FF1\u5177\u52FE"], + ["cfa1", "\u5340\u53E3\u53E5\u548E\u5614\u5775\u57A2\u5BC7\u5D87\u5ED0\u61FC\u62D8\u6551\u67B8\u67E9\u69CB\u6B50\u6BC6\u6BEC\u6C42\u6E9D\u7078\u72D7\u7396\u7403\u77BF\u77E9\u7A76\u7D7F\u8009\u81FC\u8205\u820A\u82DF\u8862\u8B33\u8CFC\u8EC0\u9011\u90B1\u9264\u92B6\u99D2\u9A45\u9CE9\u9DD7\u9F9C\u570B\u5C40\u83CA\u97A0\u97AB\u9EB4\u541B\u7A98\u7FA4\u88D9\u8ECD\u90E1\u5800\u5C48\u6398\u7A9F\u5BAE\u5F13\u7A79\u7AAE\u828E\u8EAC\u5026\u5238\u52F8\u5377\u5708\u62F3\u6372\u6B0A\u6DC3\u7737\u53A5\u7357\u8568\u8E76\u95D5\u673A\u6AC3\u6F70\u8A6D\u8ECC\u994B\uF906\u6677\u6B78\u8CB4"], + ["d0a1", "\u9B3C\uF907\u53EB\u572D\u594E\u63C6\u69FB\u73EA\u7845\u7ABA\u7AC5\u7CFE\u8475\u898F\u8D73\u9035\u95A8\u52FB\u5747\u7547\u7B60\u83CC\u921E\uF908\u6A58\u514B\u524B\u5287\u621F\u68D8\u6975\u9699\u50C5\u52A4\u52E4\u61C3\u65A4\u6839\u69FF\u747E\u7B4B\u82B9\u83EB\u89B2\u8B39\u8FD1\u9949\uF909\u4ECA\u5997\u64D2\u6611\u6A8E\u7434\u7981\u79BD\u82A9\u887E\u887F\u895F\uF90A\u9326\u4F0B\u53CA\u6025\u6271\u6C72\u7D1A\u7D66\u4E98\u5162\u77DC\u80AF\u4F01\u4F0E\u5176\u5180\u55DC\u5668\u573B\u57FA\u57FC\u5914\u5947\u5993\u5BC4\u5C90\u5D0E\u5DF1\u5E7E\u5FCC\u6280\u65D7\u65E3"], + ["d1a1", "\u671E\u671F\u675E\u68CB\u68C4\u6A5F\u6B3A\u6C23\u6C7D\u6C82\u6DC7\u7398\u7426\u742A\u7482\u74A3\u7578\u757F\u7881\u78EF\u7941\u7947\u7948\u797A\u7B95\u7D00\u7DBA\u7F88\u8006\u802D\u808C\u8A18\u8B4F\u8C48\u8D77\u9321\u9324\u98E2\u9951\u9A0E\u9A0F\u9A65\u9E92\u7DCA\u4F76\u5409\u62EE\u6854\u91D1\u55AB\u513A\uF90B\uF90C\u5A1C\u61E6\uF90D\u62CF\u62FF\uF90E", 5, "\u90A3\uF914", 4, "\u8AFE\uF919\uF91A\uF91B\uF91C\u6696\uF91D\u7156\uF91E\uF91F\u96E3\uF920\u634F\u637A\u5357\uF921\u678F\u6960\u6E73\uF922\u7537\uF923\uF924\uF925"], + ["d2a1", "\u7D0D\uF926\uF927\u8872\u56CA\u5A18\uF928", 4, "\u4E43\uF92D\u5167\u5948\u67F0\u8010\uF92E\u5973\u5E74\u649A\u79CA\u5FF5\u606C\u62C8\u637B\u5BE7\u5BD7\u52AA\uF92F\u5974\u5F29\u6012\uF930\uF931\uF932\u7459\uF933", 5, "\u99D1\uF939", 10, "\u6FC3\uF944\uF945\u81BF\u8FB2\u60F1\uF946\uF947\u8166\uF948\uF949\u5C3F\uF94A", 7, "\u5AE9\u8A25\u677B\u7D10\uF952", 5, "\u80FD\uF958\uF959\u5C3C\u6CE5\u533F\u6EBA\u591A\u8336"], + ["d3a1", "\u4E39\u4EB6\u4F46\u55AE\u5718\u58C7\u5F56\u65B7\u65E6\u6A80\u6BB5\u6E4D\u77ED\u7AEF\u7C1E\u7DDE\u86CB\u8892\u9132\u935B\u64BB\u6FBE\u737A\u75B8\u9054\u5556\u574D\u61BA\u64D4\u66C7\u6DE1\u6E5B\u6F6D\u6FB9\u75F0\u8043\u81BD\u8541\u8983\u8AC7\u8B5A\u931F\u6C93\u7553\u7B54\u8E0F\u905D\u5510\u5802\u5858\u5E62\u6207\u649E\u68E0\u7576\u7CD6\u87B3\u9EE8\u4EE3\u5788\u576E\u5927\u5C0D\u5CB1\u5E36\u5F85\u6234\u64E1\u73B3\u81FA\u888B\u8CB8\u968A\u9EDB\u5B85\u5FB7\u60B3\u5012\u5200\u5230\u5716\u5835\u5857\u5C0E\u5C60\u5CF6\u5D8B\u5EA6\u5F92\u60BC\u6311\u6389\u6417\u6843"], + ["d4a1", "\u68F9\u6AC2\u6DD8\u6E21\u6ED4\u6FE4\u71FE\u76DC\u7779\u79B1\u7A3B\u8404\u89A9\u8CED\u8DF3\u8E48\u9003\u9014\u9053\u90FD\u934D\u9676\u97DC\u6BD2\u7006\u7258\u72A2\u7368\u7763\u79BF\u7BE4\u7E9B\u8B80\u58A9\u60C7\u6566\u65FD\u66BE\u6C8C\u711E\u71C9\u8C5A\u9813\u4E6D\u7A81\u4EDD\u51AC\u51CD\u52D5\u540C\u61A7\u6771\u6850\u68DF\u6D1E\u6F7C\u75BC\u77B3\u7AE5\u80F4\u8463\u9285\u515C\u6597\u675C\u6793\u75D8\u7AC7\u8373\uF95A\u8C46\u9017\u982D\u5C6F\u81C0\u829A\u9041\u906F\u920D\u5F97\u5D9D\u6A59\u71C8\u767B\u7B49\u85E4\u8B04\u9127\u9A30\u5587\u61F6\uF95B\u7669\u7F85"], + ["d5a1", "\u863F\u87BA\u88F8\u908F\uF95C\u6D1B\u70D9\u73DE\u7D61\u843D\uF95D\u916A\u99F1\uF95E\u4E82\u5375\u6B04\u6B12\u703E\u721B\u862D\u9E1E\u524C\u8FA3\u5D50\u64E5\u652C\u6B16\u6FEB\u7C43\u7E9C\u85CD\u8964\u89BD\u62C9\u81D8\u881F\u5ECA\u6717\u6D6A\u72FC\u7405\u746F\u8782\u90DE\u4F86\u5D0D\u5FA0\u840A\u51B7\u63A0\u7565\u4EAE\u5006\u5169\u51C9\u6881\u6A11\u7CAE\u7CB1\u7CE7\u826F\u8AD2\u8F1B\u91CF\u4FB6\u5137\u52F5\u5442\u5EEC\u616E\u623E\u65C5\u6ADA\u6FFE\u792A\u85DC\u8823\u95AD\u9A62\u9A6A\u9E97\u9ECE\u529B\u66C6\u6B77\u701D\u792B\u8F62\u9742\u6190\u6200\u6523\u6F23"], + ["d6a1", "\u7149\u7489\u7DF4\u806F\u84EE\u8F26\u9023\u934A\u51BD\u5217\u52A3\u6D0C\u70C8\u88C2\u5EC9\u6582\u6BAE\u6FC2\u7C3E\u7375\u4EE4\u4F36\u56F9\uF95F\u5CBA\u5DBA\u601C\u73B2\u7B2D\u7F9A\u7FCE\u8046\u901E\u9234\u96F6\u9748\u9818\u9F61\u4F8B\u6FA7\u79AE\u91B4\u96B7\u52DE\uF960\u6488\u64C4\u6AD3\u6F5E\u7018\u7210\u76E7\u8001\u8606\u865C\u8DEF\u8F05\u9732\u9B6F\u9DFA\u9E75\u788C\u797F\u7DA0\u83C9\u9304\u9E7F\u9E93\u8AD6\u58DF\u5F04\u6727\u7027\u74CF\u7C60\u807E\u5121\u7028\u7262\u78CA\u8CC2\u8CDA\u8CF4\u96F7\u4E86\u50DA\u5BEE\u5ED6\u6599\u71CE\u7642\u77AD\u804A\u84FC"], + ["d7a1", "\u907C\u9B27\u9F8D\u58D8\u5A41\u5C62\u6A13\u6DDA\u6F0F\u763B\u7D2F\u7E37\u851E\u8938\u93E4\u964B\u5289\u65D2\u67F3\u69B4\u6D41\u6E9C\u700F\u7409\u7460\u7559\u7624\u786B\u8B2C\u985E\u516D\u622E\u9678\u4F96\u502B\u5D19\u6DEA\u7DB8\u8F2A\u5F8B\u6144\u6817\uF961\u9686\u52D2\u808B\u51DC\u51CC\u695E\u7A1C\u7DBE\u83F1\u9675\u4FDA\u5229\u5398\u540F\u550E\u5C65\u60A7\u674E\u68A8\u6D6C\u7281\u72F8\u7406\u7483\uF962\u75E2\u7C6C\u7F79\u7FB8\u8389\u88CF\u88E1\u91CC\u91D0\u96E2\u9BC9\u541D\u6F7E\u71D0\u7498\u85FA\u8EAA\u96A3\u9C57\u9E9F\u6797\u6DCB\u7433\u81E8\u9716\u782C"], + ["d8a1", "\u7ACB\u7B20\u7C92\u6469\u746A\u75F2\u78BC\u78E8\u99AC\u9B54\u9EBB\u5BDE\u5E55\u6F20\u819C\u83AB\u9088\u4E07\u534D\u5A29\u5DD2\u5F4E\u6162\u633D\u6669\u66FC\u6EFF\u6F2B\u7063\u779E\u842C\u8513\u883B\u8F13\u9945\u9C3B\u551C\u62B9\u672B\u6CAB\u8309\u896A\u977A\u4EA1\u5984\u5FD8\u5FD9\u671B\u7DB2\u7F54\u8292\u832B\u83BD\u8F1E\u9099\u57CB\u59B9\u5A92\u5BD0\u6627\u679A\u6885\u6BCF\u7164\u7F75\u8CB7\u8CE3\u9081\u9B45\u8108\u8C8A\u964C\u9A40\u9EA5\u5B5F\u6C13\u731B\u76F2\u76DF\u840C\u51AA\u8993\u514D\u5195\u52C9\u68C9\u6C94\u7704\u7720\u7DBF\u7DEC\u9762\u9EB5\u6EC5"], + ["d9a1", "\u8511\u51A5\u540D\u547D\u660E\u669D\u6927\u6E9F\u76BF\u7791\u8317\u84C2\u879F\u9169\u9298\u9CF4\u8882\u4FAE\u5192\u52DF\u59C6\u5E3D\u6155\u6478\u6479\u66AE\u67D0\u6A21\u6BCD\u6BDB\u725F\u7261\u7441\u7738\u77DB\u8017\u82BC\u8305\u8B00\u8B28\u8C8C\u6728\u6C90\u7267\u76EE\u7766\u7A46\u9DA9\u6B7F\u6C92\u5922\u6726\u8499\u536F\u5893\u5999\u5EDF\u63CF\u6634\u6773\u6E3A\u732B\u7AD7\u82D7\u9328\u52D9\u5DEB\u61AE\u61CB\u620A\u62C7\u64AB\u65E0\u6959\u6B66\u6BCB\u7121\u73F7\u755D\u7E46\u821E\u8302\u856A\u8AA3\u8CBF\u9727\u9D61\u58A8\u9ED8\u5011\u520E\u543B\u554F\u6587"], + ["daa1", "\u6C76\u7D0A\u7D0B\u805E\u868A\u9580\u96EF\u52FF\u6C95\u7269\u5473\u5A9A\u5C3E\u5D4B\u5F4C\u5FAE\u672A\u68B6\u6963\u6E3C\u6E44\u7709\u7C73\u7F8E\u8587\u8B0E\u8FF7\u9761\u9EF4\u5CB7\u60B6\u610D\u61AB\u654F\u65FB\u65FC\u6C11\u6CEF\u739F\u73C9\u7DE1\u9594\u5BC6\u871C\u8B10\u525D\u535A\u62CD\u640F\u64B2\u6734\u6A38\u6CCA\u73C0\u749E\u7B94\u7C95\u7E1B\u818A\u8236\u8584\u8FEB\u96F9\u99C1\u4F34\u534A\u53CD\u53DB\u62CC\u642C\u6500\u6591\u69C3\u6CEE\u6F58\u73ED\u7554\u7622\u76E4\u76FC\u78D0\u78FB\u792C\u7D46\u822C\u87E0\u8FD4\u9812\u98EF\u52C3\u62D4\u64A5\u6E24\u6F51"], + ["dba1", "\u767C\u8DCB\u91B1\u9262\u9AEE\u9B43\u5023\u508D\u574A\u59A8\u5C28\u5E47\u5F77\u623F\u653E\u65B9\u65C1\u6609\u678B\u699C\u6EC2\u78C5\u7D21\u80AA\u8180\u822B\u82B3\u84A1\u868C\u8A2A\u8B17\u90A6\u9632\u9F90\u500D\u4FF3\uF963\u57F9\u5F98\u62DC\u6392\u676F\u6E43\u7119\u76C3\u80CC\u80DA\u88F4\u88F5\u8919\u8CE0\u8F29\u914D\u966A\u4F2F\u4F70\u5E1B\u67CF\u6822\u767D\u767E\u9B44\u5E61\u6A0A\u7169\u71D4\u756A\uF964\u7E41\u8543\u85E9\u98DC\u4F10\u7B4F\u7F70\u95A5\u51E1\u5E06\u68B5\u6C3E\u6C4E\u6CDB\u72AF\u7BC4\u8303\u6CD5\u743A\u50FB\u5288\u58C1\u64D8\u6A97\u74A7\u7656"], + ["dca1", "\u78A7\u8617\u95E2\u9739\uF965\u535E\u5F01\u8B8A\u8FA8\u8FAF\u908A\u5225\u77A5\u9C49\u9F08\u4E19\u5002\u5175\u5C5B\u5E77\u661E\u663A\u67C4\u68C5\u70B3\u7501\u75C5\u79C9\u7ADD\u8F27\u9920\u9A08\u4FDD\u5821\u5831\u5BF6\u666E\u6B65\u6D11\u6E7A\u6F7D\u73E4\u752B\u83E9\u88DC\u8913\u8B5C\u8F14\u4F0F\u50D5\u5310\u535C\u5B93\u5FA9\u670D\u798F\u8179\u832F\u8514\u8907\u8986\u8F39\u8F3B\u99A5\u9C12\u672C\u4E76\u4FF8\u5949\u5C01\u5CEF\u5CF0\u6367\u68D2\u70FD\u71A2\u742B\u7E2B\u84EC\u8702\u9022\u92D2\u9CF3\u4E0D\u4ED8\u4FEF\u5085\u5256\u526F\u5426\u5490\u57E0\u592B\u5A66"], + ["dda1", "\u5B5A\u5B75\u5BCC\u5E9C\uF966\u6276\u6577\u65A7\u6D6E\u6EA5\u7236\u7B26\u7C3F\u7F36\u8150\u8151\u819A\u8240\u8299\u83A9\u8A03\u8CA0\u8CE6\u8CFB\u8D74\u8DBA\u90E8\u91DC\u961C\u9644\u99D9\u9CE7\u5317\u5206\u5429\u5674\u58B3\u5954\u596E\u5FFF\u61A4\u626E\u6610\u6C7E\u711A\u76C6\u7C89\u7CDE\u7D1B\u82AC\u8CC1\u96F0\uF967\u4F5B\u5F17\u5F7F\u62C2\u5D29\u670B\u68DA\u787C\u7E43\u9D6C\u4E15\u5099\u5315\u532A\u5351\u5983\u5A62\u5E87\u60B2\u618A\u6249\u6279\u6590\u6787\u69A7\u6BD4\u6BD6\u6BD7\u6BD8\u6CB8\uF968\u7435\u75FA\u7812\u7891\u79D5\u79D8\u7C83\u7DCB\u7FE1\u80A5"], + ["dea1", "\u813E\u81C2\u83F2\u871A\u88E8\u8AB9\u8B6C\u8CBB\u9119\u975E\u98DB\u9F3B\u56AC\u5B2A\u5F6C\u658C\u6AB3\u6BAF\u6D5C\u6FF1\u7015\u725D\u73AD\u8CA7\u8CD3\u983B\u6191\u6C37\u8058\u9A01\u4E4D\u4E8B\u4E9B\u4ED5\u4F3A\u4F3C\u4F7F\u4FDF\u50FF\u53F2\u53F8\u5506\u55E3\u56DB\u58EB\u5962\u5A11\u5BEB\u5BFA\u5C04\u5DF3\u5E2B\u5F99\u601D\u6368\u659C\u65AF\u67F6\u67FB\u68AD\u6B7B\u6C99\u6CD7\u6E23\u7009\u7345\u7802\u793E\u7940\u7960\u79C1\u7BE9\u7D17\u7D72\u8086\u820D\u838E\u84D1\u86C7\u88DF\u8A50\u8A5E\u8B1D\u8CDC\u8D66\u8FAD\u90AA\u98FC\u99DF\u9E9D\u524A\uF969\u6714\uF96A"], + ["dfa1", "\u5098\u522A\u5C71\u6563\u6C55\u73CA\u7523\u759D\u7B97\u849C\u9178\u9730\u4E77\u6492\u6BBA\u715E\u85A9\u4E09\uF96B\u6749\u68EE\u6E17\u829F\u8518\u886B\u63F7\u6F81\u9212\u98AF\u4E0A\u50B7\u50CF\u511F\u5546\u55AA\u5617\u5B40\u5C19\u5CE0\u5E38\u5E8A\u5EA0\u5EC2\u60F3\u6851\u6A61\u6E58\u723D\u7240\u72C0\u76F8\u7965\u7BB1\u7FD4\u88F3\u89F4\u8A73\u8C61\u8CDE\u971C\u585E\u74BD\u8CFD\u55C7\uF96C\u7A61\u7D22\u8272\u7272\u751F\u7525\uF96D\u7B19\u5885\u58FB\u5DBC\u5E8F\u5EB6\u5F90\u6055\u6292\u637F\u654D\u6691\u66D9\u66F8\u6816\u68F2\u7280\u745E\u7B6E\u7D6E\u7DD6\u7F72"], + ["e0a1", "\u80E5\u8212\u85AF\u897F\u8A93\u901D\u92E4\u9ECD\u9F20\u5915\u596D\u5E2D\u60DC\u6614\u6673\u6790\u6C50\u6DC5\u6F5F\u77F3\u78A9\u84C6\u91CB\u932B\u4ED9\u50CA\u5148\u5584\u5B0B\u5BA3\u6247\u657E\u65CB\u6E32\u717D\u7401\u7444\u7487\u74BF\u766C\u79AA\u7DDA\u7E55\u7FA8\u817A\u81B3\u8239\u861A\u87EC\u8A75\u8DE3\u9078\u9291\u9425\u994D\u9BAE\u5368\u5C51\u6954\u6CC4\u6D29\u6E2B\u820C\u859B\u893B\u8A2D\u8AAA\u96EA\u9F67\u5261\u66B9\u6BB2\u7E96\u87FE\u8D0D\u9583\u965D\u651D\u6D89\u71EE\uF96E\u57CE\u59D3\u5BAC\u6027\u60FA\u6210\u661F\u665F\u7329\u73F9\u76DB\u7701\u7B6C"], + ["e1a1", "\u8056\u8072\u8165\u8AA0\u9192\u4E16\u52E2\u6B72\u6D17\u7A05\u7B39\u7D30\uF96F\u8CB0\u53EC\u562F\u5851\u5BB5\u5C0F\u5C11\u5DE2\u6240\u6383\u6414\u662D\u68B3\u6CBC\u6D88\u6EAF\u701F\u70A4\u71D2\u7526\u758F\u758E\u7619\u7B11\u7BE0\u7C2B\u7D20\u7D39\u852C\u856D\u8607\u8A34\u900D\u9061\u90B5\u92B7\u97F6\u9A37\u4FD7\u5C6C\u675F\u6D91\u7C9F\u7E8C\u8B16\u8D16\u901F\u5B6B\u5DFD\u640D\u84C0\u905C\u98E1\u7387\u5B8B\u609A\u677E\u6DDE\u8A1F\u8AA6\u9001\u980C\u5237\uF970\u7051\u788E\u9396\u8870\u91D7\u4FEE\u53D7\u55FD\u56DA\u5782\u58FD\u5AC2\u5B88\u5CAB\u5CC0\u5E25\u6101"], + ["e2a1", "\u620D\u624B\u6388\u641C\u6536\u6578\u6A39\u6B8A\u6C34\u6D19\u6F31\u71E7\u72E9\u7378\u7407\u74B2\u7626\u7761\u79C0\u7A57\u7AEA\u7CB9\u7D8F\u7DAC\u7E61\u7F9E\u8129\u8331\u8490\u84DA\u85EA\u8896\u8AB0\u8B90\u8F38\u9042\u9083\u916C\u9296\u92B9\u968B\u96A7\u96A8\u96D6\u9700\u9808\u9996\u9AD3\u9B1A\u53D4\u587E\u5919\u5B70\u5BBF\u6DD1\u6F5A\u719F\u7421\u74B9\u8085\u83FD\u5DE1\u5F87\u5FAA\u6042\u65EC\u6812\u696F\u6A53\u6B89\u6D35\u6DF3\u73E3\u76FE\u77AC\u7B4D\u7D14\u8123\u821C\u8340\u84F4\u8563\u8A62\u8AC4\u9187\u931E\u9806\u99B4\u620C\u8853\u8FF0\u9265\u5D07\u5D27"], + ["e3a1", "\u5D69\u745F\u819D\u8768\u6FD5\u62FE\u7FD2\u8936\u8972\u4E1E\u4E58\u50E7\u52DD\u5347\u627F\u6607\u7E69\u8805\u965E\u4F8D\u5319\u5636\u59CB\u5AA4\u5C38\u5C4E\u5C4D\u5E02\u5F11\u6043\u65BD\u662F\u6642\u67BE\u67F4\u731C\u77E2\u793A\u7FC5\u8494\u84CD\u8996\u8A66\u8A69\u8AE1\u8C55\u8C7A\u57F4\u5BD4\u5F0F\u606F\u62ED\u690D\u6B96\u6E5C\u7184\u7BD2\u8755\u8B58\u8EFE\u98DF\u98FE\u4F38\u4F81\u4FE1\u547B\u5A20\u5BB8\u613C\u65B0\u6668\u71FC\u7533\u795E\u7D33\u814E\u81E3\u8398\u85AA\u85CE\u8703\u8A0A\u8EAB\u8F9B\uF971\u8FC5\u5931\u5BA4\u5BE6\u6089\u5BE9\u5C0B\u5FC3\u6C81"], + ["e4a1", "\uF972\u6DF1\u700B\u751A\u82AF\u8AF6\u4EC0\u5341\uF973\u96D9\u6C0F\u4E9E\u4FC4\u5152\u555E\u5A25\u5CE8\u6211\u7259\u82BD\u83AA\u86FE\u8859\u8A1D\u963F\u96C5\u9913\u9D09\u9D5D\u580A\u5CB3\u5DBD\u5E44\u60E1\u6115\u63E1\u6A02\u6E25\u9102\u9354\u984E\u9C10\u9F77\u5B89\u5CB8\u6309\u664F\u6848\u773C\u96C1\u978D\u9854\u9B9F\u65A1\u8B01\u8ECB\u95BC\u5535\u5CA9\u5DD6\u5EB5\u6697\u764C\u83F4\u95C7\u58D3\u62BC\u72CE\u9D28\u4EF0\u592E\u600F\u663B\u6B83\u79E7\u9D26\u5393\u54C0\u57C3\u5D16\u611B\u66D6\u6DAF\u788D\u827E\u9698\u9744\u5384\u627C\u6396\u6DB2\u7E0A\u814B\u984D"], + ["e5a1", "\u6AFB\u7F4C\u9DAF\u9E1A\u4E5F\u503B\u51B6\u591C\u60F9\u63F6\u6930\u723A\u8036\uF974\u91CE\u5F31\uF975\uF976\u7D04\u82E5\u846F\u84BB\u85E5\u8E8D\uF977\u4F6F\uF978\uF979\u58E4\u5B43\u6059\u63DA\u6518\u656D\u6698\uF97A\u694A\u6A23\u6D0B\u7001\u716C\u75D2\u760D\u79B3\u7A70\uF97B\u7F8A\uF97C\u8944\uF97D\u8B93\u91C0\u967D\uF97E\u990A\u5704\u5FA1\u65BC\u6F01\u7600\u79A6\u8A9E\u99AD\u9B5A\u9F6C\u5104\u61B6\u6291\u6A8D\u81C6\u5043\u5830\u5F66\u7109\u8A00\u8AFA\u5B7C\u8616\u4FFA\u513C\u56B4\u5944\u63A9\u6DF9\u5DAA\u696D\u5186\u4E88\u4F59\uF97F\uF980\uF981\u5982\uF982"], + ["e6a1", "\uF983\u6B5F\u6C5D\uF984\u74B5\u7916\uF985\u8207\u8245\u8339\u8F3F\u8F5D\uF986\u9918\uF987\uF988\uF989\u4EA6\uF98A\u57DF\u5F79\u6613\uF98B\uF98C\u75AB\u7E79\u8B6F\uF98D\u9006\u9A5B\u56A5\u5827\u59F8\u5A1F\u5BB4\uF98E\u5EF6\uF98F\uF990\u6350\u633B\uF991\u693D\u6C87\u6CBF\u6D8E\u6D93\u6DF5\u6F14\uF992\u70DF\u7136\u7159\uF993\u71C3\u71D5\uF994\u784F\u786F\uF995\u7B75\u7DE3\uF996\u7E2F\uF997\u884D\u8EDF\uF998\uF999\uF99A\u925B\uF99B\u9CF6\uF99C\uF99D\uF99E\u6085\u6D85\uF99F\u71B1\uF9A0\uF9A1\u95B1\u53AD\uF9A2\uF9A3\uF9A4\u67D3\uF9A5\u708E\u7130\u7430\u8276\u82D2"], + ["e7a1", "\uF9A6\u95BB\u9AE5\u9E7D\u66C4\uF9A7\u71C1\u8449\uF9A8\uF9A9\u584B\uF9AA\uF9AB\u5DB8\u5F71\uF9AC\u6620\u668E\u6979\u69AE\u6C38\u6CF3\u6E36\u6F41\u6FDA\u701B\u702F\u7150\u71DF\u7370\uF9AD\u745B\uF9AE\u74D4\u76C8\u7A4E\u7E93\uF9AF\uF9B0\u82F1\u8A60\u8FCE\uF9B1\u9348\uF9B2\u9719\uF9B3\uF9B4\u4E42\u502A\uF9B5\u5208\u53E1\u66F3\u6C6D\u6FCA\u730A\u777F\u7A62\u82AE\u85DD\u8602\uF9B6\u88D4\u8A63\u8B7D\u8C6B\uF9B7\u92B3\uF9B8\u9713\u9810\u4E94\u4F0D\u4FC9\u50B2\u5348\u543E\u5433\u55DA\u5862\u58BA\u5967\u5A1B\u5BE4\u609F\uF9B9\u61CA\u6556\u65FF\u6664\u68A7\u6C5A\u6FB3"], + ["e8a1", "\u70CF\u71AC\u7352\u7B7D\u8708\u8AA4\u9C32\u9F07\u5C4B\u6C83\u7344\u7389\u923A\u6EAB\u7465\u761F\u7A69\u7E15\u860A\u5140\u58C5\u64C1\u74EE\u7515\u7670\u7FC1\u9095\u96CD\u9954\u6E26\u74E6\u7AA9\u7AAA\u81E5\u86D9\u8778\u8A1B\u5A49\u5B8C\u5B9B\u68A1\u6900\u6D63\u73A9\u7413\u742C\u7897\u7DE9\u7FEB\u8118\u8155\u839E\u8C4C\u962E\u9811\u66F0\u5F80\u65FA\u6789\u6C6A\u738B\u502D\u5A03\u6B6A\u77EE\u5916\u5D6C\u5DCD\u7325\u754F\uF9BA\uF9BB\u50E5\u51F9\u582F\u592D\u5996\u59DA\u5BE5\uF9BC\uF9BD\u5DA2\u62D7\u6416\u6493\u64FE\uF9BE\u66DC\uF9BF\u6A48\uF9C0\u71FF\u7464\uF9C1"], + ["e9a1", "\u7A88\u7AAF\u7E47\u7E5E\u8000\u8170\uF9C2\u87EF\u8981\u8B20\u9059\uF9C3\u9080\u9952\u617E\u6B32\u6D74\u7E1F\u8925\u8FB1\u4FD1\u50AD\u5197\u52C7\u57C7\u5889\u5BB9\u5EB8\u6142\u6995\u6D8C\u6E67\u6EB6\u7194\u7462\u7528\u752C\u8073\u8338\u84C9\u8E0A\u9394\u93DE\uF9C4\u4E8E\u4F51\u5076\u512A\u53C8\u53CB\u53F3\u5B87\u5BD3\u5C24\u611A\u6182\u65F4\u725B\u7397\u7440\u76C2\u7950\u7991\u79B9\u7D06\u7FBD\u828B\u85D5\u865E\u8FC2\u9047\u90F5\u91EA\u9685\u96E8\u96E9\u52D6\u5F67\u65ED\u6631\u682F\u715C\u7A36\u90C1\u980A\u4E91\uF9C5\u6A52\u6B9E\u6F90\u7189\u8018\u82B8\u8553"], + ["eaa1", "\u904B\u9695\u96F2\u97FB\u851A\u9B31\u4E90\u718A\u96C4\u5143\u539F\u54E1\u5713\u5712\u57A3\u5A9B\u5AC4\u5BC3\u6028\u613F\u63F4\u6C85\u6D39\u6E72\u6E90\u7230\u733F\u7457\u82D1\u8881\u8F45\u9060\uF9C6\u9662\u9858\u9D1B\u6708\u8D8A\u925E\u4F4D\u5049\u50DE\u5371\u570D\u59D4\u5A01\u5C09\u6170\u6690\u6E2D\u7232\u744B\u7DEF\u80C3\u840E\u8466\u853F\u875F\u885B\u8918\u8B02\u9055\u97CB\u9B4F\u4E73\u4F91\u5112\u516A\uF9C7\u552F\u55A9\u5B7A\u5BA5\u5E7C\u5E7D\u5EBE\u60A0\u60DF\u6108\u6109\u63C4\u6538\u6709\uF9C8\u67D4\u67DA\uF9C9\u6961\u6962\u6CB9\u6D27\uF9CA\u6E38\uF9CB"], + ["eba1", "\u6FE1\u7336\u7337\uF9CC\u745C\u7531\uF9CD\u7652\uF9CE\uF9CF\u7DAD\u81FE\u8438\u88D5\u8A98\u8ADB\u8AED\u8E30\u8E42\u904A\u903E\u907A\u9149\u91C9\u936E\uF9D0\uF9D1\u5809\uF9D2\u6BD3\u8089\u80B2\uF9D3\uF9D4\u5141\u596B\u5C39\uF9D5\uF9D6\u6F64\u73A7\u80E4\u8D07\uF9D7\u9217\u958F\uF9D8\uF9D9\uF9DA\uF9DB\u807F\u620E\u701C\u7D68\u878D\uF9DC\u57A0\u6069\u6147\u6BB7\u8ABE\u9280\u96B1\u4E59\u541F\u6DEB\u852D\u9670\u97F3\u98EE\u63D6\u6CE3\u9091\u51DD\u61C9\u81BA\u9DF9\u4F9D\u501A\u5100\u5B9C\u610F\u61FF\u64EC\u6905\u6BC5\u7591\u77E3\u7FA9\u8264\u858F\u87FB\u8863\u8ABC"], + ["eca1", "\u8B70\u91AB\u4E8C\u4EE5\u4F0A\uF9DD\uF9DE\u5937\u59E8\uF9DF\u5DF2\u5F1B\u5F5B\u6021\uF9E0\uF9E1\uF9E2\uF9E3\u723E\u73E5\uF9E4\u7570\u75CD\uF9E5\u79FB\uF9E6\u800C\u8033\u8084\u82E1\u8351\uF9E7\uF9E8\u8CBD\u8CB3\u9087\uF9E9\uF9EA\u98F4\u990C\uF9EB\uF9EC\u7037\u76CA\u7FCA\u7FCC\u7FFC\u8B1A\u4EBA\u4EC1\u5203\u5370\uF9ED\u54BD\u56E0\u59FB\u5BC5\u5F15\u5FCD\u6E6E\uF9EE\uF9EF\u7D6A\u8335\uF9F0\u8693\u8A8D\uF9F1\u976D\u9777\uF9F2\uF9F3\u4E00\u4F5A\u4F7E\u58F9\u65E5\u6EA2\u9038\u93B0\u99B9\u4EFB\u58EC\u598A\u59D9\u6041\uF9F4\uF9F5\u7A14\uF9F6\u834F\u8CC3\u5165\u5344"], + ["eda1", "\uF9F7\uF9F8\uF9F9\u4ECD\u5269\u5B55\u82BF\u4ED4\u523A\u54A8\u59C9\u59FF\u5B50\u5B57\u5B5C\u6063\u6148\u6ECB\u7099\u716E\u7386\u74F7\u75B5\u78C1\u7D2B\u8005\u81EA\u8328\u8517\u85C9\u8AEE\u8CC7\u96CC\u4F5C\u52FA\u56BC\u65AB\u6628\u707C\u70B8\u7235\u7DBD\u828D\u914C\u96C0\u9D72\u5B71\u68E7\u6B98\u6F7A\u76DE\u5C91\u66AB\u6F5B\u7BB4\u7C2A\u8836\u96DC\u4E08\u4ED7\u5320\u5834\u58BB\u58EF\u596C\u5C07\u5E33\u5E84\u5F35\u638C\u66B2\u6756\u6A1F\u6AA3\u6B0C\u6F3F\u7246\uF9FA\u7350\u748B\u7AE0\u7CA7\u8178\u81DF\u81E7\u838A\u846C\u8523\u8594\u85CF\u88DD\u8D13\u91AC\u9577"], + ["eea1", "\u969C\u518D\u54C9\u5728\u5BB0\u624D\u6750\u683D\u6893\u6E3D\u6ED3\u707D\u7E21\u88C1\u8CA1\u8F09\u9F4B\u9F4E\u722D\u7B8F\u8ACD\u931A\u4F47\u4F4E\u5132\u5480\u59D0\u5E95\u62B5\u6775\u696E\u6A17\u6CAE\u6E1A\u72D9\u732A\u75BD\u7BB8\u7D35\u82E7\u83F9\u8457\u85F7\u8A5B\u8CAF\u8E87\u9019\u90B8\u96CE\u9F5F\u52E3\u540A\u5AE1\u5BC2\u6458\u6575\u6EF4\u72C4\uF9FB\u7684\u7A4D\u7B1B\u7C4D\u7E3E\u7FDF\u837B\u8B2B\u8CCA\u8D64\u8DE1\u8E5F\u8FEA\u8FF9\u9069\u93D1\u4F43\u4F7A\u50B3\u5168\u5178\u524D\u526A\u5861\u587C\u5960\u5C08\u5C55\u5EDB\u609B\u6230\u6813\u6BBF\u6C08\u6FB1"], + ["efa1", "\u714E\u7420\u7530\u7538\u7551\u7672\u7B4C\u7B8B\u7BAD\u7BC6\u7E8F\u8A6E\u8F3E\u8F49\u923F\u9293\u9322\u942B\u96FB\u985A\u986B\u991E\u5207\u622A\u6298\u6D59\u7664\u7ACA\u7BC0\u7D76\u5360\u5CBE\u5E97\u6F38\u70B9\u7C98\u9711\u9B8E\u9EDE\u63A5\u647A\u8776\u4E01\u4E95\u4EAD\u505C\u5075\u5448\u59C3\u5B9A\u5E40\u5EAD\u5EF7\u5F81\u60C5\u633A\u653F\u6574\u65CC\u6676\u6678\u67FE\u6968\u6A89\u6B63\u6C40\u6DC0\u6DE8\u6E1F\u6E5E\u701E\u70A1\u738E\u73FD\u753A\u775B\u7887\u798E\u7A0B\u7A7D\u7CBE\u7D8E\u8247\u8A02\u8AEA\u8C9E\u912D\u914A\u91D8\u9266\u92CC\u9320\u9706\u9756"], + ["f0a1", "\u975C\u9802\u9F0E\u5236\u5291\u557C\u5824\u5E1D\u5F1F\u608C\u63D0\u68AF\u6FDF\u796D\u7B2C\u81CD\u85BA\u88FD\u8AF8\u8E44\u918D\u9664\u969B\u973D\u984C\u9F4A\u4FCE\u5146\u51CB\u52A9\u5632\u5F14\u5F6B\u63AA\u64CD\u65E9\u6641\u66FA\u66F9\u671D\u689D\u68D7\u69FD\u6F15\u6F6E\u7167\u71E5\u722A\u74AA\u773A\u7956\u795A\u79DF\u7A20\u7A95\u7C97\u7CDF\u7D44\u7E70\u8087\u85FB\u86A4\u8A54\u8ABF\u8D99\u8E81\u9020\u906D\u91E3\u963B\u96D5\u9CE5\u65CF\u7C07\u8DB3\u93C3\u5B58\u5C0A\u5352\u62D9\u731D\u5027\u5B97\u5F9E\u60B0\u616B\u68D5\u6DD9\u742E\u7A2E\u7D42\u7D9C\u7E31\u816B"], + ["f1a1", "\u8E2A\u8E35\u937E\u9418\u4F50\u5750\u5DE6\u5EA7\u632B\u7F6A\u4E3B\u4F4F\u4F8F\u505A\u59DD\u80C4\u546A\u5468\u55FE\u594F\u5B99\u5DDE\u5EDA\u665D\u6731\u67F1\u682A\u6CE8\u6D32\u6E4A\u6F8D\u70B7\u73E0\u7587\u7C4C\u7D02\u7D2C\u7DA2\u821F\u86DB\u8A3B\u8A85\u8D70\u8E8A\u8F33\u9031\u914E\u9152\u9444\u99D0\u7AF9\u7CA5\u4FCA\u5101\u51C6\u57C8\u5BEF\u5CFB\u6659\u6A3D\u6D5A\u6E96\u6FEC\u710C\u756F\u7AE3\u8822\u9021\u9075\u96CB\u99FF\u8301\u4E2D\u4EF2\u8846\u91CD\u537D\u6ADB\u696B\u6C41\u847A\u589E\u618E\u66FE\u62EF\u70DD\u7511\u75C7\u7E52\u84B8\u8B49\u8D08\u4E4B\u53EA"], + ["f2a1", "\u54AB\u5730\u5740\u5FD7\u6301\u6307\u646F\u652F\u65E8\u667A\u679D\u67B3\u6B62\u6C60\u6C9A\u6F2C\u77E5\u7825\u7949\u7957\u7D19\u80A2\u8102\u81F3\u829D\u82B7\u8718\u8A8C\uF9FC\u8D04\u8DBE\u9072\u76F4\u7A19\u7A37\u7E54\u8077\u5507\u55D4\u5875\u632F\u6422\u6649\u664B\u686D\u699B\u6B84\u6D25\u6EB1\u73CD\u7468\u74A1\u755B\u75B9\u76E1\u771E\u778B\u79E6\u7E09\u7E1D\u81FB\u852F\u8897\u8A3A\u8CD1\u8EEB\u8FB0\u9032\u93AD\u9663\u9673\u9707\u4F84\u53F1\u59EA\u5AC9\u5E19\u684E\u74C6\u75BE\u79E9\u7A92\u81A3\u86ED\u8CEA\u8DCC\u8FED\u659F\u6715\uF9FD\u57F7\u6F57\u7DDD\u8F2F"], + ["f3a1", "\u93F6\u96C6\u5FB5\u61F2\u6F84\u4E14\u4F98\u501F\u53C9\u55DF\u5D6F\u5DEE\u6B21\u6B64\u78CB\u7B9A\uF9FE\u8E49\u8ECA\u906E\u6349\u643E\u7740\u7A84\u932F\u947F\u9F6A\u64B0\u6FAF\u71E6\u74A8\u74DA\u7AC4\u7C12\u7E82\u7CB2\u7E98\u8B9A\u8D0A\u947D\u9910\u994C\u5239\u5BDF\u64E6\u672D\u7D2E\u50ED\u53C3\u5879\u6158\u6159\u61FA\u65AC\u7AD9\u8B92\u8B96\u5009\u5021\u5275\u5531\u5A3C\u5EE0\u5F70\u6134\u655E\u660C\u6636\u66A2\u69CD\u6EC4\u6F32\u7316\u7621\u7A93\u8139\u8259\u83D6\u84BC\u50B5\u57F0\u5BC0\u5BE8\u5F69\u63A1\u7826\u7DB5\u83DC\u8521\u91C7\u91F5\u518A\u67F5\u7B56"], + ["f4a1", "\u8CAC\u51C4\u59BB\u60BD\u8655\u501C\uF9FF\u5254\u5C3A\u617D\u621A\u62D3\u64F2\u65A5\u6ECC\u7620\u810A\u8E60\u965F\u96BB\u4EDF\u5343\u5598\u5929\u5DDD\u64C5\u6CC9\u6DFA\u7394\u7A7F\u821B\u85A6\u8CE4\u8E10\u9077\u91E7\u95E1\u9621\u97C6\u51F8\u54F2\u5586\u5FB9\u64A4\u6F88\u7DB4\u8F1F\u8F4D\u9435\u50C9\u5C16\u6CBE\u6DFB\u751B\u77BB\u7C3D\u7C64\u8A79\u8AC2\u581E\u59BE\u5E16\u6377\u7252\u758A\u776B\u8ADC\u8CBC\u8F12\u5EF3\u6674\u6DF8\u807D\u83C1\u8ACB\u9751\u9BD6\uFA00\u5243\u66FF\u6D95\u6EEF\u7DE0\u8AE6\u902E\u905E\u9AD4\u521D\u527F\u54E8\u6194\u6284\u62DB\u68A2"], + ["f5a1", "\u6912\u695A\u6A35\u7092\u7126\u785D\u7901\u790E\u79D2\u7A0D\u8096\u8278\u82D5\u8349\u8549\u8C82\u8D85\u9162\u918B\u91AE\u4FC3\u56D1\u71ED\u77D7\u8700\u89F8\u5BF8\u5FD6\u6751\u90A8\u53E2\u585A\u5BF5\u60A4\u6181\u6460\u7E3D\u8070\u8525\u9283\u64AE\u50AC\u5D14\u6700\u589C\u62BD\u63A8\u690E\u6978\u6A1E\u6E6B\u76BA\u79CB\u82BB\u8429\u8ACF\u8DA8\u8FFD\u9112\u914B\u919C\u9310\u9318\u939A\u96DB\u9A36\u9C0D\u4E11\u755C\u795D\u7AFA\u7B51\u7BC9\u7E2E\u84C4\u8E59\u8E74\u8EF8\u9010\u6625\u693F\u7443\u51FA\u672E\u9EDC\u5145\u5FE0\u6C96\u87F2\u885D\u8877\u60B4\u81B5\u8403"], + ["f6a1", "\u8D05\u53D6\u5439\u5634\u5A36\u5C31\u708A\u7FE0\u805A\u8106\u81ED\u8DA3\u9189\u9A5F\u9DF2\u5074\u4EC4\u53A0\u60FB\u6E2C\u5C64\u4F88\u5024\u55E4\u5CD9\u5E5F\u6065\u6894\u6CBB\u6DC4\u71BE\u75D4\u75F4\u7661\u7A1A\u7A49\u7DC7\u7DFB\u7F6E\u81F4\u86A9\u8F1C\u96C9\u99B3\u9F52\u5247\u52C5\u98ED\u89AA\u4E03\u67D2\u6F06\u4FB5\u5BE2\u6795\u6C88\u6D78\u741B\u7827\u91DD\u937C\u87C4\u79E4\u7A31\u5FEB\u4ED6\u54A4\u553E\u58AE\u59A5\u60F0\u6253\u62D6\u6736\u6955\u8235\u9640\u99B1\u99DD\u502C\u5353\u5544\u577C\uFA01\u6258\uFA02\u64E2\u666B\u67DD\u6FC1\u6FEF\u7422\u7438\u8A17"], + ["f7a1", "\u9438\u5451\u5606\u5766\u5F48\u619A\u6B4E\u7058\u70AD\u7DBB\u8A95\u596A\u812B\u63A2\u7708\u803D\u8CAA\u5854\u642D\u69BB\u5B95\u5E11\u6E6F\uFA03\u8569\u514C\u53F0\u592A\u6020\u614B\u6B86\u6C70\u6CF0\u7B1E\u80CE\u82D4\u8DC6\u90B0\u98B1\uFA04\u64C7\u6FA4\u6491\u6504\u514E\u5410\u571F\u8A0E\u615F\u6876\uFA05\u75DB\u7B52\u7D71\u901A\u5806\u69CC\u817F\u892A\u9000\u9839\u5078\u5957\u59AC\u6295\u900F\u9B2A\u615D\u7279\u95D6\u5761\u5A46\u5DF4\u628A\u64AD\u64FA\u6777\u6CE2\u6D3E\u722C\u7436\u7834\u7F77\u82AD\u8DDB\u9817\u5224\u5742\u677F\u7248\u74E3\u8CA9\u8FA6\u9211"], + ["f8a1", "\u962A\u516B\u53ED\u634C\u4F69\u5504\u6096\u6557\u6C9B\u6D7F\u724C\u72FD\u7A17\u8987\u8C9D\u5F6D\u6F8E\u70F9\u81A8\u610E\u4FBF\u504F\u6241\u7247\u7BC7\u7DE8\u7FE9\u904D\u97AD\u9A19\u8CB6\u576A\u5E73\u67B0\u840D\u8A55\u5420\u5B16\u5E63\u5EE2\u5F0A\u6583\u80BA\u853D\u9589\u965B\u4F48\u5305\u530D\u530F\u5486\u54FA\u5703\u5E03\u6016\u629B\u62B1\u6355\uFA06\u6CE1\u6D66\u75B1\u7832\u80DE\u812F\u82DE\u8461\u84B2\u888D\u8912\u900B\u92EA\u98FD\u9B91\u5E45\u66B4\u66DD\u7011\u7206\uFA07\u4FF5\u527D\u5F6A\u6153\u6753\u6A19\u6F02\u74E2\u7968\u8868\u8C79\u98C7\u98C4\u9A43"], + ["f9a1", "\u54C1\u7A1F\u6953\u8AF7\u8C4A\u98A8\u99AE\u5F7C\u62AB\u75B2\u76AE\u88AB\u907F\u9642\u5339\u5F3C\u5FC5\u6CCC\u73CC\u7562\u758B\u7B46\u82FE\u999D\u4E4F\u903C\u4E0B\u4F55\u53A6\u590F\u5EC8\u6630\u6CB3\u7455\u8377\u8766\u8CC0\u9050\u971E\u9C15\u58D1\u5B78\u8650\u8B14\u9DB4\u5BD2\u6068\u608D\u65F1\u6C57\u6F22\u6FA3\u701A\u7F55\u7FF0\u9591\u9592\u9650\u97D3\u5272\u8F44\u51FD\u542B\u54B8\u5563\u558A\u6ABB\u6DB5\u7DD8\u8266\u929C\u9677\u9E79\u5408\u54C8\u76D2\u86E4\u95A4\u95D4\u965C\u4EA2\u4F09\u59EE\u5AE6\u5DF7\u6052\u6297\u676D\u6841\u6C86\u6E2F\u7F38\u809B\u822A"], + ["faa1", "\uFA08\uFA09\u9805\u4EA5\u5055\u54B3\u5793\u595A\u5B69\u5BB3\u61C8\u6977\u6D77\u7023\u87F9\u89E3\u8A72\u8AE7\u9082\u99ED\u9AB8\u52BE\u6838\u5016\u5E78\u674F\u8347\u884C\u4EAB\u5411\u56AE\u73E6\u9115\u97FF\u9909\u9957\u9999\u5653\u589F\u865B\u8A31\u61B2\u6AF6\u737B\u8ED2\u6B47\u96AA\u9A57\u5955\u7200\u8D6B\u9769\u4FD4\u5CF4\u5F26\u61F8\u665B\u6CEB\u70AB\u7384\u73B9\u73FE\u7729\u774D\u7D43\u7D62\u7E23\u8237\u8852\uFA0A\u8CE2\u9249\u986F\u5B51\u7A74\u8840\u9801\u5ACC\u4FE0\u5354\u593E\u5CFD\u633E\u6D79\u72F9\u8105\u8107\u83A2\u92CF\u9830\u4EA8\u5144\u5211\u578B"], + ["fba1", "\u5F62\u6CC2\u6ECE\u7005\u7050\u70AF\u7192\u73E9\u7469\u834A\u87A2\u8861\u9008\u90A2\u93A3\u99A8\u516E\u5F57\u60E0\u6167\u66B3\u8559\u8E4A\u91AF\u978B\u4E4E\u4E92\u547C\u58D5\u58FA\u597D\u5CB5\u5F27\u6236\u6248\u660A\u6667\u6BEB\u6D69\u6DCF\u6E56\u6EF8\u6F94\u6FE0\u6FE9\u705D\u72D0\u7425\u745A\u74E0\u7693\u795C\u7CCA\u7E1E\u80E1\u82A6\u846B\u84BF\u864E\u865F\u8774\u8B77\u8C6A\u93AC\u9800\u9865\u60D1\u6216\u9177\u5A5A\u660F\u6DF7\u6E3E\u743F\u9B42\u5FFD\u60DA\u7B0F\u54C4\u5F18\u6C5E\u6CD3\u6D2A\u70D8\u7D05\u8679\u8A0C\u9D3B\u5316\u548C\u5B05\u6A3A\u706B\u7575"], + ["fca1", "\u798D\u79BE\u82B1\u83EF\u8A71\u8B41\u8CA8\u9774\uFA0B\u64F4\u652B\u78BA\u78BB\u7A6B\u4E38\u559A\u5950\u5BA6\u5E7B\u60A3\u63DB\u6B61\u6665\u6853\u6E19\u7165\u74B0\u7D08\u9084\u9A69\u9C25\u6D3B\u6ED1\u733E\u8C41\u95CA\u51F0\u5E4C\u5FA8\u604D\u60F6\u6130\u614C\u6643\u6644\u69A5\u6CC1\u6E5F\u6EC9\u6F62\u714C\u749C\u7687\u7BC1\u7C27\u8352\u8757\u9051\u968D\u9EC3\u532F\u56DE\u5EFB\u5F8A\u6062\u6094\u61F7\u6666\u6703\u6A9C\u6DEE\u6FAE\u7070\u736A\u7E6A\u81BE\u8334\u86D4\u8AA8\u8CC4\u5283\u7372\u5B96\u6A6B\u9404\u54EE\u5686\u5B5D\u6548\u6585\u66C9\u689F\u6D8D\u6DC6"], + ["fda1", "\u723B\u80B4\u9175\u9A4D\u4FAF\u5019\u539A\u540E\u543C\u5589\u55C5\u5E3F\u5F8C\u673D\u7166\u73DD\u9005\u52DB\u52F3\u5864\u58CE\u7104\u718F\u71FB\u85B0\u8A13\u6688\u85A8\u55A7\u6684\u714A\u8431\u5349\u5599\u6BC1\u5F59\u5FBD\u63EE\u6689\u7147\u8AF1\u8F1D\u9EBE\u4F11\u643A\u70CB\u7566\u8667\u6064\u8B4E\u9DF8\u5147\u51F6\u5308\u6D36\u80F8\u9ED1\u6615\u6B23\u7098\u75D5\u5403\u5C79\u7D07\u8A16\u6B20\u6B3D\u6B46\u5438\u6070\u6D3D\u7FD5\u8208\u50D6\u51DE\u559C\u566B\u56CD\u59EC\u5B09\u5E0C\u6199\u6198\u6231\u665E\u66E6\u7199\u71B9\u71BA\u72A7\u79A7\u7A00\u7FB2\u8A70"] + ]; + } +}); + +// node_modules/iconv-lite/encodings/tables/cp950.json +var require_cp950 = __commonJS({ + "node_modules/iconv-lite/encodings/tables/cp950.json"(exports2, module2) { + module2.exports = [ + ["0", "\0", 127], + ["a140", "\u3000\uFF0C\u3001\u3002\uFF0E\u2027\uFF1B\uFF1A\uFF1F\uFF01\uFE30\u2026\u2025\uFE50\uFE51\uFE52\xB7\uFE54\uFE55\uFE56\uFE57\uFF5C\u2013\uFE31\u2014\uFE33\u2574\uFE34\uFE4F\uFF08\uFF09\uFE35\uFE36\uFF5B\uFF5D\uFE37\uFE38\u3014\u3015\uFE39\uFE3A\u3010\u3011\uFE3B\uFE3C\u300A\u300B\uFE3D\uFE3E\u3008\u3009\uFE3F\uFE40\u300C\u300D\uFE41\uFE42\u300E\u300F\uFE43\uFE44\uFE59\uFE5A"], + ["a1a1", "\uFE5B\uFE5C\uFE5D\uFE5E\u2018\u2019\u201C\u201D\u301D\u301E\u2035\u2032\uFF03\uFF06\uFF0A\u203B\xA7\u3003\u25CB\u25CF\u25B3\u25B2\u25CE\u2606\u2605\u25C7\u25C6\u25A1\u25A0\u25BD\u25BC\u32A3\u2105\xAF\uFFE3\uFF3F\u02CD\uFE49\uFE4A\uFE4D\uFE4E\uFE4B\uFE4C\uFE5F\uFE60\uFE61\uFF0B\uFF0D\xD7\xF7\xB1\u221A\uFF1C\uFF1E\uFF1D\u2266\u2267\u2260\u221E\u2252\u2261\uFE62", 4, "\uFF5E\u2229\u222A\u22A5\u2220\u221F\u22BF\u33D2\u33D1\u222B\u222E\u2235\u2234\u2640\u2642\u2295\u2299\u2191\u2193\u2190\u2192\u2196\u2197\u2199\u2198\u2225\u2223\uFF0F"], + ["a240", "\uFF3C\u2215\uFE68\uFF04\uFFE5\u3012\uFFE0\uFFE1\uFF05\uFF20\u2103\u2109\uFE69\uFE6A\uFE6B\u33D5\u339C\u339D\u339E\u33CE\u33A1\u338E\u338F\u33C4\xB0\u5159\u515B\u515E\u515D\u5161\u5163\u55E7\u74E9\u7CCE\u2581", 7, "\u258F\u258E\u258D\u258C\u258B\u258A\u2589\u253C\u2534\u252C\u2524\u251C\u2594\u2500\u2502\u2595\u250C\u2510\u2514\u2518\u256D"], + ["a2a1", "\u256E\u2570\u256F\u2550\u255E\u256A\u2561\u25E2\u25E3\u25E5\u25E4\u2571\u2572\u2573\uFF10", 9, "\u2160", 9, "\u3021", 8, "\u5341\u5344\u5345\uFF21", 25, "\uFF41", 21], + ["a340", "\uFF57\uFF58\uFF59\uFF5A\u0391", 16, "\u03A3", 6, "\u03B1", 16, "\u03C3", 6, "\u3105", 10], + ["a3a1", "\u3110", 25, "\u02D9\u02C9\u02CA\u02C7\u02CB"], + ["a3e1", "\u20AC"], + ["a440", "\u4E00\u4E59\u4E01\u4E03\u4E43\u4E5D\u4E86\u4E8C\u4EBA\u513F\u5165\u516B\u51E0\u5200\u5201\u529B\u5315\u5341\u535C\u53C8\u4E09\u4E0B\u4E08\u4E0A\u4E2B\u4E38\u51E1\u4E45\u4E48\u4E5F\u4E5E\u4E8E\u4EA1\u5140\u5203\u52FA\u5343\u53C9\u53E3\u571F\u58EB\u5915\u5927\u5973\u5B50\u5B51\u5B53\u5BF8\u5C0F\u5C22\u5C38\u5C71\u5DDD\u5DE5\u5DF1\u5DF2\u5DF3\u5DFE\u5E72\u5EFE\u5F0B\u5F13\u624D"], + ["a4a1", "\u4E11\u4E10\u4E0D\u4E2D\u4E30\u4E39\u4E4B\u5C39\u4E88\u4E91\u4E95\u4E92\u4E94\u4EA2\u4EC1\u4EC0\u4EC3\u4EC6\u4EC7\u4ECD\u4ECA\u4ECB\u4EC4\u5143\u5141\u5167\u516D\u516E\u516C\u5197\u51F6\u5206\u5207\u5208\u52FB\u52FE\u52FF\u5316\u5339\u5348\u5347\u5345\u535E\u5384\u53CB\u53CA\u53CD\u58EC\u5929\u592B\u592A\u592D\u5B54\u5C11\u5C24\u5C3A\u5C6F\u5DF4\u5E7B\u5EFF\u5F14\u5F15\u5FC3\u6208\u6236\u624B\u624E\u652F\u6587\u6597\u65A4\u65B9\u65E5\u66F0\u6708\u6728\u6B20\u6B62\u6B79\u6BCB\u6BD4\u6BDB\u6C0F\u6C34\u706B\u722A\u7236\u723B\u7247\u7259\u725B\u72AC\u738B\u4E19"], + ["a540", "\u4E16\u4E15\u4E14\u4E18\u4E3B\u4E4D\u4E4F\u4E4E\u4EE5\u4ED8\u4ED4\u4ED5\u4ED6\u4ED7\u4EE3\u4EE4\u4ED9\u4EDE\u5145\u5144\u5189\u518A\u51AC\u51F9\u51FA\u51F8\u520A\u52A0\u529F\u5305\u5306\u5317\u531D\u4EDF\u534A\u5349\u5361\u5360\u536F\u536E\u53BB\u53EF\u53E4\u53F3\u53EC\u53EE\u53E9\u53E8\u53FC\u53F8\u53F5\u53EB\u53E6\u53EA\u53F2\u53F1\u53F0\u53E5\u53ED\u53FB\u56DB\u56DA\u5916"], + ["a5a1", "\u592E\u5931\u5974\u5976\u5B55\u5B83\u5C3C\u5DE8\u5DE7\u5DE6\u5E02\u5E03\u5E73\u5E7C\u5F01\u5F18\u5F17\u5FC5\u620A\u6253\u6254\u6252\u6251\u65A5\u65E6\u672E\u672C\u672A\u672B\u672D\u6B63\u6BCD\u6C11\u6C10\u6C38\u6C41\u6C40\u6C3E\u72AF\u7384\u7389\u74DC\u74E6\u7518\u751F\u7528\u7529\u7530\u7531\u7532\u7533\u758B\u767D\u76AE\u76BF\u76EE\u77DB\u77E2\u77F3\u793A\u79BE\u7A74\u7ACB\u4E1E\u4E1F\u4E52\u4E53\u4E69\u4E99\u4EA4\u4EA6\u4EA5\u4EFF\u4F09\u4F19\u4F0A\u4F15\u4F0D\u4F10\u4F11\u4F0F\u4EF2\u4EF6\u4EFB\u4EF0\u4EF3\u4EFD\u4F01\u4F0B\u5149\u5147\u5146\u5148\u5168"], + ["a640", "\u5171\u518D\u51B0\u5217\u5211\u5212\u520E\u5216\u52A3\u5308\u5321\u5320\u5370\u5371\u5409\u540F\u540C\u540A\u5410\u5401\u540B\u5404\u5411\u540D\u5408\u5403\u540E\u5406\u5412\u56E0\u56DE\u56DD\u5733\u5730\u5728\u572D\u572C\u572F\u5729\u5919\u591A\u5937\u5938\u5984\u5978\u5983\u597D\u5979\u5982\u5981\u5B57\u5B58\u5B87\u5B88\u5B85\u5B89\u5BFA\u5C16\u5C79\u5DDE\u5E06\u5E76\u5E74"], + ["a6a1", "\u5F0F\u5F1B\u5FD9\u5FD6\u620E\u620C\u620D\u6210\u6263\u625B\u6258\u6536\u65E9\u65E8\u65EC\u65ED\u66F2\u66F3\u6709\u673D\u6734\u6731\u6735\u6B21\u6B64\u6B7B\u6C16\u6C5D\u6C57\u6C59\u6C5F\u6C60\u6C50\u6C55\u6C61\u6C5B\u6C4D\u6C4E\u7070\u725F\u725D\u767E\u7AF9\u7C73\u7CF8\u7F36\u7F8A\u7FBD\u8001\u8003\u800C\u8012\u8033\u807F\u8089\u808B\u808C\u81E3\u81EA\u81F3\u81FC\u820C\u821B\u821F\u826E\u8272\u827E\u866B\u8840\u884C\u8863\u897F\u9621\u4E32\u4EA8\u4F4D\u4F4F\u4F47\u4F57\u4F5E\u4F34\u4F5B\u4F55\u4F30\u4F50\u4F51\u4F3D\u4F3A\u4F38\u4F43\u4F54\u4F3C\u4F46\u4F63"], + ["a740", "\u4F5C\u4F60\u4F2F\u4F4E\u4F36\u4F59\u4F5D\u4F48\u4F5A\u514C\u514B\u514D\u5175\u51B6\u51B7\u5225\u5224\u5229\u522A\u5228\u52AB\u52A9\u52AA\u52AC\u5323\u5373\u5375\u541D\u542D\u541E\u543E\u5426\u544E\u5427\u5446\u5443\u5433\u5448\u5442\u541B\u5429\u544A\u5439\u543B\u5438\u542E\u5435\u5436\u5420\u543C\u5440\u5431\u542B\u541F\u542C\u56EA\u56F0\u56E4\u56EB\u574A\u5751\u5740\u574D"], + ["a7a1", "\u5747\u574E\u573E\u5750\u574F\u573B\u58EF\u593E\u599D\u5992\u59A8\u599E\u59A3\u5999\u5996\u598D\u59A4\u5993\u598A\u59A5\u5B5D\u5B5C\u5B5A\u5B5B\u5B8C\u5B8B\u5B8F\u5C2C\u5C40\u5C41\u5C3F\u5C3E\u5C90\u5C91\u5C94\u5C8C\u5DEB\u5E0C\u5E8F\u5E87\u5E8A\u5EF7\u5F04\u5F1F\u5F64\u5F62\u5F77\u5F79\u5FD8\u5FCC\u5FD7\u5FCD\u5FF1\u5FEB\u5FF8\u5FEA\u6212\u6211\u6284\u6297\u6296\u6280\u6276\u6289\u626D\u628A\u627C\u627E\u6279\u6273\u6292\u626F\u6298\u626E\u6295\u6293\u6291\u6286\u6539\u653B\u6538\u65F1\u66F4\u675F\u674E\u674F\u6750\u6751\u675C\u6756\u675E\u6749\u6746\u6760"], + ["a840", "\u6753\u6757\u6B65\u6BCF\u6C42\u6C5E\u6C99\u6C81\u6C88\u6C89\u6C85\u6C9B\u6C6A\u6C7A\u6C90\u6C70\u6C8C\u6C68\u6C96\u6C92\u6C7D\u6C83\u6C72\u6C7E\u6C74\u6C86\u6C76\u6C8D\u6C94\u6C98\u6C82\u7076\u707C\u707D\u7078\u7262\u7261\u7260\u72C4\u72C2\u7396\u752C\u752B\u7537\u7538\u7682\u76EF\u77E3\u79C1\u79C0\u79BF\u7A76\u7CFB\u7F55\u8096\u8093\u809D\u8098\u809B\u809A\u80B2\u826F\u8292"], + ["a8a1", "\u828B\u828D\u898B\u89D2\u8A00\u8C37\u8C46\u8C55\u8C9D\u8D64\u8D70\u8DB3\u8EAB\u8ECA\u8F9B\u8FB0\u8FC2\u8FC6\u8FC5\u8FC4\u5DE1\u9091\u90A2\u90AA\u90A6\u90A3\u9149\u91C6\u91CC\u9632\u962E\u9631\u962A\u962C\u4E26\u4E56\u4E73\u4E8B\u4E9B\u4E9E\u4EAB\u4EAC\u4F6F\u4F9D\u4F8D\u4F73\u4F7F\u4F6C\u4F9B\u4F8B\u4F86\u4F83\u4F70\u4F75\u4F88\u4F69\u4F7B\u4F96\u4F7E\u4F8F\u4F91\u4F7A\u5154\u5152\u5155\u5169\u5177\u5176\u5178\u51BD\u51FD\u523B\u5238\u5237\u523A\u5230\u522E\u5236\u5241\u52BE\u52BB\u5352\u5354\u5353\u5351\u5366\u5377\u5378\u5379\u53D6\u53D4\u53D7\u5473\u5475"], + ["a940", "\u5496\u5478\u5495\u5480\u547B\u5477\u5484\u5492\u5486\u547C\u5490\u5471\u5476\u548C\u549A\u5462\u5468\u548B\u547D\u548E\u56FA\u5783\u5777\u576A\u5769\u5761\u5766\u5764\u577C\u591C\u5949\u5947\u5948\u5944\u5954\u59BE\u59BB\u59D4\u59B9\u59AE\u59D1\u59C6\u59D0\u59CD\u59CB\u59D3\u59CA\u59AF\u59B3\u59D2\u59C5\u5B5F\u5B64\u5B63\u5B97\u5B9A\u5B98\u5B9C\u5B99\u5B9B\u5C1A\u5C48\u5C45"], + ["a9a1", "\u5C46\u5CB7\u5CA1\u5CB8\u5CA9\u5CAB\u5CB1\u5CB3\u5E18\u5E1A\u5E16\u5E15\u5E1B\u5E11\u5E78\u5E9A\u5E97\u5E9C\u5E95\u5E96\u5EF6\u5F26\u5F27\u5F29\u5F80\u5F81\u5F7F\u5F7C\u5FDD\u5FE0\u5FFD\u5FF5\u5FFF\u600F\u6014\u602F\u6035\u6016\u602A\u6015\u6021\u6027\u6029\u602B\u601B\u6216\u6215\u623F\u623E\u6240\u627F\u62C9\u62CC\u62C4\u62BF\u62C2\u62B9\u62D2\u62DB\u62AB\u62D3\u62D4\u62CB\u62C8\u62A8\u62BD\u62BC\u62D0\u62D9\u62C7\u62CD\u62B5\u62DA\u62B1\u62D8\u62D6\u62D7\u62C6\u62AC\u62CE\u653E\u65A7\u65BC\u65FA\u6614\u6613\u660C\u6606\u6602\u660E\u6600\u660F\u6615\u660A"], + ["aa40", "\u6607\u670D\u670B\u676D\u678B\u6795\u6771\u679C\u6773\u6777\u6787\u679D\u6797\u676F\u6770\u677F\u6789\u677E\u6790\u6775\u679A\u6793\u677C\u676A\u6772\u6B23\u6B66\u6B67\u6B7F\u6C13\u6C1B\u6CE3\u6CE8\u6CF3\u6CB1\u6CCC\u6CE5\u6CB3\u6CBD\u6CBE\u6CBC\u6CE2\u6CAB\u6CD5\u6CD3\u6CB8\u6CC4\u6CB9\u6CC1\u6CAE\u6CD7\u6CC5\u6CF1\u6CBF\u6CBB\u6CE1\u6CDB\u6CCA\u6CAC\u6CEF\u6CDC\u6CD6\u6CE0"], + ["aaa1", "\u7095\u708E\u7092\u708A\u7099\u722C\u722D\u7238\u7248\u7267\u7269\u72C0\u72CE\u72D9\u72D7\u72D0\u73A9\u73A8\u739F\u73AB\u73A5\u753D\u759D\u7599\u759A\u7684\u76C2\u76F2\u76F4\u77E5\u77FD\u793E\u7940\u7941\u79C9\u79C8\u7A7A\u7A79\u7AFA\u7CFE\u7F54\u7F8C\u7F8B\u8005\u80BA\u80A5\u80A2\u80B1\u80A1\u80AB\u80A9\u80B4\u80AA\u80AF\u81E5\u81FE\u820D\u82B3\u829D\u8299\u82AD\u82BD\u829F\u82B9\u82B1\u82AC\u82A5\u82AF\u82B8\u82A3\u82B0\u82BE\u82B7\u864E\u8671\u521D\u8868\u8ECB\u8FCE\u8FD4\u8FD1\u90B5\u90B8\u90B1\u90B6\u91C7\u91D1\u9577\u9580\u961C\u9640\u963F\u963B\u9644"], + ["ab40", "\u9642\u96B9\u96E8\u9752\u975E\u4E9F\u4EAD\u4EAE\u4FE1\u4FB5\u4FAF\u4FBF\u4FE0\u4FD1\u4FCF\u4FDD\u4FC3\u4FB6\u4FD8\u4FDF\u4FCA\u4FD7\u4FAE\u4FD0\u4FC4\u4FC2\u4FDA\u4FCE\u4FDE\u4FB7\u5157\u5192\u5191\u51A0\u524E\u5243\u524A\u524D\u524C\u524B\u5247\u52C7\u52C9\u52C3\u52C1\u530D\u5357\u537B\u539A\u53DB\u54AC\u54C0\u54A8\u54CE\u54C9\u54B8\u54A6\u54B3\u54C7\u54C2\u54BD\u54AA\u54C1"], + ["aba1", "\u54C4\u54C8\u54AF\u54AB\u54B1\u54BB\u54A9\u54A7\u54BF\u56FF\u5782\u578B\u57A0\u57A3\u57A2\u57CE\u57AE\u5793\u5955\u5951\u594F\u594E\u5950\u59DC\u59D8\u59FF\u59E3\u59E8\u5A03\u59E5\u59EA\u59DA\u59E6\u5A01\u59FB\u5B69\u5BA3\u5BA6\u5BA4\u5BA2\u5BA5\u5C01\u5C4E\u5C4F\u5C4D\u5C4B\u5CD9\u5CD2\u5DF7\u5E1D\u5E25\u5E1F\u5E7D\u5EA0\u5EA6\u5EFA\u5F08\u5F2D\u5F65\u5F88\u5F85\u5F8A\u5F8B\u5F87\u5F8C\u5F89\u6012\u601D\u6020\u6025\u600E\u6028\u604D\u6070\u6068\u6062\u6046\u6043\u606C\u606B\u606A\u6064\u6241\u62DC\u6316\u6309\u62FC\u62ED\u6301\u62EE\u62FD\u6307\u62F1\u62F7"], + ["ac40", "\u62EF\u62EC\u62FE\u62F4\u6311\u6302\u653F\u6545\u65AB\u65BD\u65E2\u6625\u662D\u6620\u6627\u662F\u661F\u6628\u6631\u6624\u66F7\u67FF\u67D3\u67F1\u67D4\u67D0\u67EC\u67B6\u67AF\u67F5\u67E9\u67EF\u67C4\u67D1\u67B4\u67DA\u67E5\u67B8\u67CF\u67DE\u67F3\u67B0\u67D9\u67E2\u67DD\u67D2\u6B6A\u6B83\u6B86\u6BB5\u6BD2\u6BD7\u6C1F\u6CC9\u6D0B\u6D32\u6D2A\u6D41\u6D25\u6D0C\u6D31\u6D1E\u6D17"], + ["aca1", "\u6D3B\u6D3D\u6D3E\u6D36\u6D1B\u6CF5\u6D39\u6D27\u6D38\u6D29\u6D2E\u6D35\u6D0E\u6D2B\u70AB\u70BA\u70B3\u70AC\u70AF\u70AD\u70B8\u70AE\u70A4\u7230\u7272\u726F\u7274\u72E9\u72E0\u72E1\u73B7\u73CA\u73BB\u73B2\u73CD\u73C0\u73B3\u751A\u752D\u754F\u754C\u754E\u754B\u75AB\u75A4\u75A5\u75A2\u75A3\u7678\u7686\u7687\u7688\u76C8\u76C6\u76C3\u76C5\u7701\u76F9\u76F8\u7709\u770B\u76FE\u76FC\u7707\u77DC\u7802\u7814\u780C\u780D\u7946\u7949\u7948\u7947\u79B9\u79BA\u79D1\u79D2\u79CB\u7A7F\u7A81\u7AFF\u7AFD\u7C7D\u7D02\u7D05\u7D00\u7D09\u7D07\u7D04\u7D06\u7F38\u7F8E\u7FBF\u8004"], + ["ad40", "\u8010\u800D\u8011\u8036\u80D6\u80E5\u80DA\u80C3\u80C4\u80CC\u80E1\u80DB\u80CE\u80DE\u80E4\u80DD\u81F4\u8222\u82E7\u8303\u8305\u82E3\u82DB\u82E6\u8304\u82E5\u8302\u8309\u82D2\u82D7\u82F1\u8301\u82DC\u82D4\u82D1\u82DE\u82D3\u82DF\u82EF\u8306\u8650\u8679\u867B\u867A\u884D\u886B\u8981\u89D4\u8A08\u8A02\u8A03\u8C9E\u8CA0\u8D74\u8D73\u8DB4\u8ECD\u8ECC\u8FF0\u8FE6\u8FE2\u8FEA\u8FE5"], + ["ada1", "\u8FED\u8FEB\u8FE4\u8FE8\u90CA\u90CE\u90C1\u90C3\u914B\u914A\u91CD\u9582\u9650\u964B\u964C\u964D\u9762\u9769\u97CB\u97ED\u97F3\u9801\u98A8\u98DB\u98DF\u9996\u9999\u4E58\u4EB3\u500C\u500D\u5023\u4FEF\u5026\u5025\u4FF8\u5029\u5016\u5006\u503C\u501F\u501A\u5012\u5011\u4FFA\u5000\u5014\u5028\u4FF1\u5021\u500B\u5019\u5018\u4FF3\u4FEE\u502D\u502A\u4FFE\u502B\u5009\u517C\u51A4\u51A5\u51A2\u51CD\u51CC\u51C6\u51CB\u5256\u525C\u5254\u525B\u525D\u532A\u537F\u539F\u539D\u53DF\u54E8\u5510\u5501\u5537\u54FC\u54E5\u54F2\u5506\u54FA\u5514\u54E9\u54ED\u54E1\u5509\u54EE\u54EA"], + ["ae40", "\u54E6\u5527\u5507\u54FD\u550F\u5703\u5704\u57C2\u57D4\u57CB\u57C3\u5809\u590F\u5957\u5958\u595A\u5A11\u5A18\u5A1C\u5A1F\u5A1B\u5A13\u59EC\u5A20\u5A23\u5A29\u5A25\u5A0C\u5A09\u5B6B\u5C58\u5BB0\u5BB3\u5BB6\u5BB4\u5BAE\u5BB5\u5BB9\u5BB8\u5C04\u5C51\u5C55\u5C50\u5CED\u5CFD\u5CFB\u5CEA\u5CE8\u5CF0\u5CF6\u5D01\u5CF4\u5DEE\u5E2D\u5E2B\u5EAB\u5EAD\u5EA7\u5F31\u5F92\u5F91\u5F90\u6059"], + ["aea1", "\u6063\u6065\u6050\u6055\u606D\u6069\u606F\u6084\u609F\u609A\u608D\u6094\u608C\u6085\u6096\u6247\u62F3\u6308\u62FF\u634E\u633E\u632F\u6355\u6342\u6346\u634F\u6349\u633A\u6350\u633D\u632A\u632B\u6328\u634D\u634C\u6548\u6549\u6599\u65C1\u65C5\u6642\u6649\u664F\u6643\u6652\u664C\u6645\u6641\u66F8\u6714\u6715\u6717\u6821\u6838\u6848\u6846\u6853\u6839\u6842\u6854\u6829\u68B3\u6817\u684C\u6851\u683D\u67F4\u6850\u6840\u683C\u6843\u682A\u6845\u6813\u6818\u6841\u6B8A\u6B89\u6BB7\u6C23\u6C27\u6C28\u6C26\u6C24\u6CF0\u6D6A\u6D95\u6D88\u6D87\u6D66\u6D78\u6D77\u6D59\u6D93"], + ["af40", "\u6D6C\u6D89\u6D6E\u6D5A\u6D74\u6D69\u6D8C\u6D8A\u6D79\u6D85\u6D65\u6D94\u70CA\u70D8\u70E4\u70D9\u70C8\u70CF\u7239\u7279\u72FC\u72F9\u72FD\u72F8\u72F7\u7386\u73ED\u7409\u73EE\u73E0\u73EA\u73DE\u7554\u755D\u755C\u755A\u7559\u75BE\u75C5\u75C7\u75B2\u75B3\u75BD\u75BC\u75B9\u75C2\u75B8\u768B\u76B0\u76CA\u76CD\u76CE\u7729\u771F\u7720\u7728\u77E9\u7830\u7827\u7838\u781D\u7834\u7837"], + ["afa1", "\u7825\u782D\u7820\u781F\u7832\u7955\u7950\u7960\u795F\u7956\u795E\u795D\u7957\u795A\u79E4\u79E3\u79E7\u79DF\u79E6\u79E9\u79D8\u7A84\u7A88\u7AD9\u7B06\u7B11\u7C89\u7D21\u7D17\u7D0B\u7D0A\u7D20\u7D22\u7D14\u7D10\u7D15\u7D1A\u7D1C\u7D0D\u7D19\u7D1B\u7F3A\u7F5F\u7F94\u7FC5\u7FC1\u8006\u8018\u8015\u8019\u8017\u803D\u803F\u80F1\u8102\u80F0\u8105\u80ED\u80F4\u8106\u80F8\u80F3\u8108\u80FD\u810A\u80FC\u80EF\u81ED\u81EC\u8200\u8210\u822A\u822B\u8228\u822C\u82BB\u832B\u8352\u8354\u834A\u8338\u8350\u8349\u8335\u8334\u834F\u8332\u8339\u8336\u8317\u8340\u8331\u8328\u8343"], + ["b040", "\u8654\u868A\u86AA\u8693\u86A4\u86A9\u868C\u86A3\u869C\u8870\u8877\u8881\u8882\u887D\u8879\u8A18\u8A10\u8A0E\u8A0C\u8A15\u8A0A\u8A17\u8A13\u8A16\u8A0F\u8A11\u8C48\u8C7A\u8C79\u8CA1\u8CA2\u8D77\u8EAC\u8ED2\u8ED4\u8ECF\u8FB1\u9001\u9006\u8FF7\u9000\u8FFA\u8FF4\u9003\u8FFD\u9005\u8FF8\u9095\u90E1\u90DD\u90E2\u9152\u914D\u914C\u91D8\u91DD\u91D7\u91DC\u91D9\u9583\u9662\u9663\u9661"], + ["b0a1", "\u965B\u965D\u9664\u9658\u965E\u96BB\u98E2\u99AC\u9AA8\u9AD8\u9B25\u9B32\u9B3C\u4E7E\u507A\u507D\u505C\u5047\u5043\u504C\u505A\u5049\u5065\u5076\u504E\u5055\u5075\u5074\u5077\u504F\u500F\u506F\u506D\u515C\u5195\u51F0\u526A\u526F\u52D2\u52D9\u52D8\u52D5\u5310\u530F\u5319\u533F\u5340\u533E\u53C3\u66FC\u5546\u556A\u5566\u5544\u555E\u5561\u5543\u554A\u5531\u5556\u554F\u5555\u552F\u5564\u5538\u552E\u555C\u552C\u5563\u5533\u5541\u5557\u5708\u570B\u5709\u57DF\u5805\u580A\u5806\u57E0\u57E4\u57FA\u5802\u5835\u57F7\u57F9\u5920\u5962\u5A36\u5A41\u5A49\u5A66\u5A6A\u5A40"], + ["b140", "\u5A3C\u5A62\u5A5A\u5A46\u5A4A\u5B70\u5BC7\u5BC5\u5BC4\u5BC2\u5BBF\u5BC6\u5C09\u5C08\u5C07\u5C60\u5C5C\u5C5D\u5D07\u5D06\u5D0E\u5D1B\u5D16\u5D22\u5D11\u5D29\u5D14\u5D19\u5D24\u5D27\u5D17\u5DE2\u5E38\u5E36\u5E33\u5E37\u5EB7\u5EB8\u5EB6\u5EB5\u5EBE\u5F35\u5F37\u5F57\u5F6C\u5F69\u5F6B\u5F97\u5F99\u5F9E\u5F98\u5FA1\u5FA0\u5F9C\u607F\u60A3\u6089\u60A0\u60A8\u60CB\u60B4\u60E6\u60BD"], + ["b1a1", "\u60C5\u60BB\u60B5\u60DC\u60BC\u60D8\u60D5\u60C6\u60DF\u60B8\u60DA\u60C7\u621A\u621B\u6248\u63A0\u63A7\u6372\u6396\u63A2\u63A5\u6377\u6367\u6398\u63AA\u6371\u63A9\u6389\u6383\u639B\u636B\u63A8\u6384\u6388\u6399\u63A1\u63AC\u6392\u638F\u6380\u637B\u6369\u6368\u637A\u655D\u6556\u6551\u6559\u6557\u555F\u654F\u6558\u6555\u6554\u659C\u659B\u65AC\u65CF\u65CB\u65CC\u65CE\u665D\u665A\u6664\u6668\u6666\u665E\u66F9\u52D7\u671B\u6881\u68AF\u68A2\u6893\u68B5\u687F\u6876\u68B1\u68A7\u6897\u68B0\u6883\u68C4\u68AD\u6886\u6885\u6894\u689D\u68A8\u689F\u68A1\u6882\u6B32\u6BBA"], + ["b240", "\u6BEB\u6BEC\u6C2B\u6D8E\u6DBC\u6DF3\u6DD9\u6DB2\u6DE1\u6DCC\u6DE4\u6DFB\u6DFA\u6E05\u6DC7\u6DCB\u6DAF\u6DD1\u6DAE\u6DDE\u6DF9\u6DB8\u6DF7\u6DF5\u6DC5\u6DD2\u6E1A\u6DB5\u6DDA\u6DEB\u6DD8\u6DEA\u6DF1\u6DEE\u6DE8\u6DC6\u6DC4\u6DAA\u6DEC\u6DBF\u6DE6\u70F9\u7109\u710A\u70FD\u70EF\u723D\u727D\u7281\u731C\u731B\u7316\u7313\u7319\u7387\u7405\u740A\u7403\u7406\u73FE\u740D\u74E0\u74F6"], + ["b2a1", "\u74F7\u751C\u7522\u7565\u7566\u7562\u7570\u758F\u75D4\u75D5\u75B5\u75CA\u75CD\u768E\u76D4\u76D2\u76DB\u7737\u773E\u773C\u7736\u7738\u773A\u786B\u7843\u784E\u7965\u7968\u796D\u79FB\u7A92\u7A95\u7B20\u7B28\u7B1B\u7B2C\u7B26\u7B19\u7B1E\u7B2E\u7C92\u7C97\u7C95\u7D46\u7D43\u7D71\u7D2E\u7D39\u7D3C\u7D40\u7D30\u7D33\u7D44\u7D2F\u7D42\u7D32\u7D31\u7F3D\u7F9E\u7F9A\u7FCC\u7FCE\u7FD2\u801C\u804A\u8046\u812F\u8116\u8123\u812B\u8129\u8130\u8124\u8202\u8235\u8237\u8236\u8239\u838E\u839E\u8398\u8378\u83A2\u8396\u83BD\u83AB\u8392\u838A\u8393\u8389\u83A0\u8377\u837B\u837C"], + ["b340", "\u8386\u83A7\u8655\u5F6A\u86C7\u86C0\u86B6\u86C4\u86B5\u86C6\u86CB\u86B1\u86AF\u86C9\u8853\u889E\u8888\u88AB\u8892\u8896\u888D\u888B\u8993\u898F\u8A2A\u8A1D\u8A23\u8A25\u8A31\u8A2D\u8A1F\u8A1B\u8A22\u8C49\u8C5A\u8CA9\u8CAC\u8CAB\u8CA8\u8CAA\u8CA7\u8D67\u8D66\u8DBE\u8DBA\u8EDB\u8EDF\u9019\u900D\u901A\u9017\u9023\u901F\u901D\u9010\u9015\u901E\u9020\u900F\u9022\u9016\u901B\u9014"], + ["b3a1", "\u90E8\u90ED\u90FD\u9157\u91CE\u91F5\u91E6\u91E3\u91E7\u91ED\u91E9\u9589\u966A\u9675\u9673\u9678\u9670\u9674\u9676\u9677\u966C\u96C0\u96EA\u96E9\u7AE0\u7ADF\u9802\u9803\u9B5A\u9CE5\u9E75\u9E7F\u9EA5\u9EBB\u50A2\u508D\u5085\u5099\u5091\u5080\u5096\u5098\u509A\u6700\u51F1\u5272\u5274\u5275\u5269\u52DE\u52DD\u52DB\u535A\u53A5\u557B\u5580\u55A7\u557C\u558A\u559D\u5598\u5582\u559C\u55AA\u5594\u5587\u558B\u5583\u55B3\u55AE\u559F\u553E\u55B2\u559A\u55BB\u55AC\u55B1\u557E\u5589\u55AB\u5599\u570D\u582F\u582A\u5834\u5824\u5830\u5831\u5821\u581D\u5820\u58F9\u58FA\u5960"], + ["b440", "\u5A77\u5A9A\u5A7F\u5A92\u5A9B\u5AA7\u5B73\u5B71\u5BD2\u5BCC\u5BD3\u5BD0\u5C0A\u5C0B\u5C31\u5D4C\u5D50\u5D34\u5D47\u5DFD\u5E45\u5E3D\u5E40\u5E43\u5E7E\u5ECA\u5EC1\u5EC2\u5EC4\u5F3C\u5F6D\u5FA9\u5FAA\u5FA8\u60D1\u60E1\u60B2\u60B6\u60E0\u611C\u6123\u60FA\u6115\u60F0\u60FB\u60F4\u6168\u60F1\u610E\u60F6\u6109\u6100\u6112\u621F\u6249\u63A3\u638C\u63CF\u63C0\u63E9\u63C9\u63C6\u63CD"], + ["b4a1", "\u63D2\u63E3\u63D0\u63E1\u63D6\u63ED\u63EE\u6376\u63F4\u63EA\u63DB\u6452\u63DA\u63F9\u655E\u6566\u6562\u6563\u6591\u6590\u65AF\u666E\u6670\u6674\u6676\u666F\u6691\u667A\u667E\u6677\u66FE\u66FF\u671F\u671D\u68FA\u68D5\u68E0\u68D8\u68D7\u6905\u68DF\u68F5\u68EE\u68E7\u68F9\u68D2\u68F2\u68E3\u68CB\u68CD\u690D\u6912\u690E\u68C9\u68DA\u696E\u68FB\u6B3E\u6B3A\u6B3D\u6B98\u6B96\u6BBC\u6BEF\u6C2E\u6C2F\u6C2C\u6E2F\u6E38\u6E54\u6E21\u6E32\u6E67\u6E4A\u6E20\u6E25\u6E23\u6E1B\u6E5B\u6E58\u6E24\u6E56\u6E6E\u6E2D\u6E26\u6E6F\u6E34\u6E4D\u6E3A\u6E2C\u6E43\u6E1D\u6E3E\u6ECB"], + ["b540", "\u6E89\u6E19\u6E4E\u6E63\u6E44\u6E72\u6E69\u6E5F\u7119\u711A\u7126\u7130\u7121\u7136\u716E\u711C\u724C\u7284\u7280\u7336\u7325\u7334\u7329\u743A\u742A\u7433\u7422\u7425\u7435\u7436\u7434\u742F\u741B\u7426\u7428\u7525\u7526\u756B\u756A\u75E2\u75DB\u75E3\u75D9\u75D8\u75DE\u75E0\u767B\u767C\u7696\u7693\u76B4\u76DC\u774F\u77ED\u785D\u786C\u786F\u7A0D\u7A08\u7A0B\u7A05\u7A00\u7A98"], + ["b5a1", "\u7A97\u7A96\u7AE5\u7AE3\u7B49\u7B56\u7B46\u7B50\u7B52\u7B54\u7B4D\u7B4B\u7B4F\u7B51\u7C9F\u7CA5\u7D5E\u7D50\u7D68\u7D55\u7D2B\u7D6E\u7D72\u7D61\u7D66\u7D62\u7D70\u7D73\u5584\u7FD4\u7FD5\u800B\u8052\u8085\u8155\u8154\u814B\u8151\u814E\u8139\u8146\u813E\u814C\u8153\u8174\u8212\u821C\u83E9\u8403\u83F8\u840D\u83E0\u83C5\u840B\u83C1\u83EF\u83F1\u83F4\u8457\u840A\u83F0\u840C\u83CC\u83FD\u83F2\u83CA\u8438\u840E\u8404\u83DC\u8407\u83D4\u83DF\u865B\u86DF\u86D9\u86ED\u86D4\u86DB\u86E4\u86D0\u86DE\u8857\u88C1\u88C2\u88B1\u8983\u8996\u8A3B\u8A60\u8A55\u8A5E\u8A3C\u8A41"], + ["b640", "\u8A54\u8A5B\u8A50\u8A46\u8A34\u8A3A\u8A36\u8A56\u8C61\u8C82\u8CAF\u8CBC\u8CB3\u8CBD\u8CC1\u8CBB\u8CC0\u8CB4\u8CB7\u8CB6\u8CBF\u8CB8\u8D8A\u8D85\u8D81\u8DCE\u8DDD\u8DCB\u8DDA\u8DD1\u8DCC\u8DDB\u8DC6\u8EFB\u8EF8\u8EFC\u8F9C\u902E\u9035\u9031\u9038\u9032\u9036\u9102\u90F5\u9109\u90FE\u9163\u9165\u91CF\u9214\u9215\u9223\u9209\u921E\u920D\u9210\u9207\u9211\u9594\u958F\u958B\u9591"], + ["b6a1", "\u9593\u9592\u958E\u968A\u968E\u968B\u967D\u9685\u9686\u968D\u9672\u9684\u96C1\u96C5\u96C4\u96C6\u96C7\u96EF\u96F2\u97CC\u9805\u9806\u9808\u98E7\u98EA\u98EF\u98E9\u98F2\u98ED\u99AE\u99AD\u9EC3\u9ECD\u9ED1\u4E82\u50AD\u50B5\u50B2\u50B3\u50C5\u50BE\u50AC\u50B7\u50BB\u50AF\u50C7\u527F\u5277\u527D\u52DF\u52E6\u52E4\u52E2\u52E3\u532F\u55DF\u55E8\u55D3\u55E6\u55CE\u55DC\u55C7\u55D1\u55E3\u55E4\u55EF\u55DA\u55E1\u55C5\u55C6\u55E5\u55C9\u5712\u5713\u585E\u5851\u5858\u5857\u585A\u5854\u586B\u584C\u586D\u584A\u5862\u5852\u584B\u5967\u5AC1\u5AC9\u5ACC\u5ABE\u5ABD\u5ABC"], + ["b740", "\u5AB3\u5AC2\u5AB2\u5D69\u5D6F\u5E4C\u5E79\u5EC9\u5EC8\u5F12\u5F59\u5FAC\u5FAE\u611A\u610F\u6148\u611F\u60F3\u611B\u60F9\u6101\u6108\u614E\u614C\u6144\u614D\u613E\u6134\u6127\u610D\u6106\u6137\u6221\u6222\u6413\u643E\u641E\u642A\u642D\u643D\u642C\u640F\u641C\u6414\u640D\u6436\u6416\u6417\u6406\u656C\u659F\u65B0\u6697\u6689\u6687\u6688\u6696\u6684\u6698\u668D\u6703\u6994\u696D"], + ["b7a1", "\u695A\u6977\u6960\u6954\u6975\u6930\u6982\u694A\u6968\u696B\u695E\u6953\u6979\u6986\u695D\u6963\u695B\u6B47\u6B72\u6BC0\u6BBF\u6BD3\u6BFD\u6EA2\u6EAF\u6ED3\u6EB6\u6EC2\u6E90\u6E9D\u6EC7\u6EC5\u6EA5\u6E98\u6EBC\u6EBA\u6EAB\u6ED1\u6E96\u6E9C\u6EC4\u6ED4\u6EAA\u6EA7\u6EB4\u714E\u7159\u7169\u7164\u7149\u7167\u715C\u716C\u7166\u714C\u7165\u715E\u7146\u7168\u7156\u723A\u7252\u7337\u7345\u733F\u733E\u746F\u745A\u7455\u745F\u745E\u7441\u743F\u7459\u745B\u745C\u7576\u7578\u7600\u75F0\u7601\u75F2\u75F1\u75FA\u75FF\u75F4\u75F3\u76DE\u76DF\u775B\u776B\u7766\u775E\u7763"], + ["b840", "\u7779\u776A\u776C\u775C\u7765\u7768\u7762\u77EE\u788E\u78B0\u7897\u7898\u788C\u7889\u787C\u7891\u7893\u787F\u797A\u797F\u7981\u842C\u79BD\u7A1C\u7A1A\u7A20\u7A14\u7A1F\u7A1E\u7A9F\u7AA0\u7B77\u7BC0\u7B60\u7B6E\u7B67\u7CB1\u7CB3\u7CB5\u7D93\u7D79\u7D91\u7D81\u7D8F\u7D5B\u7F6E\u7F69\u7F6A\u7F72\u7FA9\u7FA8\u7FA4\u8056\u8058\u8086\u8084\u8171\u8170\u8178\u8165\u816E\u8173\u816B"], + ["b8a1", "\u8179\u817A\u8166\u8205\u8247\u8482\u8477\u843D\u8431\u8475\u8466\u846B\u8449\u846C\u845B\u843C\u8435\u8461\u8463\u8469\u846D\u8446\u865E\u865C\u865F\u86F9\u8713\u8708\u8707\u8700\u86FE\u86FB\u8702\u8703\u8706\u870A\u8859\u88DF\u88D4\u88D9\u88DC\u88D8\u88DD\u88E1\u88CA\u88D5\u88D2\u899C\u89E3\u8A6B\u8A72\u8A73\u8A66\u8A69\u8A70\u8A87\u8A7C\u8A63\u8AA0\u8A71\u8A85\u8A6D\u8A62\u8A6E\u8A6C\u8A79\u8A7B\u8A3E\u8A68\u8C62\u8C8A\u8C89\u8CCA\u8CC7\u8CC8\u8CC4\u8CB2\u8CC3\u8CC2\u8CC5\u8DE1\u8DDF\u8DE8\u8DEF\u8DF3\u8DFA\u8DEA\u8DE4\u8DE6\u8EB2\u8F03\u8F09\u8EFE\u8F0A"], + ["b940", "\u8F9F\u8FB2\u904B\u904A\u9053\u9042\u9054\u903C\u9055\u9050\u9047\u904F\u904E\u904D\u9051\u903E\u9041\u9112\u9117\u916C\u916A\u9169\u91C9\u9237\u9257\u9238\u923D\u9240\u923E\u925B\u924B\u9264\u9251\u9234\u9249\u924D\u9245\u9239\u923F\u925A\u9598\u9698\u9694\u9695\u96CD\u96CB\u96C9\u96CA\u96F7\u96FB\u96F9\u96F6\u9756\u9774\u9776\u9810\u9811\u9813\u980A\u9812\u980C\u98FC\u98F4"], + ["b9a1", "\u98FD\u98FE\u99B3\u99B1\u99B4\u9AE1\u9CE9\u9E82\u9F0E\u9F13\u9F20\u50E7\u50EE\u50E5\u50D6\u50ED\u50DA\u50D5\u50CF\u50D1\u50F1\u50CE\u50E9\u5162\u51F3\u5283\u5282\u5331\u53AD\u55FE\u5600\u561B\u5617\u55FD\u5614\u5606\u5609\u560D\u560E\u55F7\u5616\u561F\u5608\u5610\u55F6\u5718\u5716\u5875\u587E\u5883\u5893\u588A\u5879\u5885\u587D\u58FD\u5925\u5922\u5924\u596A\u5969\u5AE1\u5AE6\u5AE9\u5AD7\u5AD6\u5AD8\u5AE3\u5B75\u5BDE\u5BE7\u5BE1\u5BE5\u5BE6\u5BE8\u5BE2\u5BE4\u5BDF\u5C0D\u5C62\u5D84\u5D87\u5E5B\u5E63\u5E55\u5E57\u5E54\u5ED3\u5ED6\u5F0A\u5F46\u5F70\u5FB9\u6147"], + ["ba40", "\u613F\u614B\u6177\u6162\u6163\u615F\u615A\u6158\u6175\u622A\u6487\u6458\u6454\u64A4\u6478\u645F\u647A\u6451\u6467\u6434\u646D\u647B\u6572\u65A1\u65D7\u65D6\u66A2\u66A8\u669D\u699C\u69A8\u6995\u69C1\u69AE\u69D3\u69CB\u699B\u69B7\u69BB\u69AB\u69B4\u69D0\u69CD\u69AD\u69CC\u69A6\u69C3\u69A3\u6B49\u6B4C\u6C33\u6F33\u6F14\u6EFE\u6F13\u6EF4\u6F29\u6F3E\u6F20\u6F2C\u6F0F\u6F02\u6F22"], + ["baa1", "\u6EFF\u6EEF\u6F06\u6F31\u6F38\u6F32\u6F23\u6F15\u6F2B\u6F2F\u6F88\u6F2A\u6EEC\u6F01\u6EF2\u6ECC\u6EF7\u7194\u7199\u717D\u718A\u7184\u7192\u723E\u7292\u7296\u7344\u7350\u7464\u7463\u746A\u7470\u746D\u7504\u7591\u7627\u760D\u760B\u7609\u7613\u76E1\u76E3\u7784\u777D\u777F\u7761\u78C1\u789F\u78A7\u78B3\u78A9\u78A3\u798E\u798F\u798D\u7A2E\u7A31\u7AAA\u7AA9\u7AED\u7AEF\u7BA1\u7B95\u7B8B\u7B75\u7B97\u7B9D\u7B94\u7B8F\u7BB8\u7B87\u7B84\u7CB9\u7CBD\u7CBE\u7DBB\u7DB0\u7D9C\u7DBD\u7DBE\u7DA0\u7DCA\u7DB4\u7DB2\u7DB1\u7DBA\u7DA2\u7DBF\u7DB5\u7DB8\u7DAD\u7DD2\u7DC7\u7DAC"], + ["bb40", "\u7F70\u7FE0\u7FE1\u7FDF\u805E\u805A\u8087\u8150\u8180\u818F\u8188\u818A\u817F\u8182\u81E7\u81FA\u8207\u8214\u821E\u824B\u84C9\u84BF\u84C6\u84C4\u8499\u849E\u84B2\u849C\u84CB\u84B8\u84C0\u84D3\u8490\u84BC\u84D1\u84CA\u873F\u871C\u873B\u8722\u8725\u8734\u8718\u8755\u8737\u8729\u88F3\u8902\u88F4\u88F9\u88F8\u88FD\u88E8\u891A\u88EF\u8AA6\u8A8C\u8A9E\u8AA3\u8A8D\u8AA1\u8A93\u8AA4"], + ["bba1", "\u8AAA\u8AA5\u8AA8\u8A98\u8A91\u8A9A\u8AA7\u8C6A\u8C8D\u8C8C\u8CD3\u8CD1\u8CD2\u8D6B\u8D99\u8D95\u8DFC\u8F14\u8F12\u8F15\u8F13\u8FA3\u9060\u9058\u905C\u9063\u9059\u905E\u9062\u905D\u905B\u9119\u9118\u911E\u9175\u9178\u9177\u9174\u9278\u9280\u9285\u9298\u9296\u927B\u9293\u929C\u92A8\u927C\u9291\u95A1\u95A8\u95A9\u95A3\u95A5\u95A4\u9699\u969C\u969B\u96CC\u96D2\u9700\u977C\u9785\u97F6\u9817\u9818\u98AF\u98B1\u9903\u9905\u990C\u9909\u99C1\u9AAF\u9AB0\u9AE6\u9B41\u9B42\u9CF4\u9CF6\u9CF3\u9EBC\u9F3B\u9F4A\u5104\u5100\u50FB\u50F5\u50F9\u5102\u5108\u5109\u5105\u51DC"], + ["bc40", "\u5287\u5288\u5289\u528D\u528A\u52F0\u53B2\u562E\u563B\u5639\u5632\u563F\u5634\u5629\u5653\u564E\u5657\u5674\u5636\u562F\u5630\u5880\u589F\u589E\u58B3\u589C\u58AE\u58A9\u58A6\u596D\u5B09\u5AFB\u5B0B\u5AF5\u5B0C\u5B08\u5BEE\u5BEC\u5BE9\u5BEB\u5C64\u5C65\u5D9D\u5D94\u5E62\u5E5F\u5E61\u5EE2\u5EDA\u5EDF\u5EDD\u5EE3\u5EE0\u5F48\u5F71\u5FB7\u5FB5\u6176\u6167\u616E\u615D\u6155\u6182"], + ["bca1", "\u617C\u6170\u616B\u617E\u61A7\u6190\u61AB\u618E\u61AC\u619A\u61A4\u6194\u61AE\u622E\u6469\u646F\u6479\u649E\u64B2\u6488\u6490\u64B0\u64A5\u6493\u6495\u64A9\u6492\u64AE\u64AD\u64AB\u649A\u64AC\u6499\u64A2\u64B3\u6575\u6577\u6578\u66AE\u66AB\u66B4\u66B1\u6A23\u6A1F\u69E8\u6A01\u6A1E\u6A19\u69FD\u6A21\u6A13\u6A0A\u69F3\u6A02\u6A05\u69ED\u6A11\u6B50\u6B4E\u6BA4\u6BC5\u6BC6\u6F3F\u6F7C\u6F84\u6F51\u6F66\u6F54\u6F86\u6F6D\u6F5B\u6F78\u6F6E\u6F8E\u6F7A\u6F70\u6F64\u6F97\u6F58\u6ED5\u6F6F\u6F60\u6F5F\u719F\u71AC\u71B1\u71A8\u7256\u729B\u734E\u7357\u7469\u748B\u7483"], + ["bd40", "\u747E\u7480\u757F\u7620\u7629\u761F\u7624\u7626\u7621\u7622\u769A\u76BA\u76E4\u778E\u7787\u778C\u7791\u778B\u78CB\u78C5\u78BA\u78CA\u78BE\u78D5\u78BC\u78D0\u7A3F\u7A3C\u7A40\u7A3D\u7A37\u7A3B\u7AAF\u7AAE\u7BAD\u7BB1\u7BC4\u7BB4\u7BC6\u7BC7\u7BC1\u7BA0\u7BCC\u7CCA\u7DE0\u7DF4\u7DEF\u7DFB\u7DD8\u7DEC\u7DDD\u7DE8\u7DE3\u7DDA\u7DDE\u7DE9\u7D9E\u7DD9\u7DF2\u7DF9\u7F75\u7F77\u7FAF"], + ["bda1", "\u7FE9\u8026\u819B\u819C\u819D\u81A0\u819A\u8198\u8517\u853D\u851A\u84EE\u852C\u852D\u8513\u8511\u8523\u8521\u8514\u84EC\u8525\u84FF\u8506\u8782\u8774\u8776\u8760\u8766\u8778\u8768\u8759\u8757\u874C\u8753\u885B\u885D\u8910\u8907\u8912\u8913\u8915\u890A\u8ABC\u8AD2\u8AC7\u8AC4\u8A95\u8ACB\u8AF8\u8AB2\u8AC9\u8AC2\u8ABF\u8AB0\u8AD6\u8ACD\u8AB6\u8AB9\u8ADB\u8C4C\u8C4E\u8C6C\u8CE0\u8CDE\u8CE6\u8CE4\u8CEC\u8CED\u8CE2\u8CE3\u8CDC\u8CEA\u8CE1\u8D6D\u8D9F\u8DA3\u8E2B\u8E10\u8E1D\u8E22\u8E0F\u8E29\u8E1F\u8E21\u8E1E\u8EBA\u8F1D\u8F1B\u8F1F\u8F29\u8F26\u8F2A\u8F1C\u8F1E"], + ["be40", "\u8F25\u9069\u906E\u9068\u906D\u9077\u9130\u912D\u9127\u9131\u9187\u9189\u918B\u9183\u92C5\u92BB\u92B7\u92EA\u92AC\u92E4\u92C1\u92B3\u92BC\u92D2\u92C7\u92F0\u92B2\u95AD\u95B1\u9704\u9706\u9707\u9709\u9760\u978D\u978B\u978F\u9821\u982B\u981C\u98B3\u990A\u9913\u9912\u9918\u99DD\u99D0\u99DF\u99DB\u99D1\u99D5\u99D2\u99D9\u9AB7\u9AEE\u9AEF\u9B27\u9B45\u9B44\u9B77\u9B6F\u9D06\u9D09"], + ["bea1", "\u9D03\u9EA9\u9EBE\u9ECE\u58A8\u9F52\u5112\u5118\u5114\u5110\u5115\u5180\u51AA\u51DD\u5291\u5293\u52F3\u5659\u566B\u5679\u5669\u5664\u5678\u566A\u5668\u5665\u5671\u566F\u566C\u5662\u5676\u58C1\u58BE\u58C7\u58C5\u596E\u5B1D\u5B34\u5B78\u5BF0\u5C0E\u5F4A\u61B2\u6191\u61A9\u618A\u61CD\u61B6\u61BE\u61CA\u61C8\u6230\u64C5\u64C1\u64CB\u64BB\u64BC\u64DA\u64C4\u64C7\u64C2\u64CD\u64BF\u64D2\u64D4\u64BE\u6574\u66C6\u66C9\u66B9\u66C4\u66C7\u66B8\u6A3D\u6A38\u6A3A\u6A59\u6A6B\u6A58\u6A39\u6A44\u6A62\u6A61\u6A4B\u6A47\u6A35\u6A5F\u6A48\u6B59\u6B77\u6C05\u6FC2\u6FB1\u6FA1"], + ["bf40", "\u6FC3\u6FA4\u6FC1\u6FA7\u6FB3\u6FC0\u6FB9\u6FB6\u6FA6\u6FA0\u6FB4\u71BE\u71C9\u71D0\u71D2\u71C8\u71D5\u71B9\u71CE\u71D9\u71DC\u71C3\u71C4\u7368\u749C\u74A3\u7498\u749F\u749E\u74E2\u750C\u750D\u7634\u7638\u763A\u76E7\u76E5\u77A0\u779E\u779F\u77A5\u78E8\u78DA\u78EC\u78E7\u79A6\u7A4D\u7A4E\u7A46\u7A4C\u7A4B\u7ABA\u7BD9\u7C11\u7BC9\u7BE4\u7BDB\u7BE1\u7BE9\u7BE6\u7CD5\u7CD6\u7E0A"], + ["bfa1", "\u7E11\u7E08\u7E1B\u7E23\u7E1E\u7E1D\u7E09\u7E10\u7F79\u7FB2\u7FF0\u7FF1\u7FEE\u8028\u81B3\u81A9\u81A8\u81FB\u8208\u8258\u8259\u854A\u8559\u8548\u8568\u8569\u8543\u8549\u856D\u856A\u855E\u8783\u879F\u879E\u87A2\u878D\u8861\u892A\u8932\u8925\u892B\u8921\u89AA\u89A6\u8AE6\u8AFA\u8AEB\u8AF1\u8B00\u8ADC\u8AE7\u8AEE\u8AFE\u8B01\u8B02\u8AF7\u8AED\u8AF3\u8AF6\u8AFC\u8C6B\u8C6D\u8C93\u8CF4\u8E44\u8E31\u8E34\u8E42\u8E39\u8E35\u8F3B\u8F2F\u8F38\u8F33\u8FA8\u8FA6\u9075\u9074\u9078\u9072\u907C\u907A\u9134\u9192\u9320\u9336\u92F8\u9333\u932F\u9322\u92FC\u932B\u9304\u931A"], + ["c040", "\u9310\u9326\u9321\u9315\u932E\u9319\u95BB\u96A7\u96A8\u96AA\u96D5\u970E\u9711\u9716\u970D\u9713\u970F\u975B\u975C\u9766\u9798\u9830\u9838\u983B\u9837\u982D\u9839\u9824\u9910\u9928\u991E\u991B\u9921\u991A\u99ED\u99E2\u99F1\u9AB8\u9ABC\u9AFB\u9AED\u9B28\u9B91\u9D15\u9D23\u9D26\u9D28\u9D12\u9D1B\u9ED8\u9ED4\u9F8D\u9F9C\u512A\u511F\u5121\u5132\u52F5\u568E\u5680\u5690\u5685\u5687"], + ["c0a1", "\u568F\u58D5\u58D3\u58D1\u58CE\u5B30\u5B2A\u5B24\u5B7A\u5C37\u5C68\u5DBC\u5DBA\u5DBD\u5DB8\u5E6B\u5F4C\u5FBD\u61C9\u61C2\u61C7\u61E6\u61CB\u6232\u6234\u64CE\u64CA\u64D8\u64E0\u64F0\u64E6\u64EC\u64F1\u64E2\u64ED\u6582\u6583\u66D9\u66D6\u6A80\u6A94\u6A84\u6AA2\u6A9C\u6ADB\u6AA3\u6A7E\u6A97\u6A90\u6AA0\u6B5C\u6BAE\u6BDA\u6C08\u6FD8\u6FF1\u6FDF\u6FE0\u6FDB\u6FE4\u6FEB\u6FEF\u6F80\u6FEC\u6FE1\u6FE9\u6FD5\u6FEE\u6FF0\u71E7\u71DF\u71EE\u71E6\u71E5\u71ED\u71EC\u71F4\u71E0\u7235\u7246\u7370\u7372\u74A9\u74B0\u74A6\u74A8\u7646\u7642\u764C\u76EA\u77B3\u77AA\u77B0\u77AC"], + ["c140", "\u77A7\u77AD\u77EF\u78F7\u78FA\u78F4\u78EF\u7901\u79A7\u79AA\u7A57\u7ABF\u7C07\u7C0D\u7BFE\u7BF7\u7C0C\u7BE0\u7CE0\u7CDC\u7CDE\u7CE2\u7CDF\u7CD9\u7CDD\u7E2E\u7E3E\u7E46\u7E37\u7E32\u7E43\u7E2B\u7E3D\u7E31\u7E45\u7E41\u7E34\u7E39\u7E48\u7E35\u7E3F\u7E2F\u7F44\u7FF3\u7FFC\u8071\u8072\u8070\u806F\u8073\u81C6\u81C3\u81BA\u81C2\u81C0\u81BF\u81BD\u81C9\u81BE\u81E8\u8209\u8271\u85AA"], + ["c1a1", "\u8584\u857E\u859C\u8591\u8594\u85AF\u859B\u8587\u85A8\u858A\u8667\u87C0\u87D1\u87B3\u87D2\u87C6\u87AB\u87BB\u87BA\u87C8\u87CB\u893B\u8936\u8944\u8938\u893D\u89AC\u8B0E\u8B17\u8B19\u8B1B\u8B0A\u8B20\u8B1D\u8B04\u8B10\u8C41\u8C3F\u8C73\u8CFA\u8CFD\u8CFC\u8CF8\u8CFB\u8DA8\u8E49\u8E4B\u8E48\u8E4A\u8F44\u8F3E\u8F42\u8F45\u8F3F\u907F\u907D\u9084\u9081\u9082\u9080\u9139\u91A3\u919E\u919C\u934D\u9382\u9328\u9375\u934A\u9365\u934B\u9318\u937E\u936C\u935B\u9370\u935A\u9354\u95CA\u95CB\u95CC\u95C8\u95C6\u96B1\u96B8\u96D6\u971C\u971E\u97A0\u97D3\u9846\u98B6\u9935\u9A01"], + ["c240", "\u99FF\u9BAE\u9BAB\u9BAA\u9BAD\u9D3B\u9D3F\u9E8B\u9ECF\u9EDE\u9EDC\u9EDD\u9EDB\u9F3E\u9F4B\u53E2\u5695\u56AE\u58D9\u58D8\u5B38\u5F5D\u61E3\u6233\u64F4\u64F2\u64FE\u6506\u64FA\u64FB\u64F7\u65B7\u66DC\u6726\u6AB3\u6AAC\u6AC3\u6ABB\u6AB8\u6AC2\u6AAE\u6AAF\u6B5F\u6B78\u6BAF\u7009\u700B\u6FFE\u7006\u6FFA\u7011\u700F\u71FB\u71FC\u71FE\u71F8\u7377\u7375\u74A7\u74BF\u7515\u7656\u7658"], + ["c2a1", "\u7652\u77BD\u77BF\u77BB\u77BC\u790E\u79AE\u7A61\u7A62\u7A60\u7AC4\u7AC5\u7C2B\u7C27\u7C2A\u7C1E\u7C23\u7C21\u7CE7\u7E54\u7E55\u7E5E\u7E5A\u7E61\u7E52\u7E59\u7F48\u7FF9\u7FFB\u8077\u8076\u81CD\u81CF\u820A\u85CF\u85A9\u85CD\u85D0\u85C9\u85B0\u85BA\u85B9\u85A6\u87EF\u87EC\u87F2\u87E0\u8986\u89B2\u89F4\u8B28\u8B39\u8B2C\u8B2B\u8C50\u8D05\u8E59\u8E63\u8E66\u8E64\u8E5F\u8E55\u8EC0\u8F49\u8F4D\u9087\u9083\u9088\u91AB\u91AC\u91D0\u9394\u938A\u9396\u93A2\u93B3\u93AE\u93AC\u93B0\u9398\u939A\u9397\u95D4\u95D6\u95D0\u95D5\u96E2\u96DC\u96D9\u96DB\u96DE\u9724\u97A3\u97A6"], + ["c340", "\u97AD\u97F9\u984D\u984F\u984C\u984E\u9853\u98BA\u993E\u993F\u993D\u992E\u99A5\u9A0E\u9AC1\u9B03\u9B06\u9B4F\u9B4E\u9B4D\u9BCA\u9BC9\u9BFD\u9BC8\u9BC0\u9D51\u9D5D\u9D60\u9EE0\u9F15\u9F2C\u5133\u56A5\u58DE\u58DF\u58E2\u5BF5\u9F90\u5EEC\u61F2\u61F7\u61F6\u61F5\u6500\u650F\u66E0\u66DD\u6AE5\u6ADD\u6ADA\u6AD3\u701B\u701F\u7028\u701A\u701D\u7015\u7018\u7206\u720D\u7258\u72A2\u7378"], + ["c3a1", "\u737A\u74BD\u74CA\u74E3\u7587\u7586\u765F\u7661\u77C7\u7919\u79B1\u7A6B\u7A69\u7C3E\u7C3F\u7C38\u7C3D\u7C37\u7C40\u7E6B\u7E6D\u7E79\u7E69\u7E6A\u7F85\u7E73\u7FB6\u7FB9\u7FB8\u81D8\u85E9\u85DD\u85EA\u85D5\u85E4\u85E5\u85F7\u87FB\u8805\u880D\u87F9\u87FE\u8960\u895F\u8956\u895E\u8B41\u8B5C\u8B58\u8B49\u8B5A\u8B4E\u8B4F\u8B46\u8B59\u8D08\u8D0A\u8E7C\u8E72\u8E87\u8E76\u8E6C\u8E7A\u8E74\u8F54\u8F4E\u8FAD\u908A\u908B\u91B1\u91AE\u93E1\u93D1\u93DF\u93C3\u93C8\u93DC\u93DD\u93D6\u93E2\u93CD\u93D8\u93E4\u93D7\u93E8\u95DC\u96B4\u96E3\u972A\u9727\u9761\u97DC\u97FB\u985E"], + ["c440", "\u9858\u985B\u98BC\u9945\u9949\u9A16\u9A19\u9B0D\u9BE8\u9BE7\u9BD6\u9BDB\u9D89\u9D61\u9D72\u9D6A\u9D6C\u9E92\u9E97\u9E93\u9EB4\u52F8\u56A8\u56B7\u56B6\u56B4\u56BC\u58E4\u5B40\u5B43\u5B7D\u5BF6\u5DC9\u61F8\u61FA\u6518\u6514\u6519\u66E6\u6727\u6AEC\u703E\u7030\u7032\u7210\u737B\u74CF\u7662\u7665\u7926\u792A\u792C\u792B\u7AC7\u7AF6\u7C4C\u7C43\u7C4D\u7CEF\u7CF0\u8FAE\u7E7D\u7E7C"], + ["c4a1", "\u7E82\u7F4C\u8000\u81DA\u8266\u85FB\u85F9\u8611\u85FA\u8606\u860B\u8607\u860A\u8814\u8815\u8964\u89BA\u89F8\u8B70\u8B6C\u8B66\u8B6F\u8B5F\u8B6B\u8D0F\u8D0D\u8E89\u8E81\u8E85\u8E82\u91B4\u91CB\u9418\u9403\u93FD\u95E1\u9730\u98C4\u9952\u9951\u99A8\u9A2B\u9A30\u9A37\u9A35\u9C13\u9C0D\u9E79\u9EB5\u9EE8\u9F2F\u9F5F\u9F63\u9F61\u5137\u5138\u56C1\u56C0\u56C2\u5914\u5C6C\u5DCD\u61FC\u61FE\u651D\u651C\u6595\u66E9\u6AFB\u6B04\u6AFA\u6BB2\u704C\u721B\u72A7\u74D6\u74D4\u7669\u77D3\u7C50\u7E8F\u7E8C\u7FBC\u8617\u862D\u861A\u8823\u8822\u8821\u881F\u896A\u896C\u89BD\u8B74"], + ["c540", "\u8B77\u8B7D\u8D13\u8E8A\u8E8D\u8E8B\u8F5F\u8FAF\u91BA\u942E\u9433\u9435\u943A\u9438\u9432\u942B\u95E2\u9738\u9739\u9732\u97FF\u9867\u9865\u9957\u9A45\u9A43\u9A40\u9A3E\u9ACF\u9B54\u9B51\u9C2D\u9C25\u9DAF\u9DB4\u9DC2\u9DB8\u9E9D\u9EEF\u9F19\u9F5C\u9F66\u9F67\u513C\u513B\u56C8\u56CA\u56C9\u5B7F\u5DD4\u5DD2\u5F4E\u61FF\u6524\u6B0A\u6B61\u7051\u7058\u7380\u74E4\u758A\u766E\u766C"], + ["c5a1", "\u79B3\u7C60\u7C5F\u807E\u807D\u81DF\u8972\u896F\u89FC\u8B80\u8D16\u8D17\u8E91\u8E93\u8F61\u9148\u9444\u9451\u9452\u973D\u973E\u97C3\u97C1\u986B\u9955\u9A55\u9A4D\u9AD2\u9B1A\u9C49\u9C31\u9C3E\u9C3B\u9DD3\u9DD7\u9F34\u9F6C\u9F6A\u9F94\u56CC\u5DD6\u6200\u6523\u652B\u652A\u66EC\u6B10\u74DA\u7ACA\u7C64\u7C63\u7C65\u7E93\u7E96\u7E94\u81E2\u8638\u863F\u8831\u8B8A\u9090\u908F\u9463\u9460\u9464\u9768\u986F\u995C\u9A5A\u9A5B\u9A57\u9AD3\u9AD4\u9AD1\u9C54\u9C57\u9C56\u9DE5\u9E9F\u9EF4\u56D1\u58E9\u652C\u705E\u7671\u7672\u77D7\u7F50\u7F88\u8836\u8839\u8862\u8B93\u8B92"], + ["c640", "\u8B96\u8277\u8D1B\u91C0\u946A\u9742\u9748\u9744\u97C6\u9870\u9A5F\u9B22\u9B58\u9C5F\u9DF9\u9DFA\u9E7C\u9E7D\u9F07\u9F77\u9F72\u5EF3\u6B16\u7063\u7C6C\u7C6E\u883B\u89C0\u8EA1\u91C1\u9472\u9470\u9871\u995E\u9AD6\u9B23\u9ECC\u7064\u77DA\u8B9A\u9477\u97C9\u9A62\u9A65\u7E9C\u8B9C\u8EAA\u91C5\u947D\u947E\u947C\u9C77\u9C78\u9EF7\u8C54\u947F\u9E1A\u7228\u9A6A\u9B31\u9E1B\u9E1E\u7C72"], + ["c940", "\u4E42\u4E5C\u51F5\u531A\u5382\u4E07\u4E0C\u4E47\u4E8D\u56D7\uFA0C\u5C6E\u5F73\u4E0F\u5187\u4E0E\u4E2E\u4E93\u4EC2\u4EC9\u4EC8\u5198\u52FC\u536C\u53B9\u5720\u5903\u592C\u5C10\u5DFF\u65E1\u6BB3\u6BCC\u6C14\u723F\u4E31\u4E3C\u4EE8\u4EDC\u4EE9\u4EE1\u4EDD\u4EDA\u520C\u531C\u534C\u5722\u5723\u5917\u592F\u5B81\u5B84\u5C12\u5C3B\u5C74\u5C73\u5E04\u5E80\u5E82\u5FC9\u6209\u6250\u6C15"], + ["c9a1", "\u6C36\u6C43\u6C3F\u6C3B\u72AE\u72B0\u738A\u79B8\u808A\u961E\u4F0E\u4F18\u4F2C\u4EF5\u4F14\u4EF1\u4F00\u4EF7\u4F08\u4F1D\u4F02\u4F05\u4F22\u4F13\u4F04\u4EF4\u4F12\u51B1\u5213\u5209\u5210\u52A6\u5322\u531F\u534D\u538A\u5407\u56E1\u56DF\u572E\u572A\u5734\u593C\u5980\u597C\u5985\u597B\u597E\u5977\u597F\u5B56\u5C15\u5C25\u5C7C\u5C7A\u5C7B\u5C7E\u5DDF\u5E75\u5E84\u5F02\u5F1A\u5F74\u5FD5\u5FD4\u5FCF\u625C\u625E\u6264\u6261\u6266\u6262\u6259\u6260\u625A\u6265\u65EF\u65EE\u673E\u6739\u6738\u673B\u673A\u673F\u673C\u6733\u6C18\u6C46\u6C52\u6C5C\u6C4F\u6C4A\u6C54\u6C4B"], + ["ca40", "\u6C4C\u7071\u725E\u72B4\u72B5\u738E\u752A\u767F\u7A75\u7F51\u8278\u827C\u8280\u827D\u827F\u864D\u897E\u9099\u9097\u9098\u909B\u9094\u9622\u9624\u9620\u9623\u4F56\u4F3B\u4F62\u4F49\u4F53\u4F64\u4F3E\u4F67\u4F52\u4F5F\u4F41\u4F58\u4F2D\u4F33\u4F3F\u4F61\u518F\u51B9\u521C\u521E\u5221\u52AD\u52AE\u5309\u5363\u5372\u538E\u538F\u5430\u5437\u542A\u5454\u5445\u5419\u541C\u5425\u5418"], + ["caa1", "\u543D\u544F\u5441\u5428\u5424\u5447\u56EE\u56E7\u56E5\u5741\u5745\u574C\u5749\u574B\u5752\u5906\u5940\u59A6\u5998\u59A0\u5997\u598E\u59A2\u5990\u598F\u59A7\u59A1\u5B8E\u5B92\u5C28\u5C2A\u5C8D\u5C8F\u5C88\u5C8B\u5C89\u5C92\u5C8A\u5C86\u5C93\u5C95\u5DE0\u5E0A\u5E0E\u5E8B\u5E89\u5E8C\u5E88\u5E8D\u5F05\u5F1D\u5F78\u5F76\u5FD2\u5FD1\u5FD0\u5FED\u5FE8\u5FEE\u5FF3\u5FE1\u5FE4\u5FE3\u5FFA\u5FEF\u5FF7\u5FFB\u6000\u5FF4\u623A\u6283\u628C\u628E\u628F\u6294\u6287\u6271\u627B\u627A\u6270\u6281\u6288\u6277\u627D\u6272\u6274\u6537\u65F0\u65F4\u65F3\u65F2\u65F5\u6745\u6747"], + ["cb40", "\u6759\u6755\u674C\u6748\u675D\u674D\u675A\u674B\u6BD0\u6C19\u6C1A\u6C78\u6C67\u6C6B\u6C84\u6C8B\u6C8F\u6C71\u6C6F\u6C69\u6C9A\u6C6D\u6C87\u6C95\u6C9C\u6C66\u6C73\u6C65\u6C7B\u6C8E\u7074\u707A\u7263\u72BF\u72BD\u72C3\u72C6\u72C1\u72BA\u72C5\u7395\u7397\u7393\u7394\u7392\u753A\u7539\u7594\u7595\u7681\u793D\u8034\u8095\u8099\u8090\u8092\u809C\u8290\u828F\u8285\u828E\u8291\u8293"], + ["cba1", "\u828A\u8283\u8284\u8C78\u8FC9\u8FBF\u909F\u90A1\u90A5\u909E\u90A7\u90A0\u9630\u9628\u962F\u962D\u4E33\u4F98\u4F7C\u4F85\u4F7D\u4F80\u4F87\u4F76\u4F74\u4F89\u4F84\u4F77\u4F4C\u4F97\u4F6A\u4F9A\u4F79\u4F81\u4F78\u4F90\u4F9C\u4F94\u4F9E\u4F92\u4F82\u4F95\u4F6B\u4F6E\u519E\u51BC\u51BE\u5235\u5232\u5233\u5246\u5231\u52BC\u530A\u530B\u533C\u5392\u5394\u5487\u547F\u5481\u5491\u5482\u5488\u546B\u547A\u547E\u5465\u546C\u5474\u5466\u548D\u546F\u5461\u5460\u5498\u5463\u5467\u5464\u56F7\u56F9\u576F\u5772\u576D\u576B\u5771\u5770\u5776\u5780\u5775\u577B\u5773\u5774\u5762"], + ["cc40", "\u5768\u577D\u590C\u5945\u59B5\u59BA\u59CF\u59CE\u59B2\u59CC\u59C1\u59B6\u59BC\u59C3\u59D6\u59B1\u59BD\u59C0\u59C8\u59B4\u59C7\u5B62\u5B65\u5B93\u5B95\u5C44\u5C47\u5CAE\u5CA4\u5CA0\u5CB5\u5CAF\u5CA8\u5CAC\u5C9F\u5CA3\u5CAD\u5CA2\u5CAA\u5CA7\u5C9D\u5CA5\u5CB6\u5CB0\u5CA6\u5E17\u5E14\u5E19\u5F28\u5F22\u5F23\u5F24\u5F54\u5F82\u5F7E\u5F7D\u5FDE\u5FE5\u602D\u6026\u6019\u6032\u600B"], + ["cca1", "\u6034\u600A\u6017\u6033\u601A\u601E\u602C\u6022\u600D\u6010\u602E\u6013\u6011\u600C\u6009\u601C\u6214\u623D\u62AD\u62B4\u62D1\u62BE\u62AA\u62B6\u62CA\u62AE\u62B3\u62AF\u62BB\u62A9\u62B0\u62B8\u653D\u65A8\u65BB\u6609\u65FC\u6604\u6612\u6608\u65FB\u6603\u660B\u660D\u6605\u65FD\u6611\u6610\u66F6\u670A\u6785\u676C\u678E\u6792\u6776\u677B\u6798\u6786\u6784\u6774\u678D\u678C\u677A\u679F\u6791\u6799\u6783\u677D\u6781\u6778\u6779\u6794\u6B25\u6B80\u6B7E\u6BDE\u6C1D\u6C93\u6CEC\u6CEB\u6CEE\u6CD9\u6CB6\u6CD4\u6CAD\u6CE7\u6CB7\u6CD0\u6CC2\u6CBA\u6CC3\u6CC6\u6CED\u6CF2"], + ["cd40", "\u6CD2\u6CDD\u6CB4\u6C8A\u6C9D\u6C80\u6CDE\u6CC0\u6D30\u6CCD\u6CC7\u6CB0\u6CF9\u6CCF\u6CE9\u6CD1\u7094\u7098\u7085\u7093\u7086\u7084\u7091\u7096\u7082\u709A\u7083\u726A\u72D6\u72CB\u72D8\u72C9\u72DC\u72D2\u72D4\u72DA\u72CC\u72D1\u73A4\u73A1\u73AD\u73A6\u73A2\u73A0\u73AC\u739D\u74DD\u74E8\u753F\u7540\u753E\u758C\u7598\u76AF\u76F3\u76F1\u76F0\u76F5\u77F8\u77FC\u77F9\u77FB\u77FA"], + ["cda1", "\u77F7\u7942\u793F\u79C5\u7A78\u7A7B\u7AFB\u7C75\u7CFD\u8035\u808F\u80AE\u80A3\u80B8\u80B5\u80AD\u8220\u82A0\u82C0\u82AB\u829A\u8298\u829B\u82B5\u82A7\u82AE\u82BC\u829E\u82BA\u82B4\u82A8\u82A1\u82A9\u82C2\u82A4\u82C3\u82B6\u82A2\u8670\u866F\u866D\u866E\u8C56\u8FD2\u8FCB\u8FD3\u8FCD\u8FD6\u8FD5\u8FD7\u90B2\u90B4\u90AF\u90B3\u90B0\u9639\u963D\u963C\u963A\u9643\u4FCD\u4FC5\u4FD3\u4FB2\u4FC9\u4FCB\u4FC1\u4FD4\u4FDC\u4FD9\u4FBB\u4FB3\u4FDB\u4FC7\u4FD6\u4FBA\u4FC0\u4FB9\u4FEC\u5244\u5249\u52C0\u52C2\u533D\u537C\u5397\u5396\u5399\u5398\u54BA\u54A1\u54AD\u54A5\u54CF"], + ["ce40", "\u54C3\u830D\u54B7\u54AE\u54D6\u54B6\u54C5\u54C6\u54A0\u5470\u54BC\u54A2\u54BE\u5472\u54DE\u54B0\u57B5\u579E\u579F\u57A4\u578C\u5797\u579D\u579B\u5794\u5798\u578F\u5799\u57A5\u579A\u5795\u58F4\u590D\u5953\u59E1\u59DE\u59EE\u5A00\u59F1\u59DD\u59FA\u59FD\u59FC\u59F6\u59E4\u59F2\u59F7\u59DB\u59E9\u59F3\u59F5\u59E0\u59FE\u59F4\u59ED\u5BA8\u5C4C\u5CD0\u5CD8\u5CCC\u5CD7\u5CCB\u5CDB"], + ["cea1", "\u5CDE\u5CDA\u5CC9\u5CC7\u5CCA\u5CD6\u5CD3\u5CD4\u5CCF\u5CC8\u5CC6\u5CCE\u5CDF\u5CF8\u5DF9\u5E21\u5E22\u5E23\u5E20\u5E24\u5EB0\u5EA4\u5EA2\u5E9B\u5EA3\u5EA5\u5F07\u5F2E\u5F56\u5F86\u6037\u6039\u6054\u6072\u605E\u6045\u6053\u6047\u6049\u605B\u604C\u6040\u6042\u605F\u6024\u6044\u6058\u6066\u606E\u6242\u6243\u62CF\u630D\u630B\u62F5\u630E\u6303\u62EB\u62F9\u630F\u630C\u62F8\u62F6\u6300\u6313\u6314\u62FA\u6315\u62FB\u62F0\u6541\u6543\u65AA\u65BF\u6636\u6621\u6632\u6635\u661C\u6626\u6622\u6633\u662B\u663A\u661D\u6634\u6639\u662E\u670F\u6710\u67C1\u67F2\u67C8\u67BA"], + ["cf40", "\u67DC\u67BB\u67F8\u67D8\u67C0\u67B7\u67C5\u67EB\u67E4\u67DF\u67B5\u67CD\u67B3\u67F7\u67F6\u67EE\u67E3\u67C2\u67B9\u67CE\u67E7\u67F0\u67B2\u67FC\u67C6\u67ED\u67CC\u67AE\u67E6\u67DB\u67FA\u67C9\u67CA\u67C3\u67EA\u67CB\u6B28\u6B82\u6B84\u6BB6\u6BD6\u6BD8\u6BE0\u6C20\u6C21\u6D28\u6D34\u6D2D\u6D1F\u6D3C\u6D3F\u6D12\u6D0A\u6CDA\u6D33\u6D04\u6D19\u6D3A\u6D1A\u6D11\u6D00\u6D1D\u6D42"], + ["cfa1", "\u6D01\u6D18\u6D37\u6D03\u6D0F\u6D40\u6D07\u6D20\u6D2C\u6D08\u6D22\u6D09\u6D10\u70B7\u709F\u70BE\u70B1\u70B0\u70A1\u70B4\u70B5\u70A9\u7241\u7249\u724A\u726C\u7270\u7273\u726E\u72CA\u72E4\u72E8\u72EB\u72DF\u72EA\u72E6\u72E3\u7385\u73CC\u73C2\u73C8\u73C5\u73B9\u73B6\u73B5\u73B4\u73EB\u73BF\u73C7\u73BE\u73C3\u73C6\u73B8\u73CB\u74EC\u74EE\u752E\u7547\u7548\u75A7\u75AA\u7679\u76C4\u7708\u7703\u7704\u7705\u770A\u76F7\u76FB\u76FA\u77E7\u77E8\u7806\u7811\u7812\u7805\u7810\u780F\u780E\u7809\u7803\u7813\u794A\u794C\u794B\u7945\u7944\u79D5\u79CD\u79CF\u79D6\u79CE\u7A80"], + ["d040", "\u7A7E\u7AD1\u7B00\u7B01\u7C7A\u7C78\u7C79\u7C7F\u7C80\u7C81\u7D03\u7D08\u7D01\u7F58\u7F91\u7F8D\u7FBE\u8007\u800E\u800F\u8014\u8037\u80D8\u80C7\u80E0\u80D1\u80C8\u80C2\u80D0\u80C5\u80E3\u80D9\u80DC\u80CA\u80D5\u80C9\u80CF\u80D7\u80E6\u80CD\u81FF\u8221\u8294\u82D9\u82FE\u82F9\u8307\u82E8\u8300\u82D5\u833A\u82EB\u82D6\u82F4\u82EC\u82E1\u82F2\u82F5\u830C\u82FB\u82F6\u82F0\u82EA"], + ["d0a1", "\u82E4\u82E0\u82FA\u82F3\u82ED\u8677\u8674\u867C\u8673\u8841\u884E\u8867\u886A\u8869\u89D3\u8A04\u8A07\u8D72\u8FE3\u8FE1\u8FEE\u8FE0\u90F1\u90BD\u90BF\u90D5\u90C5\u90BE\u90C7\u90CB\u90C8\u91D4\u91D3\u9654\u964F\u9651\u9653\u964A\u964E\u501E\u5005\u5007\u5013\u5022\u5030\u501B\u4FF5\u4FF4\u5033\u5037\u502C\u4FF6\u4FF7\u5017\u501C\u5020\u5027\u5035\u502F\u5031\u500E\u515A\u5194\u5193\u51CA\u51C4\u51C5\u51C8\u51CE\u5261\u525A\u5252\u525E\u525F\u5255\u5262\u52CD\u530E\u539E\u5526\u54E2\u5517\u5512\u54E7\u54F3\u54E4\u551A\u54FF\u5504\u5508\u54EB\u5511\u5505\u54F1"], + ["d140", "\u550A\u54FB\u54F7\u54F8\u54E0\u550E\u5503\u550B\u5701\u5702\u57CC\u5832\u57D5\u57D2\u57BA\u57C6\u57BD\u57BC\u57B8\u57B6\u57BF\u57C7\u57D0\u57B9\u57C1\u590E\u594A\u5A19\u5A16\u5A2D\u5A2E\u5A15\u5A0F\u5A17\u5A0A\u5A1E\u5A33\u5B6C\u5BA7\u5BAD\u5BAC\u5C03\u5C56\u5C54\u5CEC\u5CFF\u5CEE\u5CF1\u5CF7\u5D00\u5CF9\u5E29\u5E28\u5EA8\u5EAE\u5EAA\u5EAC\u5F33\u5F30\u5F67\u605D\u605A\u6067"], + ["d1a1", "\u6041\u60A2\u6088\u6080\u6092\u6081\u609D\u6083\u6095\u609B\u6097\u6087\u609C\u608E\u6219\u6246\u62F2\u6310\u6356\u632C\u6344\u6345\u6336\u6343\u63E4\u6339\u634B\u634A\u633C\u6329\u6341\u6334\u6358\u6354\u6359\u632D\u6347\u6333\u635A\u6351\u6338\u6357\u6340\u6348\u654A\u6546\u65C6\u65C3\u65C4\u65C2\u664A\u665F\u6647\u6651\u6712\u6713\u681F\u681A\u6849\u6832\u6833\u683B\u684B\u684F\u6816\u6831\u681C\u6835\u682B\u682D\u682F\u684E\u6844\u6834\u681D\u6812\u6814\u6826\u6828\u682E\u684D\u683A\u6825\u6820\u6B2C\u6B2F\u6B2D\u6B31\u6B34\u6B6D\u8082\u6B88\u6BE6\u6BE4"], + ["d240", "\u6BE8\u6BE3\u6BE2\u6BE7\u6C25\u6D7A\u6D63\u6D64\u6D76\u6D0D\u6D61\u6D92\u6D58\u6D62\u6D6D\u6D6F\u6D91\u6D8D\u6DEF\u6D7F\u6D86\u6D5E\u6D67\u6D60\u6D97\u6D70\u6D7C\u6D5F\u6D82\u6D98\u6D2F\u6D68\u6D8B\u6D7E\u6D80\u6D84\u6D16\u6D83\u6D7B\u6D7D\u6D75\u6D90\u70DC\u70D3\u70D1\u70DD\u70CB\u7F39\u70E2\u70D7\u70D2\u70DE\u70E0\u70D4\u70CD\u70C5\u70C6\u70C7\u70DA\u70CE\u70E1\u7242\u7278"], + ["d2a1", "\u7277\u7276\u7300\u72FA\u72F4\u72FE\u72F6\u72F3\u72FB\u7301\u73D3\u73D9\u73E5\u73D6\u73BC\u73E7\u73E3\u73E9\u73DC\u73D2\u73DB\u73D4\u73DD\u73DA\u73D7\u73D8\u73E8\u74DE\u74DF\u74F4\u74F5\u7521\u755B\u755F\u75B0\u75C1\u75BB\u75C4\u75C0\u75BF\u75B6\u75BA\u768A\u76C9\u771D\u771B\u7710\u7713\u7712\u7723\u7711\u7715\u7719\u771A\u7722\u7727\u7823\u782C\u7822\u7835\u782F\u7828\u782E\u782B\u7821\u7829\u7833\u782A\u7831\u7954\u795B\u794F\u795C\u7953\u7952\u7951\u79EB\u79EC\u79E0\u79EE\u79ED\u79EA\u79DC\u79DE\u79DD\u7A86\u7A89\u7A85\u7A8B\u7A8C\u7A8A\u7A87\u7AD8\u7B10"], + ["d340", "\u7B04\u7B13\u7B05\u7B0F\u7B08\u7B0A\u7B0E\u7B09\u7B12\u7C84\u7C91\u7C8A\u7C8C\u7C88\u7C8D\u7C85\u7D1E\u7D1D\u7D11\u7D0E\u7D18\u7D16\u7D13\u7D1F\u7D12\u7D0F\u7D0C\u7F5C\u7F61\u7F5E\u7F60\u7F5D\u7F5B\u7F96\u7F92\u7FC3\u7FC2\u7FC0\u8016\u803E\u8039\u80FA\u80F2\u80F9\u80F5\u8101\u80FB\u8100\u8201\u822F\u8225\u8333\u832D\u8344\u8319\u8351\u8325\u8356\u833F\u8341\u8326\u831C\u8322"], + ["d3a1", "\u8342\u834E\u831B\u832A\u8308\u833C\u834D\u8316\u8324\u8320\u8337\u832F\u8329\u8347\u8345\u834C\u8353\u831E\u832C\u834B\u8327\u8348\u8653\u8652\u86A2\u86A8\u8696\u868D\u8691\u869E\u8687\u8697\u8686\u868B\u869A\u8685\u86A5\u8699\u86A1\u86A7\u8695\u8698\u868E\u869D\u8690\u8694\u8843\u8844\u886D\u8875\u8876\u8872\u8880\u8871\u887F\u886F\u8883\u887E\u8874\u887C\u8A12\u8C47\u8C57\u8C7B\u8CA4\u8CA3\u8D76\u8D78\u8DB5\u8DB7\u8DB6\u8ED1\u8ED3\u8FFE\u8FF5\u9002\u8FFF\u8FFB\u9004\u8FFC\u8FF6\u90D6\u90E0\u90D9\u90DA\u90E3\u90DF\u90E5\u90D8\u90DB\u90D7\u90DC\u90E4\u9150"], + ["d440", "\u914E\u914F\u91D5\u91E2\u91DA\u965C\u965F\u96BC\u98E3\u9ADF\u9B2F\u4E7F\u5070\u506A\u5061\u505E\u5060\u5053\u504B\u505D\u5072\u5048\u504D\u5041\u505B\u504A\u5062\u5015\u5045\u505F\u5069\u506B\u5063\u5064\u5046\u5040\u506E\u5073\u5057\u5051\u51D0\u526B\u526D\u526C\u526E\u52D6\u52D3\u532D\u539C\u5575\u5576\u553C\u554D\u5550\u5534\u552A\u5551\u5562\u5536\u5535\u5530\u5552\u5545"], + ["d4a1", "\u550C\u5532\u5565\u554E\u5539\u5548\u552D\u553B\u5540\u554B\u570A\u5707\u57FB\u5814\u57E2\u57F6\u57DC\u57F4\u5800\u57ED\u57FD\u5808\u57F8\u580B\u57F3\u57CF\u5807\u57EE\u57E3\u57F2\u57E5\u57EC\u57E1\u580E\u57FC\u5810\u57E7\u5801\u580C\u57F1\u57E9\u57F0\u580D\u5804\u595C\u5A60\u5A58\u5A55\u5A67\u5A5E\u5A38\u5A35\u5A6D\u5A50\u5A5F\u5A65\u5A6C\u5A53\u5A64\u5A57\u5A43\u5A5D\u5A52\u5A44\u5A5B\u5A48\u5A8E\u5A3E\u5A4D\u5A39\u5A4C\u5A70\u5A69\u5A47\u5A51\u5A56\u5A42\u5A5C\u5B72\u5B6E\u5BC1\u5BC0\u5C59\u5D1E\u5D0B\u5D1D\u5D1A\u5D20\u5D0C\u5D28\u5D0D\u5D26\u5D25\u5D0F"], + ["d540", "\u5D30\u5D12\u5D23\u5D1F\u5D2E\u5E3E\u5E34\u5EB1\u5EB4\u5EB9\u5EB2\u5EB3\u5F36\u5F38\u5F9B\u5F96\u5F9F\u608A\u6090\u6086\u60BE\u60B0\u60BA\u60D3\u60D4\u60CF\u60E4\u60D9\u60DD\u60C8\u60B1\u60DB\u60B7\u60CA\u60BF\u60C3\u60CD\u60C0\u6332\u6365\u638A\u6382\u637D\u63BD\u639E\u63AD\u639D\u6397\u63AB\u638E\u636F\u6387\u6390\u636E\u63AF\u6375\u639C\u636D\u63AE\u637C\u63A4\u633B\u639F"], + ["d5a1", "\u6378\u6385\u6381\u6391\u638D\u6370\u6553\u65CD\u6665\u6661\u665B\u6659\u665C\u6662\u6718\u6879\u6887\u6890\u689C\u686D\u686E\u68AE\u68AB\u6956\u686F\u68A3\u68AC\u68A9\u6875\u6874\u68B2\u688F\u6877\u6892\u687C\u686B\u6872\u68AA\u6880\u6871\u687E\u689B\u6896\u688B\u68A0\u6889\u68A4\u6878\u687B\u6891\u688C\u688A\u687D\u6B36\u6B33\u6B37\u6B38\u6B91\u6B8F\u6B8D\u6B8E\u6B8C\u6C2A\u6DC0\u6DAB\u6DB4\u6DB3\u6E74\u6DAC\u6DE9\u6DE2\u6DB7\u6DF6\u6DD4\u6E00\u6DC8\u6DE0\u6DDF\u6DD6\u6DBE\u6DE5\u6DDC\u6DDD\u6DDB\u6DF4\u6DCA\u6DBD\u6DED\u6DF0\u6DBA\u6DD5\u6DC2\u6DCF\u6DC9"], + ["d640", "\u6DD0\u6DF2\u6DD3\u6DFD\u6DD7\u6DCD\u6DE3\u6DBB\u70FA\u710D\u70F7\u7117\u70F4\u710C\u70F0\u7104\u70F3\u7110\u70FC\u70FF\u7106\u7113\u7100\u70F8\u70F6\u710B\u7102\u710E\u727E\u727B\u727C\u727F\u731D\u7317\u7307\u7311\u7318\u730A\u7308\u72FF\u730F\u731E\u7388\u73F6\u73F8\u73F5\u7404\u7401\u73FD\u7407\u7400\u73FA\u73FC\u73FF\u740C\u740B\u73F4\u7408\u7564\u7563\u75CE\u75D2\u75CF"], + ["d6a1", "\u75CB\u75CC\u75D1\u75D0\u768F\u7689\u76D3\u7739\u772F\u772D\u7731\u7732\u7734\u7733\u773D\u7725\u773B\u7735\u7848\u7852\u7849\u784D\u784A\u784C\u7826\u7845\u7850\u7964\u7967\u7969\u796A\u7963\u796B\u7961\u79BB\u79FA\u79F8\u79F6\u79F7\u7A8F\u7A94\u7A90\u7B35\u7B47\u7B34\u7B25\u7B30\u7B22\u7B24\u7B33\u7B18\u7B2A\u7B1D\u7B31\u7B2B\u7B2D\u7B2F\u7B32\u7B38\u7B1A\u7B23\u7C94\u7C98\u7C96\u7CA3\u7D35\u7D3D\u7D38\u7D36\u7D3A\u7D45\u7D2C\u7D29\u7D41\u7D47\u7D3E\u7D3F\u7D4A\u7D3B\u7D28\u7F63\u7F95\u7F9C\u7F9D\u7F9B\u7FCA\u7FCB\u7FCD\u7FD0\u7FD1\u7FC7\u7FCF\u7FC9\u801F"], + ["d740", "\u801E\u801B\u8047\u8043\u8048\u8118\u8125\u8119\u811B\u812D\u811F\u812C\u811E\u8121\u8115\u8127\u811D\u8122\u8211\u8238\u8233\u823A\u8234\u8232\u8274\u8390\u83A3\u83A8\u838D\u837A\u8373\u83A4\u8374\u838F\u8381\u8395\u8399\u8375\u8394\u83A9\u837D\u8383\u838C\u839D\u839B\u83AA\u838B\u837E\u83A5\u83AF\u8388\u8397\u83B0\u837F\u83A6\u8387\u83AE\u8376\u839A\u8659\u8656\u86BF\u86B7"], + ["d7a1", "\u86C2\u86C1\u86C5\u86BA\u86B0\u86C8\u86B9\u86B3\u86B8\u86CC\u86B4\u86BB\u86BC\u86C3\u86BD\u86BE\u8852\u8889\u8895\u88A8\u88A2\u88AA\u889A\u8891\u88A1\u889F\u8898\u88A7\u8899\u889B\u8897\u88A4\u88AC\u888C\u8893\u888E\u8982\u89D6\u89D9\u89D5\u8A30\u8A27\u8A2C\u8A1E\u8C39\u8C3B\u8C5C\u8C5D\u8C7D\u8CA5\u8D7D\u8D7B\u8D79\u8DBC\u8DC2\u8DB9\u8DBF\u8DC1\u8ED8\u8EDE\u8EDD\u8EDC\u8ED7\u8EE0\u8EE1\u9024\u900B\u9011\u901C\u900C\u9021\u90EF\u90EA\u90F0\u90F4\u90F2\u90F3\u90D4\u90EB\u90EC\u90E9\u9156\u9158\u915A\u9153\u9155\u91EC\u91F4\u91F1\u91F3\u91F8\u91E4\u91F9\u91EA"], + ["d840", "\u91EB\u91F7\u91E8\u91EE\u957A\u9586\u9588\u967C\u966D\u966B\u9671\u966F\u96BF\u976A\u9804\u98E5\u9997\u509B\u5095\u5094\u509E\u508B\u50A3\u5083\u508C\u508E\u509D\u5068\u509C\u5092\u5082\u5087\u515F\u51D4\u5312\u5311\u53A4\u53A7\u5591\u55A8\u55A5\u55AD\u5577\u5645\u55A2\u5593\u5588\u558F\u55B5\u5581\u55A3\u5592\u55A4\u557D\u558C\u55A6\u557F\u5595\u55A1\u558E\u570C\u5829\u5837"], + ["d8a1", "\u5819\u581E\u5827\u5823\u5828\u57F5\u5848\u5825\u581C\u581B\u5833\u583F\u5836\u582E\u5839\u5838\u582D\u582C\u583B\u5961\u5AAF\u5A94\u5A9F\u5A7A\u5AA2\u5A9E\u5A78\u5AA6\u5A7C\u5AA5\u5AAC\u5A95\u5AAE\u5A37\u5A84\u5A8A\u5A97\u5A83\u5A8B\u5AA9\u5A7B\u5A7D\u5A8C\u5A9C\u5A8F\u5A93\u5A9D\u5BEA\u5BCD\u5BCB\u5BD4\u5BD1\u5BCA\u5BCE\u5C0C\u5C30\u5D37\u5D43\u5D6B\u5D41\u5D4B\u5D3F\u5D35\u5D51\u5D4E\u5D55\u5D33\u5D3A\u5D52\u5D3D\u5D31\u5D59\u5D42\u5D39\u5D49\u5D38\u5D3C\u5D32\u5D36\u5D40\u5D45\u5E44\u5E41\u5F58\u5FA6\u5FA5\u5FAB\u60C9\u60B9\u60CC\u60E2\u60CE\u60C4\u6114"], + ["d940", "\u60F2\u610A\u6116\u6105\u60F5\u6113\u60F8\u60FC\u60FE\u60C1\u6103\u6118\u611D\u6110\u60FF\u6104\u610B\u624A\u6394\u63B1\u63B0\u63CE\u63E5\u63E8\u63EF\u63C3\u649D\u63F3\u63CA\u63E0\u63F6\u63D5\u63F2\u63F5\u6461\u63DF\u63BE\u63DD\u63DC\u63C4\u63D8\u63D3\u63C2\u63C7\u63CC\u63CB\u63C8\u63F0\u63D7\u63D9\u6532\u6567\u656A\u6564\u655C\u6568\u6565\u658C\u659D\u659E\u65AE\u65D0\u65D2"], + ["d9a1", "\u667C\u666C\u667B\u6680\u6671\u6679\u666A\u6672\u6701\u690C\u68D3\u6904\u68DC\u692A\u68EC\u68EA\u68F1\u690F\u68D6\u68F7\u68EB\u68E4\u68F6\u6913\u6910\u68F3\u68E1\u6907\u68CC\u6908\u6970\u68B4\u6911\u68EF\u68C6\u6914\u68F8\u68D0\u68FD\u68FC\u68E8\u690B\u690A\u6917\u68CE\u68C8\u68DD\u68DE\u68E6\u68F4\u68D1\u6906\u68D4\u68E9\u6915\u6925\u68C7\u6B39\u6B3B\u6B3F\u6B3C\u6B94\u6B97\u6B99\u6B95\u6BBD\u6BF0\u6BF2\u6BF3\u6C30\u6DFC\u6E46\u6E47\u6E1F\u6E49\u6E88\u6E3C\u6E3D\u6E45\u6E62\u6E2B\u6E3F\u6E41\u6E5D\u6E73\u6E1C\u6E33\u6E4B\u6E40\u6E51\u6E3B\u6E03\u6E2E\u6E5E"], + ["da40", "\u6E68\u6E5C\u6E61\u6E31\u6E28\u6E60\u6E71\u6E6B\u6E39\u6E22\u6E30\u6E53\u6E65\u6E27\u6E78\u6E64\u6E77\u6E55\u6E79\u6E52\u6E66\u6E35\u6E36\u6E5A\u7120\u711E\u712F\u70FB\u712E\u7131\u7123\u7125\u7122\u7132\u711F\u7128\u713A\u711B\u724B\u725A\u7288\u7289\u7286\u7285\u728B\u7312\u730B\u7330\u7322\u7331\u7333\u7327\u7332\u732D\u7326\u7323\u7335\u730C\u742E\u742C\u7430\u742B\u7416"], + ["daa1", "\u741A\u7421\u742D\u7431\u7424\u7423\u741D\u7429\u7420\u7432\u74FB\u752F\u756F\u756C\u75E7\u75DA\u75E1\u75E6\u75DD\u75DF\u75E4\u75D7\u7695\u7692\u76DA\u7746\u7747\u7744\u774D\u7745\u774A\u774E\u774B\u774C\u77DE\u77EC\u7860\u7864\u7865\u785C\u786D\u7871\u786A\u786E\u7870\u7869\u7868\u785E\u7862\u7974\u7973\u7972\u7970\u7A02\u7A0A\u7A03\u7A0C\u7A04\u7A99\u7AE6\u7AE4\u7B4A\u7B3B\u7B44\u7B48\u7B4C\u7B4E\u7B40\u7B58\u7B45\u7CA2\u7C9E\u7CA8\u7CA1\u7D58\u7D6F\u7D63\u7D53\u7D56\u7D67\u7D6A\u7D4F\u7D6D\u7D5C\u7D6B\u7D52\u7D54\u7D69\u7D51\u7D5F\u7D4E\u7F3E\u7F3F\u7F65"], + ["db40", "\u7F66\u7FA2\u7FA0\u7FA1\u7FD7\u8051\u804F\u8050\u80FE\u80D4\u8143\u814A\u8152\u814F\u8147\u813D\u814D\u813A\u81E6\u81EE\u81F7\u81F8\u81F9\u8204\u823C\u823D\u823F\u8275\u833B\u83CF\u83F9\u8423\u83C0\u83E8\u8412\u83E7\u83E4\u83FC\u83F6\u8410\u83C6\u83C8\u83EB\u83E3\u83BF\u8401\u83DD\u83E5\u83D8\u83FF\u83E1\u83CB\u83CE\u83D6\u83F5\u83C9\u8409\u840F\u83DE\u8411\u8406\u83C2\u83F3"], + ["dba1", "\u83D5\u83FA\u83C7\u83D1\u83EA\u8413\u83C3\u83EC\u83EE\u83C4\u83FB\u83D7\u83E2\u841B\u83DB\u83FE\u86D8\u86E2\u86E6\u86D3\u86E3\u86DA\u86EA\u86DD\u86EB\u86DC\u86EC\u86E9\u86D7\u86E8\u86D1\u8848\u8856\u8855\u88BA\u88D7\u88B9\u88B8\u88C0\u88BE\u88B6\u88BC\u88B7\u88BD\u88B2\u8901\u88C9\u8995\u8998\u8997\u89DD\u89DA\u89DB\u8A4E\u8A4D\u8A39\u8A59\u8A40\u8A57\u8A58\u8A44\u8A45\u8A52\u8A48\u8A51\u8A4A\u8A4C\u8A4F\u8C5F\u8C81\u8C80\u8CBA\u8CBE\u8CB0\u8CB9\u8CB5\u8D84\u8D80\u8D89\u8DD8\u8DD3\u8DCD\u8DC7\u8DD6\u8DDC\u8DCF\u8DD5\u8DD9\u8DC8\u8DD7\u8DC5\u8EEF\u8EF7\u8EFA"], + ["dc40", "\u8EF9\u8EE6\u8EEE\u8EE5\u8EF5\u8EE7\u8EE8\u8EF6\u8EEB\u8EF1\u8EEC\u8EF4\u8EE9\u902D\u9034\u902F\u9106\u912C\u9104\u90FF\u90FC\u9108\u90F9\u90FB\u9101\u9100\u9107\u9105\u9103\u9161\u9164\u915F\u9162\u9160\u9201\u920A\u9225\u9203\u921A\u9226\u920F\u920C\u9200\u9212\u91FF\u91FD\u9206\u9204\u9227\u9202\u921C\u9224\u9219\u9217\u9205\u9216\u957B\u958D\u958C\u9590\u9687\u967E\u9688"], + ["dca1", "\u9689\u9683\u9680\u96C2\u96C8\u96C3\u96F1\u96F0\u976C\u9770\u976E\u9807\u98A9\u98EB\u9CE6\u9EF9\u4E83\u4E84\u4EB6\u50BD\u50BF\u50C6\u50AE\u50C4\u50CA\u50B4\u50C8\u50C2\u50B0\u50C1\u50BA\u50B1\u50CB\u50C9\u50B6\u50B8\u51D7\u527A\u5278\u527B\u527C\u55C3\u55DB\u55CC\u55D0\u55CB\u55CA\u55DD\u55C0\u55D4\u55C4\u55E9\u55BF\u55D2\u558D\u55CF\u55D5\u55E2\u55D6\u55C8\u55F2\u55CD\u55D9\u55C2\u5714\u5853\u5868\u5864\u584F\u584D\u5849\u586F\u5855\u584E\u585D\u5859\u5865\u585B\u583D\u5863\u5871\u58FC\u5AC7\u5AC4\u5ACB\u5ABA\u5AB8\u5AB1\u5AB5\u5AB0\u5ABF\u5AC8\u5ABB\u5AC6"], + ["dd40", "\u5AB7\u5AC0\u5ACA\u5AB4\u5AB6\u5ACD\u5AB9\u5A90\u5BD6\u5BD8\u5BD9\u5C1F\u5C33\u5D71\u5D63\u5D4A\u5D65\u5D72\u5D6C\u5D5E\u5D68\u5D67\u5D62\u5DF0\u5E4F\u5E4E\u5E4A\u5E4D\u5E4B\u5EC5\u5ECC\u5EC6\u5ECB\u5EC7\u5F40\u5FAF\u5FAD\u60F7\u6149\u614A\u612B\u6145\u6136\u6132\u612E\u6146\u612F\u614F\u6129\u6140\u6220\u9168\u6223\u6225\u6224\u63C5\u63F1\u63EB\u6410\u6412\u6409\u6420\u6424"], + ["dda1", "\u6433\u6443\u641F\u6415\u6418\u6439\u6437\u6422\u6423\u640C\u6426\u6430\u6428\u6441\u6435\u642F\u640A\u641A\u6440\u6425\u6427\u640B\u63E7\u641B\u642E\u6421\u640E\u656F\u6592\u65D3\u6686\u668C\u6695\u6690\u668B\u668A\u6699\u6694\u6678\u6720\u6966\u695F\u6938\u694E\u6962\u6971\u693F\u6945\u696A\u6939\u6942\u6957\u6959\u697A\u6948\u6949\u6935\u696C\u6933\u693D\u6965\u68F0\u6978\u6934\u6969\u6940\u696F\u6944\u6976\u6958\u6941\u6974\u694C\u693B\u694B\u6937\u695C\u694F\u6951\u6932\u6952\u692F\u697B\u693C\u6B46\u6B45\u6B43\u6B42\u6B48\u6B41\u6B9B\uFA0D\u6BFB\u6BFC"], + ["de40", "\u6BF9\u6BF7\u6BF8\u6E9B\u6ED6\u6EC8\u6E8F\u6EC0\u6E9F\u6E93\u6E94\u6EA0\u6EB1\u6EB9\u6EC6\u6ED2\u6EBD\u6EC1\u6E9E\u6EC9\u6EB7\u6EB0\u6ECD\u6EA6\u6ECF\u6EB2\u6EBE\u6EC3\u6EDC\u6ED8\u6E99\u6E92\u6E8E\u6E8D\u6EA4\u6EA1\u6EBF\u6EB3\u6ED0\u6ECA\u6E97\u6EAE\u6EA3\u7147\u7154\u7152\u7163\u7160\u7141\u715D\u7162\u7172\u7178\u716A\u7161\u7142\u7158\u7143\u714B\u7170\u715F\u7150\u7153"], + ["dea1", "\u7144\u714D\u715A\u724F\u728D\u728C\u7291\u7290\u728E\u733C\u7342\u733B\u733A\u7340\u734A\u7349\u7444\u744A\u744B\u7452\u7451\u7457\u7440\u744F\u7450\u744E\u7442\u7446\u744D\u7454\u74E1\u74FF\u74FE\u74FD\u751D\u7579\u7577\u6983\u75EF\u760F\u7603\u75F7\u75FE\u75FC\u75F9\u75F8\u7610\u75FB\u75F6\u75ED\u75F5\u75FD\u7699\u76B5\u76DD\u7755\u775F\u7760\u7752\u7756\u775A\u7769\u7767\u7754\u7759\u776D\u77E0\u7887\u789A\u7894\u788F\u7884\u7895\u7885\u7886\u78A1\u7883\u7879\u7899\u7880\u7896\u787B\u797C\u7982\u797D\u7979\u7A11\u7A18\u7A19\u7A12\u7A17\u7A15\u7A22\u7A13"], + ["df40", "\u7A1B\u7A10\u7AA3\u7AA2\u7A9E\u7AEB\u7B66\u7B64\u7B6D\u7B74\u7B69\u7B72\u7B65\u7B73\u7B71\u7B70\u7B61\u7B78\u7B76\u7B63\u7CB2\u7CB4\u7CAF\u7D88\u7D86\u7D80\u7D8D\u7D7F\u7D85\u7D7A\u7D8E\u7D7B\u7D83\u7D7C\u7D8C\u7D94\u7D84\u7D7D\u7D92\u7F6D\u7F6B\u7F67\u7F68\u7F6C\u7FA6\u7FA5\u7FA7\u7FDB\u7FDC\u8021\u8164\u8160\u8177\u815C\u8169\u815B\u8162\u8172\u6721\u815E\u8176\u8167\u816F"], + ["dfa1", "\u8144\u8161\u821D\u8249\u8244\u8240\u8242\u8245\u84F1\u843F\u8456\u8476\u8479\u848F\u848D\u8465\u8451\u8440\u8486\u8467\u8430\u844D\u847D\u845A\u8459\u8474\u8473\u845D\u8507\u845E\u8437\u843A\u8434\u847A\u8443\u8478\u8432\u8445\u8429\u83D9\u844B\u842F\u8442\u842D\u845F\u8470\u8439\u844E\u844C\u8452\u846F\u84C5\u848E\u843B\u8447\u8436\u8433\u8468\u847E\u8444\u842B\u8460\u8454\u846E\u8450\u870B\u8704\u86F7\u870C\u86FA\u86D6\u86F5\u874D\u86F8\u870E\u8709\u8701\u86F6\u870D\u8705\u88D6\u88CB\u88CD\u88CE\u88DE\u88DB\u88DA\u88CC\u88D0\u8985\u899B\u89DF\u89E5\u89E4"], + ["e040", "\u89E1\u89E0\u89E2\u89DC\u89E6\u8A76\u8A86\u8A7F\u8A61\u8A3F\u8A77\u8A82\u8A84\u8A75\u8A83\u8A81\u8A74\u8A7A\u8C3C\u8C4B\u8C4A\u8C65\u8C64\u8C66\u8C86\u8C84\u8C85\u8CCC\u8D68\u8D69\u8D91\u8D8C\u8D8E\u8D8F\u8D8D\u8D93\u8D94\u8D90\u8D92\u8DF0\u8DE0\u8DEC\u8DF1\u8DEE\u8DD0\u8DE9\u8DE3\u8DE2\u8DE7\u8DF2\u8DEB\u8DF4\u8F06\u8EFF\u8F01\u8F00\u8F05\u8F07\u8F08\u8F02\u8F0B\u9052\u903F"], + ["e0a1", "\u9044\u9049\u903D\u9110\u910D\u910F\u9111\u9116\u9114\u910B\u910E\u916E\u916F\u9248\u9252\u9230\u923A\u9266\u9233\u9265\u925E\u9283\u922E\u924A\u9246\u926D\u926C\u924F\u9260\u9267\u926F\u9236\u9261\u9270\u9231\u9254\u9263\u9250\u9272\u924E\u9253\u924C\u9256\u9232\u959F\u959C\u959E\u959B\u9692\u9693\u9691\u9697\u96CE\u96FA\u96FD\u96F8\u96F5\u9773\u9777\u9778\u9772\u980F\u980D\u980E\u98AC\u98F6\u98F9\u99AF\u99B2\u99B0\u99B5\u9AAD\u9AAB\u9B5B\u9CEA\u9CED\u9CE7\u9E80\u9EFD\u50E6\u50D4\u50D7\u50E8\u50F3\u50DB\u50EA\u50DD\u50E4\u50D3\u50EC\u50F0\u50EF\u50E3\u50E0"], + ["e140", "\u51D8\u5280\u5281\u52E9\u52EB\u5330\u53AC\u5627\u5615\u560C\u5612\u55FC\u560F\u561C\u5601\u5613\u5602\u55FA\u561D\u5604\u55FF\u55F9\u5889\u587C\u5890\u5898\u5886\u5881\u587F\u5874\u588B\u587A\u5887\u5891\u588E\u5876\u5882\u5888\u587B\u5894\u588F\u58FE\u596B\u5ADC\u5AEE\u5AE5\u5AD5\u5AEA\u5ADA\u5AED\u5AEB\u5AF3\u5AE2\u5AE0\u5ADB\u5AEC\u5ADE\u5ADD\u5AD9\u5AE8\u5ADF\u5B77\u5BE0"], + ["e1a1", "\u5BE3\u5C63\u5D82\u5D80\u5D7D\u5D86\u5D7A\u5D81\u5D77\u5D8A\u5D89\u5D88\u5D7E\u5D7C\u5D8D\u5D79\u5D7F\u5E58\u5E59\u5E53\u5ED8\u5ED1\u5ED7\u5ECE\u5EDC\u5ED5\u5ED9\u5ED2\u5ED4\u5F44\u5F43\u5F6F\u5FB6\u612C\u6128\u6141\u615E\u6171\u6173\u6152\u6153\u6172\u616C\u6180\u6174\u6154\u617A\u615B\u6165\u613B\u616A\u6161\u6156\u6229\u6227\u622B\u642B\u644D\u645B\u645D\u6474\u6476\u6472\u6473\u647D\u6475\u6466\u64A6\u644E\u6482\u645E\u645C\u644B\u6453\u6460\u6450\u647F\u643F\u646C\u646B\u6459\u6465\u6477\u6573\u65A0\u66A1\u66A0\u669F\u6705\u6704\u6722\u69B1\u69B6\u69C9"], + ["e240", "\u69A0\u69CE\u6996\u69B0\u69AC\u69BC\u6991\u6999\u698E\u69A7\u698D\u69A9\u69BE\u69AF\u69BF\u69C4\u69BD\u69A4\u69D4\u69B9\u69CA\u699A\u69CF\u69B3\u6993\u69AA\u69A1\u699E\u69D9\u6997\u6990\u69C2\u69B5\u69A5\u69C6\u6B4A\u6B4D\u6B4B\u6B9E\u6B9F\u6BA0\u6BC3\u6BC4\u6BFE\u6ECE\u6EF5\u6EF1\u6F03\u6F25\u6EF8\u6F37\u6EFB\u6F2E\u6F09\u6F4E\u6F19\u6F1A\u6F27\u6F18\u6F3B\u6F12\u6EED\u6F0A"], + ["e2a1", "\u6F36\u6F73\u6EF9\u6EEE\u6F2D\u6F40\u6F30\u6F3C\u6F35\u6EEB\u6F07\u6F0E\u6F43\u6F05\u6EFD\u6EF6\u6F39\u6F1C\u6EFC\u6F3A\u6F1F\u6F0D\u6F1E\u6F08\u6F21\u7187\u7190\u7189\u7180\u7185\u7182\u718F\u717B\u7186\u7181\u7197\u7244\u7253\u7297\u7295\u7293\u7343\u734D\u7351\u734C\u7462\u7473\u7471\u7475\u7472\u7467\u746E\u7500\u7502\u7503\u757D\u7590\u7616\u7608\u760C\u7615\u7611\u760A\u7614\u76B8\u7781\u777C\u7785\u7782\u776E\u7780\u776F\u777E\u7783\u78B2\u78AA\u78B4\u78AD\u78A8\u787E\u78AB\u789E\u78A5\u78A0\u78AC\u78A2\u78A4\u7998\u798A\u798B\u7996\u7995\u7994\u7993"], + ["e340", "\u7997\u7988\u7992\u7990\u7A2B\u7A4A\u7A30\u7A2F\u7A28\u7A26\u7AA8\u7AAB\u7AAC\u7AEE\u7B88\u7B9C\u7B8A\u7B91\u7B90\u7B96\u7B8D\u7B8C\u7B9B\u7B8E\u7B85\u7B98\u5284\u7B99\u7BA4\u7B82\u7CBB\u7CBF\u7CBC\u7CBA\u7DA7\u7DB7\u7DC2\u7DA3\u7DAA\u7DC1\u7DC0\u7DC5\u7D9D\u7DCE\u7DC4\u7DC6\u7DCB\u7DCC\u7DAF\u7DB9\u7D96\u7DBC\u7D9F\u7DA6\u7DAE\u7DA9\u7DA1\u7DC9\u7F73\u7FE2\u7FE3\u7FE5\u7FDE"], + ["e3a1", "\u8024\u805D\u805C\u8189\u8186\u8183\u8187\u818D\u818C\u818B\u8215\u8497\u84A4\u84A1\u849F\u84BA\u84CE\u84C2\u84AC\u84AE\u84AB\u84B9\u84B4\u84C1\u84CD\u84AA\u849A\u84B1\u84D0\u849D\u84A7\u84BB\u84A2\u8494\u84C7\u84CC\u849B\u84A9\u84AF\u84A8\u84D6\u8498\u84B6\u84CF\u84A0\u84D7\u84D4\u84D2\u84DB\u84B0\u8491\u8661\u8733\u8723\u8728\u876B\u8740\u872E\u871E\u8721\u8719\u871B\u8743\u872C\u8741\u873E\u8746\u8720\u8732\u872A\u872D\u873C\u8712\u873A\u8731\u8735\u8742\u8726\u8727\u8738\u8724\u871A\u8730\u8711\u88F7\u88E7\u88F1\u88F2\u88FA\u88FE\u88EE\u88FC\u88F6\u88FB"], + ["e440", "\u88F0\u88EC\u88EB\u899D\u89A1\u899F\u899E\u89E9\u89EB\u89E8\u8AAB\u8A99\u8A8B\u8A92\u8A8F\u8A96\u8C3D\u8C68\u8C69\u8CD5\u8CCF\u8CD7\u8D96\u8E09\u8E02\u8DFF\u8E0D\u8DFD\u8E0A\u8E03\u8E07\u8E06\u8E05\u8DFE\u8E00\u8E04\u8F10\u8F11\u8F0E\u8F0D\u9123\u911C\u9120\u9122\u911F\u911D\u911A\u9124\u9121\u911B\u917A\u9172\u9179\u9173\u92A5\u92A4\u9276\u929B\u927A\u92A0\u9294\u92AA\u928D"], + ["e4a1", "\u92A6\u929A\u92AB\u9279\u9297\u927F\u92A3\u92EE\u928E\u9282\u9295\u92A2\u927D\u9288\u92A1\u928A\u9286\u928C\u9299\u92A7\u927E\u9287\u92A9\u929D\u928B\u922D\u969E\u96A1\u96FF\u9758\u977D\u977A\u977E\u9783\u9780\u9782\u977B\u9784\u9781\u977F\u97CE\u97CD\u9816\u98AD\u98AE\u9902\u9900\u9907\u999D\u999C\u99C3\u99B9\u99BB\u99BA\u99C2\u99BD\u99C7\u9AB1\u9AE3\u9AE7\u9B3E\u9B3F\u9B60\u9B61\u9B5F\u9CF1\u9CF2\u9CF5\u9EA7\u50FF\u5103\u5130\u50F8\u5106\u5107\u50F6\u50FE\u510B\u510C\u50FD\u510A\u528B\u528C\u52F1\u52EF\u5648\u5642\u564C\u5635\u5641\u564A\u5649\u5646\u5658"], + ["e540", "\u565A\u5640\u5633\u563D\u562C\u563E\u5638\u562A\u563A\u571A\u58AB\u589D\u58B1\u58A0\u58A3\u58AF\u58AC\u58A5\u58A1\u58FF\u5AFF\u5AF4\u5AFD\u5AF7\u5AF6\u5B03\u5AF8\u5B02\u5AF9\u5B01\u5B07\u5B05\u5B0F\u5C67\u5D99\u5D97\u5D9F\u5D92\u5DA2\u5D93\u5D95\u5DA0\u5D9C\u5DA1\u5D9A\u5D9E\u5E69\u5E5D\u5E60\u5E5C\u7DF3\u5EDB\u5EDE\u5EE1\u5F49\u5FB2\u618B\u6183\u6179\u61B1\u61B0\u61A2\u6189"], + ["e5a1", "\u619B\u6193\u61AF\u61AD\u619F\u6192\u61AA\u61A1\u618D\u6166\u61B3\u622D\u646E\u6470\u6496\u64A0\u6485\u6497\u649C\u648F\u648B\u648A\u648C\u64A3\u649F\u6468\u64B1\u6498\u6576\u657A\u6579\u657B\u65B2\u65B3\u66B5\u66B0\u66A9\u66B2\u66B7\u66AA\u66AF\u6A00\u6A06\u6A17\u69E5\u69F8\u6A15\u69F1\u69E4\u6A20\u69FF\u69EC\u69E2\u6A1B\u6A1D\u69FE\u6A27\u69F2\u69EE\u6A14\u69F7\u69E7\u6A40\u6A08\u69E6\u69FB\u6A0D\u69FC\u69EB\u6A09\u6A04\u6A18\u6A25\u6A0F\u69F6\u6A26\u6A07\u69F4\u6A16\u6B51\u6BA5\u6BA3\u6BA2\u6BA6\u6C01\u6C00\u6BFF\u6C02\u6F41\u6F26\u6F7E\u6F87\u6FC6\u6F92"], + ["e640", "\u6F8D\u6F89\u6F8C\u6F62\u6F4F\u6F85\u6F5A\u6F96\u6F76\u6F6C\u6F82\u6F55\u6F72\u6F52\u6F50\u6F57\u6F94\u6F93\u6F5D\u6F00\u6F61\u6F6B\u6F7D\u6F67\u6F90\u6F53\u6F8B\u6F69\u6F7F\u6F95\u6F63\u6F77\u6F6A\u6F7B\u71B2\u71AF\u719B\u71B0\u71A0\u719A\u71A9\u71B5\u719D\u71A5\u719E\u71A4\u71A1\u71AA\u719C\u71A7\u71B3\u7298\u729A\u7358\u7352\u735E\u735F\u7360\u735D\u735B\u7361\u735A\u7359"], + ["e6a1", "\u7362\u7487\u7489\u748A\u7486\u7481\u747D\u7485\u7488\u747C\u7479\u7508\u7507\u757E\u7625\u761E\u7619\u761D\u761C\u7623\u761A\u7628\u761B\u769C\u769D\u769E\u769B\u778D\u778F\u7789\u7788\u78CD\u78BB\u78CF\u78CC\u78D1\u78CE\u78D4\u78C8\u78C3\u78C4\u78C9\u799A\u79A1\u79A0\u799C\u79A2\u799B\u6B76\u7A39\u7AB2\u7AB4\u7AB3\u7BB7\u7BCB\u7BBE\u7BAC\u7BCE\u7BAF\u7BB9\u7BCA\u7BB5\u7CC5\u7CC8\u7CCC\u7CCB\u7DF7\u7DDB\u7DEA\u7DE7\u7DD7\u7DE1\u7E03\u7DFA\u7DE6\u7DF6\u7DF1\u7DF0\u7DEE\u7DDF\u7F76\u7FAC\u7FB0\u7FAD\u7FED\u7FEB\u7FEA\u7FEC\u7FE6\u7FE8\u8064\u8067\u81A3\u819F"], + ["e740", "\u819E\u8195\u81A2\u8199\u8197\u8216\u824F\u8253\u8252\u8250\u824E\u8251\u8524\u853B\u850F\u8500\u8529\u850E\u8509\u850D\u851F\u850A\u8527\u851C\u84FB\u852B\u84FA\u8508\u850C\u84F4\u852A\u84F2\u8515\u84F7\u84EB\u84F3\u84FC\u8512\u84EA\u84E9\u8516\u84FE\u8528\u851D\u852E\u8502\u84FD\u851E\u84F6\u8531\u8526\u84E7\u84E8\u84F0\u84EF\u84F9\u8518\u8520\u8530\u850B\u8519\u852F\u8662"], + ["e7a1", "\u8756\u8763\u8764\u8777\u87E1\u8773\u8758\u8754\u875B\u8752\u8761\u875A\u8751\u875E\u876D\u876A\u8750\u874E\u875F\u875D\u876F\u876C\u877A\u876E\u875C\u8765\u874F\u877B\u8775\u8762\u8767\u8769\u885A\u8905\u890C\u8914\u890B\u8917\u8918\u8919\u8906\u8916\u8911\u890E\u8909\u89A2\u89A4\u89A3\u89ED\u89F0\u89EC\u8ACF\u8AC6\u8AB8\u8AD3\u8AD1\u8AD4\u8AD5\u8ABB\u8AD7\u8ABE\u8AC0\u8AC5\u8AD8\u8AC3\u8ABA\u8ABD\u8AD9\u8C3E\u8C4D\u8C8F\u8CE5\u8CDF\u8CD9\u8CE8\u8CDA\u8CDD\u8CE7\u8DA0\u8D9C\u8DA1\u8D9B\u8E20\u8E23\u8E25\u8E24\u8E2E\u8E15\u8E1B\u8E16\u8E11\u8E19\u8E26\u8E27"], + ["e840", "\u8E14\u8E12\u8E18\u8E13\u8E1C\u8E17\u8E1A\u8F2C\u8F24\u8F18\u8F1A\u8F20\u8F23\u8F16\u8F17\u9073\u9070\u906F\u9067\u906B\u912F\u912B\u9129\u912A\u9132\u9126\u912E\u9185\u9186\u918A\u9181\u9182\u9184\u9180\u92D0\u92C3\u92C4\u92C0\u92D9\u92B6\u92CF\u92F1\u92DF\u92D8\u92E9\u92D7\u92DD\u92CC\u92EF\u92C2\u92E8\u92CA\u92C8\u92CE\u92E6\u92CD\u92D5\u92C9\u92E0\u92DE\u92E7\u92D1\u92D3"], + ["e8a1", "\u92B5\u92E1\u92C6\u92B4\u957C\u95AC\u95AB\u95AE\u95B0\u96A4\u96A2\u96D3\u9705\u9708\u9702\u975A\u978A\u978E\u9788\u97D0\u97CF\u981E\u981D\u9826\u9829\u9828\u9820\u981B\u9827\u98B2\u9908\u98FA\u9911\u9914\u9916\u9917\u9915\u99DC\u99CD\u99CF\u99D3\u99D4\u99CE\u99C9\u99D6\u99D8\u99CB\u99D7\u99CC\u9AB3\u9AEC\u9AEB\u9AF3\u9AF2\u9AF1\u9B46\u9B43\u9B67\u9B74\u9B71\u9B66\u9B76\u9B75\u9B70\u9B68\u9B64\u9B6C\u9CFC\u9CFA\u9CFD\u9CFF\u9CF7\u9D07\u9D00\u9CF9\u9CFB\u9D08\u9D05\u9D04\u9E83\u9ED3\u9F0F\u9F10\u511C\u5113\u5117\u511A\u5111\u51DE\u5334\u53E1\u5670\u5660\u566E"], + ["e940", "\u5673\u5666\u5663\u566D\u5672\u565E\u5677\u571C\u571B\u58C8\u58BD\u58C9\u58BF\u58BA\u58C2\u58BC\u58C6\u5B17\u5B19\u5B1B\u5B21\u5B14\u5B13\u5B10\u5B16\u5B28\u5B1A\u5B20\u5B1E\u5BEF\u5DAC\u5DB1\u5DA9\u5DA7\u5DB5\u5DB0\u5DAE\u5DAA\u5DA8\u5DB2\u5DAD\u5DAF\u5DB4\u5E67\u5E68\u5E66\u5E6F\u5EE9\u5EE7\u5EE6\u5EE8\u5EE5\u5F4B\u5FBC\u619D\u61A8\u6196\u61C5\u61B4\u61C6\u61C1\u61CC\u61BA"], + ["e9a1", "\u61BF\u61B8\u618C\u64D7\u64D6\u64D0\u64CF\u64C9\u64BD\u6489\u64C3\u64DB\u64F3\u64D9\u6533\u657F\u657C\u65A2\u66C8\u66BE\u66C0\u66CA\u66CB\u66CF\u66BD\u66BB\u66BA\u66CC\u6723\u6A34\u6A66\u6A49\u6A67\u6A32\u6A68\u6A3E\u6A5D\u6A6D\u6A76\u6A5B\u6A51\u6A28\u6A5A\u6A3B\u6A3F\u6A41\u6A6A\u6A64\u6A50\u6A4F\u6A54\u6A6F\u6A69\u6A60\u6A3C\u6A5E\u6A56\u6A55\u6A4D\u6A4E\u6A46\u6B55\u6B54\u6B56\u6BA7\u6BAA\u6BAB\u6BC8\u6BC7\u6C04\u6C03\u6C06\u6FAD\u6FCB\u6FA3\u6FC7\u6FBC\u6FCE\u6FC8\u6F5E\u6FC4\u6FBD\u6F9E\u6FCA\u6FA8\u7004\u6FA5\u6FAE\u6FBA\u6FAC\u6FAA\u6FCF\u6FBF\u6FB8"], + ["ea40", "\u6FA2\u6FC9\u6FAB\u6FCD\u6FAF\u6FB2\u6FB0\u71C5\u71C2\u71BF\u71B8\u71D6\u71C0\u71C1\u71CB\u71D4\u71CA\u71C7\u71CF\u71BD\u71D8\u71BC\u71C6\u71DA\u71DB\u729D\u729E\u7369\u7366\u7367\u736C\u7365\u736B\u736A\u747F\u749A\u74A0\u7494\u7492\u7495\u74A1\u750B\u7580\u762F\u762D\u7631\u763D\u7633\u763C\u7635\u7632\u7630\u76BB\u76E6\u779A\u779D\u77A1\u779C\u779B\u77A2\u77A3\u7795\u7799"], + ["eaa1", "\u7797\u78DD\u78E9\u78E5\u78EA\u78DE\u78E3\u78DB\u78E1\u78E2\u78ED\u78DF\u78E0\u79A4\u7A44\u7A48\u7A47\u7AB6\u7AB8\u7AB5\u7AB1\u7AB7\u7BDE\u7BE3\u7BE7\u7BDD\u7BD5\u7BE5\u7BDA\u7BE8\u7BF9\u7BD4\u7BEA\u7BE2\u7BDC\u7BEB\u7BD8\u7BDF\u7CD2\u7CD4\u7CD7\u7CD0\u7CD1\u7E12\u7E21\u7E17\u7E0C\u7E1F\u7E20\u7E13\u7E0E\u7E1C\u7E15\u7E1A\u7E22\u7E0B\u7E0F\u7E16\u7E0D\u7E14\u7E25\u7E24\u7F43\u7F7B\u7F7C\u7F7A\u7FB1\u7FEF\u802A\u8029\u806C\u81B1\u81A6\u81AE\u81B9\u81B5\u81AB\u81B0\u81AC\u81B4\u81B2\u81B7\u81A7\u81F2\u8255\u8256\u8257\u8556\u8545\u856B\u854D\u8553\u8561\u8558"], + ["eb40", "\u8540\u8546\u8564\u8541\u8562\u8544\u8551\u8547\u8563\u853E\u855B\u8571\u854E\u856E\u8575\u8555\u8567\u8560\u858C\u8566\u855D\u8554\u8565\u856C\u8663\u8665\u8664\u879B\u878F\u8797\u8793\u8792\u8788\u8781\u8796\u8798\u8779\u8787\u87A3\u8785\u8790\u8791\u879D\u8784\u8794\u879C\u879A\u8789\u891E\u8926\u8930\u892D\u892E\u8927\u8931\u8922\u8929\u8923\u892F\u892C\u891F\u89F1\u8AE0"], + ["eba1", "\u8AE2\u8AF2\u8AF4\u8AF5\u8ADD\u8B14\u8AE4\u8ADF\u8AF0\u8AC8\u8ADE\u8AE1\u8AE8\u8AFF\u8AEF\u8AFB\u8C91\u8C92\u8C90\u8CF5\u8CEE\u8CF1\u8CF0\u8CF3\u8D6C\u8D6E\u8DA5\u8DA7\u8E33\u8E3E\u8E38\u8E40\u8E45\u8E36\u8E3C\u8E3D\u8E41\u8E30\u8E3F\u8EBD\u8F36\u8F2E\u8F35\u8F32\u8F39\u8F37\u8F34\u9076\u9079\u907B\u9086\u90FA\u9133\u9135\u9136\u9193\u9190\u9191\u918D\u918F\u9327\u931E\u9308\u931F\u9306\u930F\u937A\u9338\u933C\u931B\u9323\u9312\u9301\u9346\u932D\u930E\u930D\u92CB\u931D\u92FA\u9325\u9313\u92F9\u92F7\u9334\u9302\u9324\u92FF\u9329\u9339\u9335\u932A\u9314\u930C"], + ["ec40", "\u930B\u92FE\u9309\u9300\u92FB\u9316\u95BC\u95CD\u95BE\u95B9\u95BA\u95B6\u95BF\u95B5\u95BD\u96A9\u96D4\u970B\u9712\u9710\u9799\u9797\u9794\u97F0\u97F8\u9835\u982F\u9832\u9924\u991F\u9927\u9929\u999E\u99EE\u99EC\u99E5\u99E4\u99F0\u99E3\u99EA\u99E9\u99E7\u9AB9\u9ABF\u9AB4\u9ABB\u9AF6\u9AFA\u9AF9\u9AF7\u9B33\u9B80\u9B85\u9B87\u9B7C\u9B7E\u9B7B\u9B82\u9B93\u9B92\u9B90\u9B7A\u9B95"], + ["eca1", "\u9B7D\u9B88\u9D25\u9D17\u9D20\u9D1E\u9D14\u9D29\u9D1D\u9D18\u9D22\u9D10\u9D19\u9D1F\u9E88\u9E86\u9E87\u9EAE\u9EAD\u9ED5\u9ED6\u9EFA\u9F12\u9F3D\u5126\u5125\u5122\u5124\u5120\u5129\u52F4\u5693\u568C\u568D\u5686\u5684\u5683\u567E\u5682\u567F\u5681\u58D6\u58D4\u58CF\u58D2\u5B2D\u5B25\u5B32\u5B23\u5B2C\u5B27\u5B26\u5B2F\u5B2E\u5B7B\u5BF1\u5BF2\u5DB7\u5E6C\u5E6A\u5FBE\u5FBB\u61C3\u61B5\u61BC\u61E7\u61E0\u61E5\u61E4\u61E8\u61DE\u64EF\u64E9\u64E3\u64EB\u64E4\u64E8\u6581\u6580\u65B6\u65DA\u66D2\u6A8D\u6A96\u6A81\u6AA5\u6A89\u6A9F\u6A9B\u6AA1\u6A9E\u6A87\u6A93\u6A8E"], + ["ed40", "\u6A95\u6A83\u6AA8\u6AA4\u6A91\u6A7F\u6AA6\u6A9A\u6A85\u6A8C\u6A92\u6B5B\u6BAD\u6C09\u6FCC\u6FA9\u6FF4\u6FD4\u6FE3\u6FDC\u6FED\u6FE7\u6FE6\u6FDE\u6FF2\u6FDD\u6FE2\u6FE8\u71E1\u71F1\u71E8\u71F2\u71E4\u71F0\u71E2\u7373\u736E\u736F\u7497\u74B2\u74AB\u7490\u74AA\u74AD\u74B1\u74A5\u74AF\u7510\u7511\u7512\u750F\u7584\u7643\u7648\u7649\u7647\u76A4\u76E9\u77B5\u77AB\u77B2\u77B7\u77B6"], + ["eda1", "\u77B4\u77B1\u77A8\u77F0\u78F3\u78FD\u7902\u78FB\u78FC\u78F2\u7905\u78F9\u78FE\u7904\u79AB\u79A8\u7A5C\u7A5B\u7A56\u7A58\u7A54\u7A5A\u7ABE\u7AC0\u7AC1\u7C05\u7C0F\u7BF2\u7C00\u7BFF\u7BFB\u7C0E\u7BF4\u7C0B\u7BF3\u7C02\u7C09\u7C03\u7C01\u7BF8\u7BFD\u7C06\u7BF0\u7BF1\u7C10\u7C0A\u7CE8\u7E2D\u7E3C\u7E42\u7E33\u9848\u7E38\u7E2A\u7E49\u7E40\u7E47\u7E29\u7E4C\u7E30\u7E3B\u7E36\u7E44\u7E3A\u7F45\u7F7F\u7F7E\u7F7D\u7FF4\u7FF2\u802C\u81BB\u81C4\u81CC\u81CA\u81C5\u81C7\u81BC\u81E9\u825B\u825A\u825C\u8583\u8580\u858F\u85A7\u8595\u85A0\u858B\u85A3\u857B\u85A4\u859A\u859E"], + ["ee40", "\u8577\u857C\u8589\u85A1\u857A\u8578\u8557\u858E\u8596\u8586\u858D\u8599\u859D\u8581\u85A2\u8582\u8588\u8585\u8579\u8576\u8598\u8590\u859F\u8668\u87BE\u87AA\u87AD\u87C5\u87B0\u87AC\u87B9\u87B5\u87BC\u87AE\u87C9\u87C3\u87C2\u87CC\u87B7\u87AF\u87C4\u87CA\u87B4\u87B6\u87BF\u87B8\u87BD\u87DE\u87B2\u8935\u8933\u893C\u893E\u8941\u8952\u8937\u8942\u89AD\u89AF\u89AE\u89F2\u89F3\u8B1E"], + ["eea1", "\u8B18\u8B16\u8B11\u8B05\u8B0B\u8B22\u8B0F\u8B12\u8B15\u8B07\u8B0D\u8B08\u8B06\u8B1C\u8B13\u8B1A\u8C4F\u8C70\u8C72\u8C71\u8C6F\u8C95\u8C94\u8CF9\u8D6F\u8E4E\u8E4D\u8E53\u8E50\u8E4C\u8E47\u8F43\u8F40\u9085\u907E\u9138\u919A\u91A2\u919B\u9199\u919F\u91A1\u919D\u91A0\u93A1\u9383\u93AF\u9364\u9356\u9347\u937C\u9358\u935C\u9376\u9349\u9350\u9351\u9360\u936D\u938F\u934C\u936A\u9379\u9357\u9355\u9352\u934F\u9371\u9377\u937B\u9361\u935E\u9363\u9367\u9380\u934E\u9359\u95C7\u95C0\u95C9\u95C3\u95C5\u95B7\u96AE\u96B0\u96AC\u9720\u971F\u9718\u971D\u9719\u979A\u97A1\u979C"], + ["ef40", "\u979E\u979D\u97D5\u97D4\u97F1\u9841\u9844\u984A\u9849\u9845\u9843\u9925\u992B\u992C\u992A\u9933\u9932\u992F\u992D\u9931\u9930\u9998\u99A3\u99A1\u9A02\u99FA\u99F4\u99F7\u99F9\u99F8\u99F6\u99FB\u99FD\u99FE\u99FC\u9A03\u9ABE\u9AFE\u9AFD\u9B01\u9AFC\u9B48\u9B9A\u9BA8\u9B9E\u9B9B\u9BA6\u9BA1\u9BA5\u9BA4\u9B86\u9BA2\u9BA0\u9BAF\u9D33\u9D41\u9D67\u9D36\u9D2E\u9D2F\u9D31\u9D38\u9D30"], + ["efa1", "\u9D45\u9D42\u9D43\u9D3E\u9D37\u9D40\u9D3D\u7FF5\u9D2D\u9E8A\u9E89\u9E8D\u9EB0\u9EC8\u9EDA\u9EFB\u9EFF\u9F24\u9F23\u9F22\u9F54\u9FA0\u5131\u512D\u512E\u5698\u569C\u5697\u569A\u569D\u5699\u5970\u5B3C\u5C69\u5C6A\u5DC0\u5E6D\u5E6E\u61D8\u61DF\u61ED\u61EE\u61F1\u61EA\u61F0\u61EB\u61D6\u61E9\u64FF\u6504\u64FD\u64F8\u6501\u6503\u64FC\u6594\u65DB\u66DA\u66DB\u66D8\u6AC5\u6AB9\u6ABD\u6AE1\u6AC6\u6ABA\u6AB6\u6AB7\u6AC7\u6AB4\u6AAD\u6B5E\u6BC9\u6C0B\u7007\u700C\u700D\u7001\u7005\u7014\u700E\u6FFF\u7000\u6FFB\u7026\u6FFC\u6FF7\u700A\u7201\u71FF\u71F9\u7203\u71FD\u7376"], + ["f040", "\u74B8\u74C0\u74B5\u74C1\u74BE\u74B6\u74BB\u74C2\u7514\u7513\u765C\u7664\u7659\u7650\u7653\u7657\u765A\u76A6\u76BD\u76EC\u77C2\u77BA\u78FF\u790C\u7913\u7914\u7909\u7910\u7912\u7911\u79AD\u79AC\u7A5F\u7C1C\u7C29\u7C19\u7C20\u7C1F\u7C2D\u7C1D\u7C26\u7C28\u7C22\u7C25\u7C30\u7E5C\u7E50\u7E56\u7E63\u7E58\u7E62\u7E5F\u7E51\u7E60\u7E57\u7E53\u7FB5\u7FB3\u7FF7\u7FF8\u8075\u81D1\u81D2"], + ["f0a1", "\u81D0\u825F\u825E\u85B4\u85C6\u85C0\u85C3\u85C2\u85B3\u85B5\u85BD\u85C7\u85C4\u85BF\u85CB\u85CE\u85C8\u85C5\u85B1\u85B6\u85D2\u8624\u85B8\u85B7\u85BE\u8669\u87E7\u87E6\u87E2\u87DB\u87EB\u87EA\u87E5\u87DF\u87F3\u87E4\u87D4\u87DC\u87D3\u87ED\u87D8\u87E3\u87A4\u87D7\u87D9\u8801\u87F4\u87E8\u87DD\u8953\u894B\u894F\u894C\u8946\u8950\u8951\u8949\u8B2A\u8B27\u8B23\u8B33\u8B30\u8B35\u8B47\u8B2F\u8B3C\u8B3E\u8B31\u8B25\u8B37\u8B26\u8B36\u8B2E\u8B24\u8B3B\u8B3D\u8B3A\u8C42\u8C75\u8C99\u8C98\u8C97\u8CFE\u8D04\u8D02\u8D00\u8E5C\u8E62\u8E60\u8E57\u8E56\u8E5E\u8E65\u8E67"], + ["f140", "\u8E5B\u8E5A\u8E61\u8E5D\u8E69\u8E54\u8F46\u8F47\u8F48\u8F4B\u9128\u913A\u913B\u913E\u91A8\u91A5\u91A7\u91AF\u91AA\u93B5\u938C\u9392\u93B7\u939B\u939D\u9389\u93A7\u938E\u93AA\u939E\u93A6\u9395\u9388\u9399\u939F\u938D\u93B1\u9391\u93B2\u93A4\u93A8\u93B4\u93A3\u93A5\u95D2\u95D3\u95D1\u96B3\u96D7\u96DA\u5DC2\u96DF\u96D8\u96DD\u9723\u9722\u9725\u97AC\u97AE\u97A8\u97AB\u97A4\u97AA"], + ["f1a1", "\u97A2\u97A5\u97D7\u97D9\u97D6\u97D8\u97FA\u9850\u9851\u9852\u98B8\u9941\u993C\u993A\u9A0F\u9A0B\u9A09\u9A0D\u9A04\u9A11\u9A0A\u9A05\u9A07\u9A06\u9AC0\u9ADC\u9B08\u9B04\u9B05\u9B29\u9B35\u9B4A\u9B4C\u9B4B\u9BC7\u9BC6\u9BC3\u9BBF\u9BC1\u9BB5\u9BB8\u9BD3\u9BB6\u9BC4\u9BB9\u9BBD\u9D5C\u9D53\u9D4F\u9D4A\u9D5B\u9D4B\u9D59\u9D56\u9D4C\u9D57\u9D52\u9D54\u9D5F\u9D58\u9D5A\u9E8E\u9E8C\u9EDF\u9F01\u9F00\u9F16\u9F25\u9F2B\u9F2A\u9F29\u9F28\u9F4C\u9F55\u5134\u5135\u5296\u52F7\u53B4\u56AB\u56AD\u56A6\u56A7\u56AA\u56AC\u58DA\u58DD\u58DB\u5912\u5B3D\u5B3E\u5B3F\u5DC3\u5E70"], + ["f240", "\u5FBF\u61FB\u6507\u6510\u650D\u6509\u650C\u650E\u6584\u65DE\u65DD\u66DE\u6AE7\u6AE0\u6ACC\u6AD1\u6AD9\u6ACB\u6ADF\u6ADC\u6AD0\u6AEB\u6ACF\u6ACD\u6ADE\u6B60\u6BB0\u6C0C\u7019\u7027\u7020\u7016\u702B\u7021\u7022\u7023\u7029\u7017\u7024\u701C\u702A\u720C\u720A\u7207\u7202\u7205\u72A5\u72A6\u72A4\u72A3\u72A1\u74CB\u74C5\u74B7\u74C3\u7516\u7660\u77C9\u77CA\u77C4\u77F1\u791D\u791B"], + ["f2a1", "\u7921\u791C\u7917\u791E\u79B0\u7A67\u7A68\u7C33\u7C3C\u7C39\u7C2C\u7C3B\u7CEC\u7CEA\u7E76\u7E75\u7E78\u7E70\u7E77\u7E6F\u7E7A\u7E72\u7E74\u7E68\u7F4B\u7F4A\u7F83\u7F86\u7FB7\u7FFD\u7FFE\u8078\u81D7\u81D5\u8264\u8261\u8263\u85EB\u85F1\u85ED\u85D9\u85E1\u85E8\u85DA\u85D7\u85EC\u85F2\u85F8\u85D8\u85DF\u85E3\u85DC\u85D1\u85F0\u85E6\u85EF\u85DE\u85E2\u8800\u87FA\u8803\u87F6\u87F7\u8809\u880C\u880B\u8806\u87FC\u8808\u87FF\u880A\u8802\u8962\u895A\u895B\u8957\u8961\u895C\u8958\u895D\u8959\u8988\u89B7\u89B6\u89F6\u8B50\u8B48\u8B4A\u8B40\u8B53\u8B56\u8B54\u8B4B\u8B55"], + ["f340", "\u8B51\u8B42\u8B52\u8B57\u8C43\u8C77\u8C76\u8C9A\u8D06\u8D07\u8D09\u8DAC\u8DAA\u8DAD\u8DAB\u8E6D\u8E78\u8E73\u8E6A\u8E6F\u8E7B\u8EC2\u8F52\u8F51\u8F4F\u8F50\u8F53\u8FB4\u9140\u913F\u91B0\u91AD\u93DE\u93C7\u93CF\u93C2\u93DA\u93D0\u93F9\u93EC\u93CC\u93D9\u93A9\u93E6\u93CA\u93D4\u93EE\u93E3\u93D5\u93C4\u93CE\u93C0\u93D2\u93E7\u957D\u95DA\u95DB\u96E1\u9729\u972B\u972C\u9728\u9726"], + ["f3a1", "\u97B3\u97B7\u97B6\u97DD\u97DE\u97DF\u985C\u9859\u985D\u9857\u98BF\u98BD\u98BB\u98BE\u9948\u9947\u9943\u99A6\u99A7\u9A1A\u9A15\u9A25\u9A1D\u9A24\u9A1B\u9A22\u9A20\u9A27\u9A23\u9A1E\u9A1C\u9A14\u9AC2\u9B0B\u9B0A\u9B0E\u9B0C\u9B37\u9BEA\u9BEB\u9BE0\u9BDE\u9BE4\u9BE6\u9BE2\u9BF0\u9BD4\u9BD7\u9BEC\u9BDC\u9BD9\u9BE5\u9BD5\u9BE1\u9BDA\u9D77\u9D81\u9D8A\u9D84\u9D88\u9D71\u9D80\u9D78\u9D86\u9D8B\u9D8C\u9D7D\u9D6B\u9D74\u9D75\u9D70\u9D69\u9D85\u9D73\u9D7B\u9D82\u9D6F\u9D79\u9D7F\u9D87\u9D68\u9E94\u9E91\u9EC0\u9EFC\u9F2D\u9F40\u9F41\u9F4D\u9F56\u9F57\u9F58\u5337\u56B2"], + ["f440", "\u56B5\u56B3\u58E3\u5B45\u5DC6\u5DC7\u5EEE\u5EEF\u5FC0\u5FC1\u61F9\u6517\u6516\u6515\u6513\u65DF\u66E8\u66E3\u66E4\u6AF3\u6AF0\u6AEA\u6AE8\u6AF9\u6AF1\u6AEE\u6AEF\u703C\u7035\u702F\u7037\u7034\u7031\u7042\u7038\u703F\u703A\u7039\u7040\u703B\u7033\u7041\u7213\u7214\u72A8\u737D\u737C\u74BA\u76AB\u76AA\u76BE\u76ED\u77CC\u77CE\u77CF\u77CD\u77F2\u7925\u7923\u7927\u7928\u7924\u7929"], + ["f4a1", "\u79B2\u7A6E\u7A6C\u7A6D\u7AF7\u7C49\u7C48\u7C4A\u7C47\u7C45\u7CEE\u7E7B\u7E7E\u7E81\u7E80\u7FBA\u7FFF\u8079\u81DB\u81D9\u820B\u8268\u8269\u8622\u85FF\u8601\u85FE\u861B\u8600\u85F6\u8604\u8609\u8605\u860C\u85FD\u8819\u8810\u8811\u8817\u8813\u8816\u8963\u8966\u89B9\u89F7\u8B60\u8B6A\u8B5D\u8B68\u8B63\u8B65\u8B67\u8B6D\u8DAE\u8E86\u8E88\u8E84\u8F59\u8F56\u8F57\u8F55\u8F58\u8F5A\u908D\u9143\u9141\u91B7\u91B5\u91B2\u91B3\u940B\u9413\u93FB\u9420\u940F\u9414\u93FE\u9415\u9410\u9428\u9419\u940D\u93F5\u9400\u93F7\u9407\u940E\u9416\u9412\u93FA\u9409\u93F8\u940A\u93FF"], + ["f540", "\u93FC\u940C\u93F6\u9411\u9406\u95DE\u95E0\u95DF\u972E\u972F\u97B9\u97BB\u97FD\u97FE\u9860\u9862\u9863\u985F\u98C1\u98C2\u9950\u994E\u9959\u994C\u994B\u9953\u9A32\u9A34\u9A31\u9A2C\u9A2A\u9A36\u9A29\u9A2E\u9A38\u9A2D\u9AC7\u9ACA\u9AC6\u9B10\u9B12\u9B11\u9C0B\u9C08\u9BF7\u9C05\u9C12\u9BF8\u9C40\u9C07\u9C0E\u9C06\u9C17\u9C14\u9C09\u9D9F\u9D99\u9DA4\u9D9D\u9D92\u9D98\u9D90\u9D9B"], + ["f5a1", "\u9DA0\u9D94\u9D9C\u9DAA\u9D97\u9DA1\u9D9A\u9DA2\u9DA8\u9D9E\u9DA3\u9DBF\u9DA9\u9D96\u9DA6\u9DA7\u9E99\u9E9B\u9E9A\u9EE5\u9EE4\u9EE7\u9EE6\u9F30\u9F2E\u9F5B\u9F60\u9F5E\u9F5D\u9F59\u9F91\u513A\u5139\u5298\u5297\u56C3\u56BD\u56BE\u5B48\u5B47\u5DCB\u5DCF\u5EF1\u61FD\u651B\u6B02\u6AFC\u6B03\u6AF8\u6B00\u7043\u7044\u704A\u7048\u7049\u7045\u7046\u721D\u721A\u7219\u737E\u7517\u766A\u77D0\u792D\u7931\u792F\u7C54\u7C53\u7CF2\u7E8A\u7E87\u7E88\u7E8B\u7E86\u7E8D\u7F4D\u7FBB\u8030\u81DD\u8618\u862A\u8626\u861F\u8623\u861C\u8619\u8627\u862E\u8621\u8620\u8629\u861E\u8625"], + ["f640", "\u8829\u881D\u881B\u8820\u8824\u881C\u882B\u884A\u896D\u8969\u896E\u896B\u89FA\u8B79\u8B78\u8B45\u8B7A\u8B7B\u8D10\u8D14\u8DAF\u8E8E\u8E8C\u8F5E\u8F5B\u8F5D\u9146\u9144\u9145\u91B9\u943F\u943B\u9436\u9429\u943D\u943C\u9430\u9439\u942A\u9437\u942C\u9440\u9431\u95E5\u95E4\u95E3\u9735\u973A\u97BF\u97E1\u9864\u98C9\u98C6\u98C0\u9958\u9956\u9A39\u9A3D\u9A46\u9A44\u9A42\u9A41\u9A3A"], + ["f6a1", "\u9A3F\u9ACD\u9B15\u9B17\u9B18\u9B16\u9B3A\u9B52\u9C2B\u9C1D\u9C1C\u9C2C\u9C23\u9C28\u9C29\u9C24\u9C21\u9DB7\u9DB6\u9DBC\u9DC1\u9DC7\u9DCA\u9DCF\u9DBE\u9DC5\u9DC3\u9DBB\u9DB5\u9DCE\u9DB9\u9DBA\u9DAC\u9DC8\u9DB1\u9DAD\u9DCC\u9DB3\u9DCD\u9DB2\u9E7A\u9E9C\u9EEB\u9EEE\u9EED\u9F1B\u9F18\u9F1A\u9F31\u9F4E\u9F65\u9F64\u9F92\u4EB9\u56C6\u56C5\u56CB\u5971\u5B4B\u5B4C\u5DD5\u5DD1\u5EF2\u6521\u6520\u6526\u6522\u6B0B\u6B08\u6B09\u6C0D\u7055\u7056\u7057\u7052\u721E\u721F\u72A9\u737F\u74D8\u74D5\u74D9\u74D7\u766D\u76AD\u7935\u79B4\u7A70\u7A71\u7C57\u7C5C\u7C59\u7C5B\u7C5A"], + ["f740", "\u7CF4\u7CF1\u7E91\u7F4F\u7F87\u81DE\u826B\u8634\u8635\u8633\u862C\u8632\u8636\u882C\u8828\u8826\u882A\u8825\u8971\u89BF\u89BE\u89FB\u8B7E\u8B84\u8B82\u8B86\u8B85\u8B7F\u8D15\u8E95\u8E94\u8E9A\u8E92\u8E90\u8E96\u8E97\u8F60\u8F62\u9147\u944C\u9450\u944A\u944B\u944F\u9447\u9445\u9448\u9449\u9446\u973F\u97E3\u986A\u9869\u98CB\u9954\u995B\u9A4E\u9A53\u9A54\u9A4C\u9A4F\u9A48\u9A4A"], + ["f7a1", "\u9A49\u9A52\u9A50\u9AD0\u9B19\u9B2B\u9B3B\u9B56\u9B55\u9C46\u9C48\u9C3F\u9C44\u9C39\u9C33\u9C41\u9C3C\u9C37\u9C34\u9C32\u9C3D\u9C36\u9DDB\u9DD2\u9DDE\u9DDA\u9DCB\u9DD0\u9DDC\u9DD1\u9DDF\u9DE9\u9DD9\u9DD8\u9DD6\u9DF5\u9DD5\u9DDD\u9EB6\u9EF0\u9F35\u9F33\u9F32\u9F42\u9F6B\u9F95\u9FA2\u513D\u5299\u58E8\u58E7\u5972\u5B4D\u5DD8\u882F\u5F4F\u6201\u6203\u6204\u6529\u6525\u6596\u66EB\u6B11\u6B12\u6B0F\u6BCA\u705B\u705A\u7222\u7382\u7381\u7383\u7670\u77D4\u7C67\u7C66\u7E95\u826C\u863A\u8640\u8639\u863C\u8631\u863B\u863E\u8830\u8832\u882E\u8833\u8976\u8974\u8973\u89FE"], + ["f840", "\u8B8C\u8B8E\u8B8B\u8B88\u8C45\u8D19\u8E98\u8F64\u8F63\u91BC\u9462\u9455\u945D\u9457\u945E\u97C4\u97C5\u9800\u9A56\u9A59\u9B1E\u9B1F\u9B20\u9C52\u9C58\u9C50\u9C4A\u9C4D\u9C4B\u9C55\u9C59\u9C4C\u9C4E\u9DFB\u9DF7\u9DEF\u9DE3\u9DEB\u9DF8\u9DE4\u9DF6\u9DE1\u9DEE\u9DE6\u9DF2\u9DF0\u9DE2\u9DEC\u9DF4\u9DF3\u9DE8\u9DED\u9EC2\u9ED0\u9EF2\u9EF3\u9F06\u9F1C\u9F38\u9F37\u9F36\u9F43\u9F4F"], + ["f8a1", "\u9F71\u9F70\u9F6E\u9F6F\u56D3\u56CD\u5B4E\u5C6D\u652D\u66ED\u66EE\u6B13\u705F\u7061\u705D\u7060\u7223\u74DB\u74E5\u77D5\u7938\u79B7\u79B6\u7C6A\u7E97\u7F89\u826D\u8643\u8838\u8837\u8835\u884B\u8B94\u8B95\u8E9E\u8E9F\u8EA0\u8E9D\u91BE\u91BD\u91C2\u946B\u9468\u9469\u96E5\u9746\u9743\u9747\u97C7\u97E5\u9A5E\u9AD5\u9B59\u9C63\u9C67\u9C66\u9C62\u9C5E\u9C60\u9E02\u9DFE\u9E07\u9E03\u9E06\u9E05\u9E00\u9E01\u9E09\u9DFF\u9DFD\u9E04\u9EA0\u9F1E\u9F46\u9F74\u9F75\u9F76\u56D4\u652E\u65B8\u6B18\u6B19\u6B17\u6B1A\u7062\u7226\u72AA\u77D8\u77D9\u7939\u7C69\u7C6B\u7CF6\u7E9A"], + ["f940", "\u7E98\u7E9B\u7E99\u81E0\u81E1\u8646\u8647\u8648\u8979\u897A\u897C\u897B\u89FF\u8B98\u8B99\u8EA5\u8EA4\u8EA3\u946E\u946D\u946F\u9471\u9473\u9749\u9872\u995F\u9C68\u9C6E\u9C6D\u9E0B\u9E0D\u9E10\u9E0F\u9E12\u9E11\u9EA1\u9EF5\u9F09\u9F47\u9F78\u9F7B\u9F7A\u9F79\u571E\u7066\u7C6F\u883C\u8DB2\u8EA6\u91C3\u9474\u9478\u9476\u9475\u9A60\u9C74\u9C73\u9C71\u9C75\u9E14\u9E13\u9EF6\u9F0A"], + ["f9a1", "\u9FA4\u7068\u7065\u7CF7\u866A\u883E\u883D\u883F\u8B9E\u8C9C\u8EA9\u8EC9\u974B\u9873\u9874\u98CC\u9961\u99AB\u9A64\u9A66\u9A67\u9B24\u9E15\u9E17\u9F48\u6207\u6B1E\u7227\u864C\u8EA8\u9482\u9480\u9481\u9A69\u9A68\u9B2E\u9E19\u7229\u864B\u8B9F\u9483\u9C79\u9EB7\u7675\u9A6B\u9C7A\u9E1D\u7069\u706A\u9EA4\u9F7E\u9F49\u9F98\u7881\u92B9\u88CF\u58BB\u6052\u7CA7\u5AFA\u2554\u2566\u2557\u2560\u256C\u2563\u255A\u2569\u255D\u2552\u2564\u2555\u255E\u256A\u2561\u2558\u2567\u255B\u2553\u2565\u2556\u255F\u256B\u2562\u2559\u2568\u255C\u2551\u2550\u256D\u256E\u2570\u256F\u2593"] + ]; + } +}); + +// node_modules/iconv-lite/encodings/tables/big5-added.json +var require_big5_added = __commonJS({ + "node_modules/iconv-lite/encodings/tables/big5-added.json"(exports2, module2) { + module2.exports = [ + ["8740", "\u43F0\u4C32\u4603\u45A6\u4578\u{27267}\u4D77\u45B3\u{27CB1}\u4CE2\u{27CC5}\u3B95\u4736\u4744\u4C47\u4C40\u{242BF}\u{23617}\u{27352}\u{26E8B}\u{270D2}\u4C57\u{2A351}\u474F\u45DA\u4C85\u{27C6C}\u4D07\u4AA4\u46A1\u{26B23}\u7225\u{25A54}\u{21A63}\u{23E06}\u{23F61}\u664D\u56FB"], + ["8767", "\u7D95\u591D\u{28BB9}\u3DF4\u9734\u{27BEF}\u5BDB\u{21D5E}\u5AA4\u3625\u{29EB0}\u5AD1\u5BB7\u5CFC\u676E\u8593\u{29945}\u7461\u749D\u3875\u{21D53}\u{2369E}\u{26021}\u3EEC"], + ["87a1", "\u{258DE}\u3AF5\u7AFC\u9F97\u{24161}\u{2890D}\u{231EA}\u{20A8A}\u{2325E}\u430A\u8484\u9F96\u942F\u4930\u8613\u5896\u974A\u9218\u79D0\u7A32\u6660\u6A29\u889D\u744C\u7BC5\u6782\u7A2C\u524F\u9046\u34E6\u73C4\u{25DB9}\u74C6\u9FC7\u57B3\u492F\u544C\u4131\u{2368E}\u5818\u7A72\u{27B65}\u8B8F\u46AE\u{26E88}\u4181\u{25D99}\u7BAE\u{224BC}\u9FC8\u{224C1}\u{224C9}\u{224CC}\u9FC9\u8504\u{235BB}\u40B4\u9FCA\u44E1\u{2ADFF}\u62C1\u706E\u9FCB"], + ["8840", "\u31C0", 4, "\u{2010C}\u31C5\u{200D1}\u{200CD}\u31C6\u31C7\u{200CB}\u{21FE8}\u31C8\u{200CA}\u31C9\u31CA\u31CB\u31CC\u{2010E}\u31CD\u31CE\u0100\xC1\u01CD\xC0\u0112\xC9\u011A\xC8\u014C\xD3\u01D1\xD2\u0FFF\xCA\u0304\u1EBE\u0FFF\xCA\u030C\u1EC0\xCA\u0101\xE1\u01CE\xE0\u0251\u0113\xE9\u011B\xE8\u012B\xED\u01D0\xEC\u014D\xF3\u01D2\xF2\u016B\xFA\u01D4\xF9\u01D6\u01D8\u01DA"], + ["88a1", "\u01DC\xFC\u0FFF\xEA\u0304\u1EBF\u0FFF\xEA\u030C\u1EC1\xEA\u0261\u23DA\u23DB"], + ["8940", "\u{2A3A9}\u{21145}"], + ["8943", "\u650A"], + ["8946", "\u4E3D\u6EDD\u9D4E\u91DF"], + ["894c", "\u{27735}\u6491\u4F1A\u4F28\u4FA8\u5156\u5174\u519C\u51E4\u52A1\u52A8\u533B\u534E\u53D1\u53D8\u56E2\u58F0\u5904\u5907\u5932\u5934\u5B66\u5B9E\u5B9F\u5C9A\u5E86\u603B\u6589\u67FE\u6804\u6865\u6D4E\u70BC\u7535\u7EA4\u7EAC\u7EBA\u7EC7\u7ECF\u7EDF\u7F06\u7F37\u827A\u82CF\u836F\u89C6\u8BBE\u8BE2\u8F66\u8F67\u8F6E"], + ["89a1", "\u7411\u7CFC\u7DCD\u6946\u7AC9\u5227"], + ["89ab", "\u918C\u78B8\u915E\u80BC"], + ["89b0", "\u8D0B\u80F6\u{209E7}"], + ["89b5", "\u809F\u9EC7\u4CCD\u9DC9\u9E0C\u4C3E\u{29DF6}\u{2700E}\u9E0A\u{2A133}\u35C1"], + ["89c1", "\u6E9A\u823E\u7519"], + ["89c5", "\u4911\u9A6C\u9A8F\u9F99\u7987\u{2846C}\u{21DCA}\u{205D0}\u{22AE6}\u4E24\u4E81\u4E80\u4E87\u4EBF\u4EEB\u4F37\u344C\u4FBD\u3E48\u5003\u5088\u347D\u3493\u34A5\u5186\u5905\u51DB\u51FC\u5205\u4E89\u5279\u5290\u5327\u35C7\u53A9\u3551\u53B0\u3553\u53C2\u5423\u356D\u3572\u3681\u5493\u54A3\u54B4\u54B9\u54D0\u54EF\u5518\u5523\u5528\u3598\u553F\u35A5\u35BF\u55D7\u35C5"], + ["8a40", "\u{27D84}\u5525"], + ["8a43", "\u{20C42}\u{20D15}\u{2512B}\u5590\u{22CC6}\u39EC\u{20341}\u8E46\u{24DB8}\u{294E5}\u4053\u{280BE}\u777A\u{22C38}\u3A34\u47D5\u{2815D}\u{269F2}\u{24DEA}\u64DD\u{20D7C}\u{20FB4}\u{20CD5}\u{210F4}\u648D\u8E7E\u{20E96}\u{20C0B}\u{20F64}\u{22CA9}\u{28256}\u{244D3}"], + ["8a64", "\u{20D46}\u{29A4D}\u{280E9}\u47F4\u{24EA7}\u{22CC2}\u9AB2\u3A67\u{295F4}\u3FED\u3506\u{252C7}\u{297D4}\u{278C8}\u{22D44}\u9D6E\u9815"], + ["8a76", "\u43D9\u{260A5}\u64B4\u54E3\u{22D4C}\u{22BCA}\u{21077}\u39FB\u{2106F}"], + ["8aa1", "\u{266DA}\u{26716}\u{279A0}\u64EA\u{25052}\u{20C43}\u8E68\u{221A1}\u{28B4C}\u{20731}"], + ["8aac", "\u480B\u{201A9}\u3FFA\u5873\u{22D8D}"], + ["8ab2", "\u{245C8}\u{204FC}\u{26097}\u{20F4C}\u{20D96}\u5579\u40BB\u43BA"], + ["8abb", "\u4AB4\u{22A66}\u{2109D}\u81AA\u98F5\u{20D9C}\u6379\u39FE\u{22775}\u8DC0\u56A1\u647C\u3E43"], + ["8ac9", "\u{2A601}\u{20E09}\u{22ACF}\u{22CC9}"], + ["8ace", "\u{210C8}\u{239C2}\u3992\u3A06\u{2829B}\u3578\u{25E49}\u{220C7}\u5652\u{20F31}\u{22CB2}\u{29720}\u34BC\u6C3D\u{24E3B}"], + ["8adf", "\u{27574}\u{22E8B}\u{22208}\u{2A65B}\u{28CCD}\u{20E7A}\u{20C34}\u{2681C}\u7F93\u{210CF}\u{22803}\u{22939}\u35FB\u{251E3}\u{20E8C}\u{20F8D}\u{20EAA}\u3F93\u{20F30}\u{20D47}\u{2114F}\u{20E4C}"], + ["8af6", "\u{20EAB}\u{20BA9}\u{20D48}\u{210C0}\u{2113D}\u3FF9\u{22696}\u6432\u{20FAD}"], + ["8b40", "\u{233F4}\u{27639}\u{22BCE}\u{20D7E}\u{20D7F}\u{22C51}\u{22C55}\u3A18\u{20E98}\u{210C7}\u{20F2E}\u{2A632}\u{26B50}\u{28CD2}\u{28D99}\u{28CCA}\u95AA\u54CC\u82C4\u55B9"], + ["8b55", "\u{29EC3}\u9C26\u9AB6\u{2775E}\u{22DEE}\u7140\u816D\u80EC\u5C1C\u{26572}\u8134\u3797\u535F\u{280BD}\u91B6\u{20EFA}\u{20E0F}\u{20E77}\u{20EFB}\u35DD\u{24DEB}\u3609\u{20CD6}\u56AF\u{227B5}\u{210C9}\u{20E10}\u{20E78}\u{21078}\u{21148}\u{28207}\u{21455}\u{20E79}\u{24E50}\u{22DA4}\u5A54\u{2101D}\u{2101E}\u{210F5}\u{210F6}\u579C\u{20E11}"], + ["8ba1", "\u{27694}\u{282CD}\u{20FB5}\u{20E7B}\u{2517E}\u3703\u{20FB6}\u{21180}\u{252D8}\u{2A2BD}\u{249DA}\u{2183A}\u{24177}\u{2827C}\u5899\u5268\u361A\u{2573D}\u7BB2\u5B68\u4800\u4B2C\u9F27\u49E7\u9C1F\u9B8D\u{25B74}\u{2313D}\u55FB\u35F2\u5689\u4E28\u5902\u{21BC1}\u{2F878}\u9751\u{20086}\u4E5B\u4EBB\u353E\u5C23\u5F51\u5FC4\u38FA\u624C\u6535\u6B7A\u6C35\u6C3A\u706C\u722B\u4E2C\u72AD\u{248E9}\u7F52\u793B\u7CF9\u7F53\u{2626A}\u34C1"], + ["8bde", "\u{2634B}\u8002\u8080\u{26612}\u{26951}\u535D\u8864\u89C1\u{278B2}\u8BA0\u8D1D\u9485\u9578\u957F\u95E8\u{28E0F}\u97E6\u9875\u98CE\u98DE\u9963\u{29810}\u9C7C\u9E1F\u9EC4\u6B6F\uF907\u4E37\u{20087}\u961D\u6237\u94A2"], + ["8c40", "\u503B\u6DFE\u{29C73}\u9FA6\u3DC9\u888F\u{2414E}\u7077\u5CF5\u4B20\u{251CD}\u3559\u{25D30}\u6122\u{28A32}\u8FA7\u91F6\u7191\u6719\u73BA\u{23281}\u{2A107}\u3C8B\u{21980}\u4B10\u78E4\u7402\u51AE\u{2870F}\u4009\u6A63\u{2A2BA}\u4223\u860F\u{20A6F}\u7A2A\u{29947}\u{28AEA}\u9755\u704D\u5324\u{2207E}\u93F4\u76D9\u{289E3}\u9FA7\u77DD\u4EA3\u4FF0\u50BC\u4E2F\u4F17\u9FA8\u5434\u7D8B\u5892\u58D0\u{21DB6}\u5E92\u5E99\u5FC2\u{22712}\u658B"], + ["8ca1", "\u{233F9}\u6919\u6A43\u{23C63}\u6CFF"], + ["8ca7", "\u7200\u{24505}\u738C\u3EDB\u{24A13}\u5B15\u74B9\u8B83\u{25CA4}\u{25695}\u7A93\u7BEC\u7CC3\u7E6C\u82F8\u8597\u9FA9\u8890\u9FAA\u8EB9\u9FAB\u8FCF\u855F\u99E0\u9221\u9FAC\u{28DB9}\u{2143F}\u4071\u42A2\u5A1A"], + ["8cc9", "\u9868\u676B\u4276\u573D"], + ["8cce", "\u85D6\u{2497B}\u82BF\u{2710D}\u4C81\u{26D74}\u5D7B\u{26B15}\u{26FBE}\u9FAD\u9FAE\u5B96\u9FAF\u66E7\u7E5B\u6E57\u79CA\u3D88\u44C3\u{23256}\u{22796}\u439A\u4536"], + ["8ce6", "\u5CD5\u{23B1A}\u8AF9\u5C78\u3D12\u{23551}\u5D78\u9FB2\u7157\u4558\u{240EC}\u{21E23}\u4C77\u3978\u344A\u{201A4}\u{26C41}\u8ACC\u4FB4\u{20239}\u59BF\u816C\u9856\u{298FA}\u5F3B"], + ["8d40", "\u{20B9F}"], + ["8d42", "\u{221C1}\u{2896D}\u4102\u46BB\u{29079}\u3F07\u9FB3\u{2A1B5}\u40F8\u37D6\u46F7\u{26C46}\u417C\u{286B2}\u{273FF}\u456D\u38D4\u{2549A}\u4561\u451B\u4D89\u4C7B\u4D76\u45EA\u3FC8\u{24B0F}\u3661\u44DE\u44BD\u41ED\u5D3E\u5D48\u5D56\u3DFC\u380F\u5DA4\u5DB9\u3820\u3838\u5E42\u5EBD\u5F25\u5F83\u3908\u3914\u393F\u394D\u60D7\u613D\u5CE5\u3989\u61B7\u61B9\u61CF\u39B8\u622C\u6290\u62E5\u6318\u39F8\u56B1"], + ["8da1", "\u3A03\u63E2\u63FB\u6407\u645A\u3A4B\u64C0\u5D15\u5621\u9F9F\u3A97\u6586\u3ABD\u65FF\u6653\u3AF2\u6692\u3B22\u6716\u3B42\u67A4\u6800\u3B58\u684A\u6884\u3B72\u3B71\u3B7B\u6909\u6943\u725C\u6964\u699F\u6985\u3BBC\u69D6\u3BDD\u6A65\u6A74\u6A71\u6A82\u3BEC\u6A99\u3BF2\u6AAB\u6AB5\u6AD4\u6AF6\u6B81\u6BC1\u6BEA\u6C75\u6CAA\u3CCB\u6D02\u6D06\u6D26\u6D81\u3CEF\u6DA4\u6DB1\u6E15\u6E18\u6E29\u6E86\u{289C0}\u6EBB\u6EE2\u6EDA\u9F7F\u6EE8\u6EE9\u6F24\u6F34\u3D46\u{23F41}\u6F81\u6FBE\u3D6A\u3D75\u71B7\u5C99\u3D8A\u702C\u3D91\u7050\u7054\u706F\u707F\u7089\u{20325}\u43C1\u35F1\u{20ED8}"], + ["8e40", "\u{23ED7}\u57BE\u{26ED3}\u713E\u{257E0}\u364E\u69A2\u{28BE9}\u5B74\u7A49\u{258E1}\u{294D9}\u7A65\u7A7D\u{259AC}\u7ABB\u7AB0\u7AC2\u7AC3\u71D1\u{2648D}\u41CA\u7ADA\u7ADD\u7AEA\u41EF\u54B2\u{25C01}\u7B0B\u7B55\u7B29\u{2530E}\u{25CFE}\u7BA2\u7B6F\u839C\u{25BB4}\u{26C7F}\u7BD0\u8421\u7B92\u7BB8\u{25D20}\u3DAD\u{25C65}\u8492\u7BFA\u7C06\u7C35\u{25CC1}\u7C44\u7C83\u{24882}\u7CA6\u667D\u{24578}\u7CC9\u7CC7\u7CE6\u7C74\u7CF3\u7CF5\u7CCE"], + ["8ea1", "\u7E67\u451D\u{26E44}\u7D5D\u{26ED6}\u748D\u7D89\u7DAB\u7135\u7DB3\u7DD2\u{24057}\u{26029}\u7DE4\u3D13\u7DF5\u{217F9}\u7DE5\u{2836D}\u7E1D\u{26121}\u{2615A}\u7E6E\u7E92\u432B\u946C\u7E27\u7F40\u7F41\u7F47\u7936\u{262D0}\u99E1\u7F97\u{26351}\u7FA3\u{21661}\u{20068}\u455C\u{23766}\u4503\u{2833A}\u7FFA\u{26489}\u8005\u8008\u801D\u8028\u802F\u{2A087}\u{26CC3}\u803B\u803C\u8061\u{22714}\u4989\u{26626}\u{23DE3}\u{266E8}\u6725\u80A7\u{28A48}\u8107\u811A\u58B0\u{226F6}\u6C7F\u{26498}\u{24FB8}\u64E7\u{2148A}\u8218\u{2185E}\u6A53\u{24A65}\u{24A95}\u447A\u8229\u{20B0D}\u{26A52}\u{23D7E}\u4FF9\u{214FD}\u84E2\u8362\u{26B0A}\u{249A7}\u{23530}\u{21773}\u{23DF8}\u82AA\u691B\u{2F994}\u41DB"], + ["8f40", "\u854B\u82D0\u831A\u{20E16}\u{217B4}\u36C1\u{2317D}\u{2355A}\u827B\u82E2\u8318\u{23E8B}\u{26DA3}\u{26B05}\u{26B97}\u{235CE}\u3DBF\u831D\u55EC\u8385\u450B\u{26DA5}\u83AC\u83C1\u83D3\u347E\u{26ED4}\u6A57\u855A\u3496\u{26E42}\u{22EEF}\u8458\u{25BE4}\u8471\u3DD3\u44E4\u6AA7\u844A\u{23CB5}\u7958\u84A8\u{26B96}\u{26E77}\u{26E43}\u84DE\u840F\u8391\u44A0\u8493\u84E4\u{25C91}\u4240\u{25CC0}\u4543\u8534\u5AF2\u{26E99}\u4527\u8573\u4516\u67BF\u8616"], + ["8fa1", "\u{28625}\u{2863B}\u85C1\u{27088}\u8602\u{21582}\u{270CD}\u{2F9B2}\u456A\u8628\u3648\u{218A2}\u53F7\u{2739A}\u867E\u8771\u{2A0F8}\u87EE\u{22C27}\u87B1\u87DA\u880F\u5661\u866C\u6856\u460F\u8845\u8846\u{275E0}\u{23DB9}\u{275E4}\u885E\u889C\u465B\u88B4\u88B5\u63C1\u88C5\u7777\u{2770F}\u8987\u898A\u89A6\u89A9\u89A7\u89BC\u{28A25}\u89E7\u{27924}\u{27ABD}\u8A9C\u7793\u91FE\u8A90\u{27A59}\u7AE9\u{27B3A}\u{23F8F}\u4713\u{27B38}\u717C\u8B0C\u8B1F\u{25430}\u{25565}\u8B3F\u8B4C\u8B4D\u8AA9\u{24A7A}\u8B90\u8B9B\u8AAF\u{216DF}\u4615\u884F\u8C9B\u{27D54}\u{27D8F}\u{2F9D4}\u3725\u{27D53}\u8CD6\u{27D98}\u{27DBD}\u8D12\u8D03\u{21910}\u8CDB\u705C\u8D11\u{24CC9}\u3ED0\u8D77"], + ["9040", "\u8DA9\u{28002}\u{21014}\u{2498A}\u3B7C\u{281BC}\u{2710C}\u7AE7\u8EAD\u8EB6\u8EC3\u92D4\u8F19\u8F2D\u{28365}\u{28412}\u8FA5\u9303\u{2A29F}\u{20A50}\u8FB3\u492A\u{289DE}\u{2853D}\u{23DBB}\u5EF8\u{23262}\u8FF9\u{2A014}\u{286BC}\u{28501}\u{22325}\u3980\u{26ED7}\u9037\u{2853C}\u{27ABE}\u9061\u{2856C}\u{2860B}\u90A8\u{28713}\u90C4\u{286E6}\u90AE\u90FD\u9167\u3AF0\u91A9\u91C4\u7CAC\u{28933}\u{21E89}\u920E\u6C9F\u9241\u9262\u{255B9}\u92B9\u{28AC6}\u{23C9B}\u{28B0C}\u{255DB}"], + ["90a1", "\u{20D31}\u932C\u936B\u{28AE1}\u{28BEB}\u708F\u5AC3\u{28AE2}\u{28AE5}\u4965\u9244\u{28BEC}\u{28C39}\u{28BFF}\u9373\u945B\u8EBC\u9585\u95A6\u9426\u95A0\u6FF6\u42B9\u{2267A}\u{286D8}\u{2127C}\u{23E2E}\u49DF\u6C1C\u967B\u9696\u416C\u96A3\u{26ED5}\u61DA\u96B6\u78F5\u{28AE0}\u96BD\u53CC\u49A1\u{26CB8}\u{20274}\u{26410}\u{290AF}\u{290E5}\u{24AD1}\u{21915}\u{2330A}\u9731\u8642\u9736\u4A0F\u453D\u4585\u{24AE9}\u7075\u5B41\u971B\u975C\u{291D5}\u9757\u5B4A\u{291EB}\u975F\u9425\u50D0\u{230B7}\u{230BC}\u9789\u979F\u97B1\u97BE\u97C0\u97D2\u97E0\u{2546C}\u97EE\u741C\u{29433}\u97FF\u97F5\u{2941D}\u{2797A}\u4AD1\u9834\u9833\u984B\u9866\u3B0E\u{27175}\u3D51\u{20630}\u{2415C}"], + ["9140", "\u{25706}\u98CA\u98B7\u98C8\u98C7\u4AFF\u{26D27}\u{216D3}\u55B0\u98E1\u98E6\u98EC\u9378\u9939\u{24A29}\u4B72\u{29857}\u{29905}\u99F5\u9A0C\u9A3B\u9A10\u9A58\u{25725}\u36C4\u{290B1}\u{29BD5}\u9AE0\u9AE2\u{29B05}\u9AF4\u4C0E\u9B14\u9B2D\u{28600}\u5034\u9B34\u{269A8}\u38C3\u{2307D}\u9B50\u9B40\u{29D3E}\u5A45\u{21863}\u9B8E\u{2424B}\u9C02\u9BFF\u9C0C\u{29E68}\u9DD4\u{29FB7}\u{2A192}\u{2A1AB}\u{2A0E1}\u{2A123}\u{2A1DF}\u9D7E\u9D83\u{2A134}\u9E0E\u6888"], + ["91a1", "\u9DC4\u{2215B}\u{2A193}\u{2A220}\u{2193B}\u{2A233}\u9D39\u{2A0B9}\u{2A2B4}\u9E90\u9E95\u9E9E\u9EA2\u4D34\u9EAA\u9EAF\u{24364}\u9EC1\u3B60\u39E5\u3D1D\u4F32\u37BE\u{28C2B}\u9F02\u9F08\u4B96\u9424\u{26DA2}\u9F17\u9F16\u9F39\u569F\u568A\u9F45\u99B8\u{2908B}\u97F2\u847F\u9F62\u9F69\u7ADC\u9F8E\u7216\u4BBE\u{24975}\u{249BB}\u7177\u{249F8}\u{24348}\u{24A51}\u739E\u{28BDA}\u{218FA}\u799F\u{2897E}\u{28E36}\u9369\u93F3\u{28A44}\u92EC\u9381\u93CB\u{2896C}\u{244B9}\u7217\u3EEB\u7772\u7A43\u70D0\u{24473}\u{243F8}\u717E\u{217EF}\u70A3\u{218BE}\u{23599}\u3EC7\u{21885}\u{2542F}\u{217F8}\u3722\u{216FB}\u{21839}\u36E1\u{21774}\u{218D1}\u{25F4B}\u3723\u{216C0}\u575B\u{24A25}\u{213FE}\u{212A8}"], + ["9240", "\u{213C6}\u{214B6}\u8503\u{236A6}\u8503\u8455\u{24994}\u{27165}\u{23E31}\u{2555C}\u{23EFB}\u{27052}\u44F4\u{236EE}\u{2999D}\u{26F26}\u67F9\u3733\u3C15\u3DE7\u586C\u{21922}\u6810\u4057\u{2373F}\u{240E1}\u{2408B}\u{2410F}\u{26C21}\u54CB\u569E\u{266B1}\u5692\u{20FDF}\u{20BA8}\u{20E0D}\u93C6\u{28B13}\u939C\u4EF8\u512B\u3819\u{24436}\u4EBC\u{20465}\u{2037F}\u4F4B\u4F8A\u{25651}\u5A68\u{201AB}\u{203CB}\u3999\u{2030A}\u{20414}\u3435\u4F29\u{202C0}\u{28EB3}\u{20275}\u8ADA\u{2020C}\u4E98"], + ["92a1", "\u50CD\u510D\u4FA2\u4F03\u{24A0E}\u{23E8A}\u4F42\u502E\u506C\u5081\u4FCC\u4FE5\u5058\u50FC\u5159\u515B\u515D\u515E\u6E76\u{23595}\u{23E39}\u{23EBF}\u6D72\u{21884}\u{23E89}\u51A8\u51C3\u{205E0}\u44DD\u{204A3}\u{20492}\u{20491}\u8D7A\u{28A9C}\u{2070E}\u5259\u52A4\u{20873}\u52E1\u936E\u467A\u718C\u{2438C}\u{20C20}\u{249AC}\u{210E4}\u69D1\u{20E1D}\u7479\u3EDE\u7499\u7414\u7456\u7398\u4B8E\u{24ABC}\u{2408D}\u53D0\u3584\u720F\u{240C9}\u55B4\u{20345}\u54CD\u{20BC6}\u571D\u925D\u96F4\u9366\u57DD\u578D\u577F\u363E\u58CB\u5A99\u{28A46}\u{216FA}\u{2176F}\u{21710}\u5A2C\u59B8\u928F\u5A7E\u5ACF\u5A12\u{25946}\u{219F3}\u{21861}\u{24295}\u36F5\u6D05\u7443\u5A21\u{25E83}"], + ["9340", "\u5A81\u{28BD7}\u{20413}\u93E0\u748C\u{21303}\u7105\u4972\u9408\u{289FB}\u93BD\u37A0\u5C1E\u5C9E\u5E5E\u5E48\u{21996}\u{2197C}\u{23AEE}\u5ECD\u5B4F\u{21903}\u{21904}\u3701\u{218A0}\u36DD\u{216FE}\u36D3\u812A\u{28A47}\u{21DBA}\u{23472}\u{289A8}\u5F0C\u5F0E\u{21927}\u{217AB}\u5A6B\u{2173B}\u5B44\u8614\u{275FD}\u8860\u607E\u{22860}\u{2262B}\u5FDB\u3EB8\u{225AF}\u{225BE}\u{29088}\u{26F73}\u61C0\u{2003E}\u{20046}\u{2261B}\u6199\u6198\u6075\u{22C9B}\u{22D07}\u{246D4}\u{2914D}"], + ["93a1", "\u6471\u{24665}\u{22B6A}\u3A29\u{22B22}\u{23450}\u{298EA}\u{22E78}\u6337\u{2A45B}\u64B6\u6331\u63D1\u{249E3}\u{22D67}\u62A4\u{22CA1}\u643B\u656B\u6972\u3BF4\u{2308E}\u{232AD}\u{24989}\u{232AB}\u550D\u{232E0}\u{218D9}\u{2943F}\u66CE\u{23289}\u{231B3}\u3AE0\u4190\u{25584}\u{28B22}\u{2558F}\u{216FC}\u{2555B}\u{25425}\u78EE\u{23103}\u{2182A}\u{23234}\u3464\u{2320F}\u{23182}\u{242C9}\u668E\u{26D24}\u666B\u4B93\u6630\u{27870}\u{21DEB}\u6663\u{232D2}\u{232E1}\u661E\u{25872}\u38D1\u{2383A}\u{237BC}\u3B99\u{237A2}\u{233FE}\u74D0\u3B96\u678F\u{2462A}\u68B6\u681E\u3BC4\u6ABE\u3863\u{237D5}\u{24487}\u6A33\u6A52\u6AC9\u6B05\u{21912}\u6511\u6898\u6A4C\u3BD7\u6A7A\u6B57\u{23FC0}\u{23C9A}\u93A0\u92F2\u{28BEA}\u{28ACB}"], + ["9440", "\u9289\u{2801E}\u{289DC}\u9467\u6DA5\u6F0B\u{249EC}\u6D67\u{23F7F}\u3D8F\u6E04\u{2403C}\u5A3D\u6E0A\u5847\u6D24\u7842\u713B\u{2431A}\u{24276}\u70F1\u7250\u7287\u7294\u{2478F}\u{24725}\u5179\u{24AA4}\u{205EB}\u747A\u{23EF8}\u{2365F}\u{24A4A}\u{24917}\u{25FE1}\u3F06\u3EB1\u{24ADF}\u{28C23}\u{23F35}\u60A7\u3EF3\u74CC\u743C\u9387\u7437\u449F\u{26DEA}\u4551\u7583\u3F63\u{24CD9}\u{24D06}\u3F58\u7555\u7673\u{2A5C6}\u3B19\u7468\u{28ACC}\u{249AB}\u{2498E}\u3AFB"], + ["94a1", "\u3DCD\u{24A4E}\u3EFF\u{249C5}\u{248F3}\u91FA\u5732\u9342\u{28AE3}\u{21864}\u50DF\u{25221}\u{251E7}\u7778\u{23232}\u770E\u770F\u777B\u{24697}\u{23781}\u3A5E\u{248F0}\u7438\u749B\u3EBF\u{24ABA}\u{24AC7}\u40C8\u{24A96}\u{261AE}\u9307\u{25581}\u781E\u788D\u7888\u78D2\u73D0\u7959\u{27741}\u{256E3}\u410E\u799B\u8496\u79A5\u6A2D\u{23EFA}\u7A3A\u79F4\u416E\u{216E6}\u4132\u9235\u79F1\u{20D4C}\u{2498C}\u{20299}\u{23DBA}\u{2176E}\u3597\u556B\u3570\u36AA\u{201D4}\u{20C0D}\u7AE2\u5A59\u{226F5}\u{25AAF}\u{25A9C}\u5A0D\u{2025B}\u78F0\u5A2A\u{25BC6}\u7AFE\u41F9\u7C5D\u7C6D\u4211\u{25BB3}\u{25EBC}\u{25EA6}\u7CCD\u{249F9}\u{217B0}\u7C8E\u7C7C\u7CAE\u6AB2\u7DDC\u7E07\u7DD3\u7F4E\u{26261}"], + ["9540", "\u{2615C}\u{27B48}\u7D97\u{25E82}\u426A\u{26B75}\u{20916}\u67D6\u{2004E}\u{235CF}\u57C4\u{26412}\u{263F8}\u{24962}\u7FDD\u7B27\u{2082C}\u{25AE9}\u{25D43}\u7B0C\u{25E0E}\u99E6\u8645\u9A63\u6A1C\u{2343F}\u39E2\u{249F7}\u{265AD}\u9A1F\u{265A0}\u8480\u{27127}\u{26CD1}\u44EA\u8137\u4402\u80C6\u8109\u8142\u{267B4}\u98C3\u{26A42}\u8262\u8265\u{26A51}\u8453\u{26DA7}\u8610\u{2721B}\u5A86\u417F\u{21840}\u5B2B\u{218A1}\u5AE4\u{218D8}\u86A0\u{2F9BC}\u{23D8F}\u882D\u{27422}\u5A02"], + ["95a1", "\u886E\u4F45\u8887\u88BF\u88E6\u8965\u894D\u{25683}\u8954\u{27785}\u{27784}\u{28BF5}\u{28BD9}\u{28B9C}\u{289F9}\u3EAD\u84A3\u46F5\u46CF\u37F2\u8A3D\u8A1C\u{29448}\u5F4D\u922B\u{24284}\u65D4\u7129\u70C4\u{21845}\u9D6D\u8C9F\u8CE9\u{27DDC}\u599A\u77C3\u59F0\u436E\u36D4\u8E2A\u8EA7\u{24C09}\u8F30\u8F4A\u42F4\u6C58\u6FBB\u{22321}\u489B\u6F79\u6E8B\u{217DA}\u9BE9\u36B5\u{2492F}\u90BB\u9097\u5571\u4906\u91BB\u9404\u{28A4B}\u4062\u{28AFC}\u9427\u{28C1D}\u{28C3B}\u84E5\u8A2B\u9599\u95A7\u9597\u9596\u{28D34}\u7445\u3EC2\u{248FF}\u{24A42}\u{243EA}\u3EE7\u{23225}\u968F\u{28EE7}\u{28E66}\u{28E65}\u3ECC\u{249ED}\u{24A78}\u{23FEE}\u7412\u746B\u3EFC\u9741\u{290B0}"], + ["9640", "\u6847\u4A1D\u{29093}\u{257DF}\u975D\u9368\u{28989}\u{28C26}\u{28B2F}\u{263BE}\u92BA\u5B11\u8B69\u493C\u73F9\u{2421B}\u979B\u9771\u9938\u{20F26}\u5DC1\u{28BC5}\u{24AB2}\u981F\u{294DA}\u92F6\u{295D7}\u91E5\u44C0\u{28B50}\u{24A67}\u{28B64}\u98DC\u{28A45}\u3F00\u922A\u4925\u8414\u993B\u994D\u{27B06}\u3DFD\u999B\u4B6F\u99AA\u9A5C\u{28B65}\u{258C8}\u6A8F\u9A21\u5AFE\u9A2F\u{298F1}\u4B90\u{29948}\u99BC\u4BBD\u4B97\u937D\u5872\u{21302}\u5822\u{249B8}"], + ["96a1", "\u{214E8}\u7844\u{2271F}\u{23DB8}\u68C5\u3D7D\u9458\u3927\u6150\u{22781}\u{2296B}\u6107\u9C4F\u9C53\u9C7B\u9C35\u9C10\u9B7F\u9BCF\u{29E2D}\u9B9F\u{2A1F5}\u{2A0FE}\u9D21\u4CAE\u{24104}\u9E18\u4CB0\u9D0C\u{2A1B4}\u{2A0ED}\u{2A0F3}\u{2992F}\u9DA5\u84BD\u{26E12}\u{26FDF}\u{26B82}\u85FC\u4533\u{26DA4}\u{26E84}\u{26DF0}\u8420\u85EE\u{26E00}\u{237D7}\u{26064}\u79E2\u{2359C}\u{23640}\u492D\u{249DE}\u3D62\u93DB\u92BE\u9348\u{202BF}\u78B9\u9277\u944D\u4FE4\u3440\u9064\u{2555D}\u783D\u7854\u78B6\u784B\u{21757}\u{231C9}\u{24941}\u369A\u4F72\u6FDA\u6FD9\u701E\u701E\u5414\u{241B5}\u57BB\u58F3\u578A\u9D16\u57D7\u7134\u34AF\u{241AC}\u71EB\u{26C40}\u{24F97}\u5B28\u{217B5}\u{28A49}"], + ["9740", "\u610C\u5ACE\u5A0B\u42BC\u{24488}\u372C\u4B7B\u{289FC}\u93BB\u93B8\u{218D6}\u{20F1D}\u8472\u{26CC0}\u{21413}\u{242FA}\u{22C26}\u{243C1}\u5994\u{23DB7}\u{26741}\u7DA8\u{2615B}\u{260A4}\u{249B9}\u{2498B}\u{289FA}\u92E5\u73E2\u3EE9\u74B4\u{28B63}\u{2189F}\u3EE1\u{24AB3}\u6AD8\u73F3\u73FB\u3ED6\u{24A3E}\u{24A94}\u{217D9}\u{24A66}\u{203A7}\u{21424}\u{249E5}\u7448\u{24916}\u70A5\u{24976}\u9284\u73E6\u935F\u{204FE}\u9331\u{28ACE}\u{28A16}\u9386\u{28BE7}\u{255D5}\u4935\u{28A82}\u716B"], + ["97a1", "\u{24943}\u{20CFF}\u56A4\u{2061A}\u{20BEB}\u{20CB8}\u5502\u79C4\u{217FA}\u7DFE\u{216C2}\u{24A50}\u{21852}\u452E\u9401\u370A\u{28AC0}\u{249AD}\u59B0\u{218BF}\u{21883}\u{27484}\u5AA1\u36E2\u{23D5B}\u36B0\u925F\u5A79\u{28A81}\u{21862}\u9374\u3CCD\u{20AB4}\u4A96\u398A\u50F4\u3D69\u3D4C\u{2139C}\u7175\u42FB\u{28218}\u6E0F\u{290E4}\u44EB\u6D57\u{27E4F}\u7067\u6CAF\u3CD6\u{23FED}\u{23E2D}\u6E02\u6F0C\u3D6F\u{203F5}\u7551\u36BC\u34C8\u4680\u3EDA\u4871\u59C4\u926E\u493E\u8F41\u{28C1C}\u{26BC0}\u5812\u57C8\u36D6\u{21452}\u70FE\u{24362}\u{24A71}\u{22FE3}\u{212B0}\u{223BD}\u68B9\u6967\u{21398}\u{234E5}\u{27BF4}\u{236DF}\u{28A83}\u{237D6}\u{233FA}\u{24C9F}\u6A1A\u{236AD}\u{26CB7}\u843E\u44DF\u44CE"], + ["9840", "\u{26D26}\u{26D51}\u{26C82}\u{26FDE}\u6F17\u{27109}\u833D\u{2173A}\u83ED\u{26C80}\u{27053}\u{217DB}\u5989\u5A82\u{217B3}\u5A61\u5A71\u{21905}\u{241FC}\u372D\u59EF\u{2173C}\u36C7\u718E\u9390\u669A\u{242A5}\u5A6E\u5A2B\u{24293}\u6A2B\u{23EF9}\u{27736}\u{2445B}\u{242CA}\u711D\u{24259}\u{289E1}\u4FB0\u{26D28}\u5CC2\u{244CE}\u{27E4D}\u{243BD}\u6A0C\u{24256}\u{21304}\u70A6\u7133\u{243E9}\u3DA5\u6CDF\u{2F825}\u{24A4F}\u7E65\u59EB\u5D2F\u3DF3\u5F5C\u{24A5D}\u{217DF}\u7DA4\u8426"], + ["98a1", "\u5485\u{23AFA}\u{23300}\u{20214}\u577E\u{208D5}\u{20619}\u3FE5\u{21F9E}\u{2A2B6}\u7003\u{2915B}\u5D70\u738F\u7CD3\u{28A59}\u{29420}\u4FC8\u7FE7\u72CD\u7310\u{27AF4}\u7338\u7339\u{256F6}\u7341\u7348\u3EA9\u{27B18}\u906C\u71F5\u{248F2}\u73E1\u81F6\u3ECA\u770C\u3ED1\u6CA2\u56FD\u7419\u741E\u741F\u3EE2\u3EF0\u3EF4\u3EFA\u74D3\u3F0E\u3F53\u7542\u756D\u7572\u758D\u3F7C\u75C8\u75DC\u3FC0\u764D\u3FD7\u7674\u3FDC\u767A\u{24F5C}\u7188\u5623\u8980\u5869\u401D\u7743\u4039\u6761\u4045\u35DB\u7798\u406A\u406F\u5C5E\u77BE\u77CB\u58F2\u7818\u70B9\u781C\u40A8\u7839\u7847\u7851\u7866\u8448\u{25535}\u7933\u6803\u7932\u4103"], + ["9940", "\u4109\u7991\u7999\u8FBB\u7A06\u8FBC\u4167\u7A91\u41B2\u7ABC\u8279\u41C4\u7ACF\u7ADB\u41CF\u4E21\u7B62\u7B6C\u7B7B\u7C12\u7C1B\u4260\u427A\u7C7B\u7C9C\u428C\u7CB8\u4294\u7CED\u8F93\u70C0\u{20CCF}\u7DCF\u7DD4\u7DD0\u7DFD\u7FAE\u7FB4\u729F\u4397\u8020\u8025\u7B39\u802E\u8031\u8054\u3DCC\u57B4\u70A0\u80B7\u80E9\u43ED\u810C\u732A\u810E\u8112\u7560\u8114\u4401\u3B39\u8156\u8159\u815A"], + ["99a1", "\u4413\u583A\u817C\u8184\u4425\u8193\u442D\u81A5\u57EF\u81C1\u81E4\u8254\u448F\u82A6\u8276\u82CA\u82D8\u82FF\u44B0\u8357\u9669\u698A\u8405\u70F5\u8464\u60E3\u8488\u4504\u84BE\u84E1\u84F8\u8510\u8538\u8552\u453B\u856F\u8570\u85E0\u4577\u8672\u8692\u86B2\u86EF\u9645\u878B\u4606\u4617\u88AE\u88FF\u8924\u8947\u8991\u{27967}\u8A29\u8A38\u8A94\u8AB4\u8C51\u8CD4\u8CF2\u8D1C\u4798\u585F\u8DC3\u47ED\u4EEE\u8E3A\u55D8\u5754\u8E71\u55F5\u8EB0\u4837\u8ECE\u8EE2\u8EE4\u8EED\u8EF2\u8FB7\u8FC1\u8FCA\u8FCC\u9033\u99C4\u48AD\u98E0\u9213\u491E\u9228\u9258\u926B\u92B1\u92AE\u92BF"], + ["9a40", "\u92E3\u92EB\u92F3\u92F4\u92FD\u9343\u9384\u93AD\u4945\u4951\u9EBF\u9417\u5301\u941D\u942D\u943E\u496A\u9454\u9479\u952D\u95A2\u49A7\u95F4\u9633\u49E5\u67A0\u4A24\u9740\u4A35\u97B2\u97C2\u5654\u4AE4\u60E8\u98B9\u4B19\u98F1\u5844\u990E\u9919\u51B4\u991C\u9937\u9942\u995D\u9962\u4B70\u99C5\u4B9D\u9A3C\u9B0F\u7A83\u9B69\u9B81\u9BDD\u9BF1\u9BF4\u4C6D\u9C20\u376F\u{21BC2}\u9D49\u9C3A"], + ["9aa1", "\u9EFE\u5650\u9D93\u9DBD\u9DC0\u9DFC\u94F6\u8FB6\u9E7B\u9EAC\u9EB1\u9EBD\u9EC6\u94DC\u9EE2\u9EF1\u9EF8\u7AC8\u9F44\u{20094}\u{202B7}\u{203A0}\u691A\u94C3\u59AC\u{204D7}\u5840\u94C1\u37B9\u{205D5}\u{20615}\u{20676}\u{216BA}\u5757\u7173\u{20AC2}\u{20ACD}\u{20BBF}\u546A\u{2F83B}\u{20BCB}\u549E\u{20BFB}\u{20C3B}\u{20C53}\u{20C65}\u{20C7C}\u60E7\u{20C8D}\u567A\u{20CB5}\u{20CDD}\u{20CED}\u{20D6F}\u{20DB2}\u{20DC8}\u6955\u9C2F\u87A5\u{20E04}\u{20E0E}\u{20ED7}\u{20F90}\u{20F2D}\u{20E73}\u5C20\u{20FBC}\u5E0B\u{2105C}\u{2104F}\u{21076}\u671E\u{2107B}\u{21088}\u{21096}\u3647\u{210BF}\u{210D3}\u{2112F}\u{2113B}\u5364\u84AD\u{212E3}\u{21375}\u{21336}\u8B81\u{21577}\u{21619}\u{217C3}\u{217C7}\u4E78\u70BB\u{2182D}\u{2196A}"], + ["9b40", "\u{21A2D}\u{21A45}\u{21C2A}\u{21C70}\u{21CAC}\u{21EC8}\u62C3\u{21ED5}\u{21F15}\u7198\u6855\u{22045}\u69E9\u36C8\u{2227C}\u{223D7}\u{223FA}\u{2272A}\u{22871}\u{2294F}\u82FD\u{22967}\u{22993}\u{22AD5}\u89A5\u{22AE8}\u8FA0\u{22B0E}\u97B8\u{22B3F}\u9847\u9ABD\u{22C4C}"], + ["9b62", "\u{22C88}\u{22CB7}\u{25BE8}\u{22D08}\u{22D12}\u{22DB7}\u{22D95}\u{22E42}\u{22F74}\u{22FCC}\u{23033}\u{23066}\u{2331F}\u{233DE}\u5FB1\u6648\u66BF\u{27A79}\u{23567}\u{235F3}\u7201\u{249BA}\u77D7\u{2361A}\u{23716}\u7E87\u{20346}\u58B5\u670E"], + ["9ba1", "\u6918\u{23AA7}\u{27657}\u{25FE2}\u{23E11}\u{23EB9}\u{275FE}\u{2209A}\u48D0\u4AB8\u{24119}\u{28A9A}\u{242EE}\u{2430D}\u{2403B}\u{24334}\u{24396}\u{24A45}\u{205CA}\u51D2\u{20611}\u599F\u{21EA8}\u3BBE\u{23CFF}\u{24404}\u{244D6}\u5788\u{24674}\u399B\u{2472F}\u{285E8}\u{299C9}\u3762\u{221C3}\u8B5E\u{28B4E}\u99D6\u{24812}\u{248FB}\u{24A15}\u7209\u{24AC0}\u{20C78}\u5965\u{24EA5}\u{24F86}\u{20779}\u8EDA\u{2502C}\u528F\u573F\u7171\u{25299}\u{25419}\u{23F4A}\u{24AA7}\u55BC\u{25446}\u{2546E}\u{26B52}\u91D4\u3473\u{2553F}\u{27632}\u{2555E}\u4718\u{25562}\u{25566}\u{257C7}\u{2493F}\u{2585D}\u5066\u34FB\u{233CC}\u60DE\u{25903}\u477C\u{28948}\u{25AAE}\u{25B89}\u{25C06}\u{21D90}\u57A1\u7151\u6FB6\u{26102}\u{27C12}\u9056\u{261B2}\u{24F9A}\u8B62\u{26402}\u{2644A}"], + ["9c40", "\u5D5B\u{26BF7}\u8F36\u{26484}\u{2191C}\u8AEA\u{249F6}\u{26488}\u{23FEF}\u{26512}\u4BC0\u{265BF}\u{266B5}\u{2271B}\u9465\u{257E1}\u6195\u5A27\u{2F8CD}\u4FBB\u56B9\u{24521}\u{266FC}\u4E6A\u{24934}\u9656\u6D8F\u{26CBD}\u3618\u8977\u{26799}\u{2686E}\u{26411}\u{2685E}\u71DF\u{268C7}\u7B42\u{290C0}\u{20A11}\u{26926}\u9104\u{26939}\u7A45\u9DF0\u{269FA}\u9A26\u{26A2D}\u365F\u{26469}\u{20021}\u7983\u{26A34}\u{26B5B}\u5D2C\u{23519}\u83CF\u{26B9D}\u46D0\u{26CA4}\u753B\u8865\u{26DAE}\u58B6"], + ["9ca1", "\u371C\u{2258D}\u{2704B}\u{271CD}\u3C54\u{27280}\u{27285}\u9281\u{2217A}\u{2728B}\u9330\u{272E6}\u{249D0}\u6C39\u949F\u{27450}\u{20EF8}\u8827\u88F5\u{22926}\u{28473}\u{217B1}\u6EB8\u{24A2A}\u{21820}\u39A4\u36B9\u5C10\u79E3\u453F\u66B6\u{29CAD}\u{298A4}\u8943\u{277CC}\u{27858}\u56D6\u40DF\u{2160A}\u39A1\u{2372F}\u{280E8}\u{213C5}\u71AD\u8366\u{279DD}\u{291A8}\u5A67\u4CB7\u{270AF}\u{289AB}\u{279FD}\u{27A0A}\u{27B0B}\u{27D66}\u{2417A}\u7B43\u797E\u{28009}\u6FB5\u{2A2DF}\u6A03\u{28318}\u53A2\u{26E07}\u93BF\u6836\u975D\u{2816F}\u{28023}\u{269B5}\u{213ED}\u{2322F}\u{28048}\u5D85\u{28C30}\u{28083}\u5715\u9823\u{28949}\u5DAB\u{24988}\u65BE\u69D5\u53D2\u{24AA5}\u{23F81}\u3C11\u6736\u{28090}\u{280F4}\u{2812E}\u{21FA1}\u{2814F}"], + ["9d40", "\u{28189}\u{281AF}\u{2821A}\u{28306}\u{2832F}\u{2838A}\u35CA\u{28468}\u{286AA}\u48FA\u63E6\u{28956}\u7808\u9255\u{289B8}\u43F2\u{289E7}\u43DF\u{289E8}\u{28B46}\u{28BD4}\u59F8\u{28C09}\u8F0B\u{28FC5}\u{290EC}\u7B51\u{29110}\u{2913C}\u3DF7\u{2915E}\u{24ACA}\u8FD0\u728F\u568B\u{294E7}\u{295E9}\u{295B0}\u{295B8}\u{29732}\u{298D1}\u{29949}\u{2996A}\u{299C3}\u{29A28}\u{29B0E}\u{29D5A}\u{29D9B}\u7E9F\u{29EF8}\u{29F23}\u4CA4\u9547\u{2A293}\u71A2\u{2A2FF}\u4D91\u9012\u{2A5CB}\u4D9C\u{20C9C}\u8FBE\u55C1"], + ["9da1", "\u8FBA\u{224B0}\u8FB9\u{24A93}\u4509\u7E7F\u6F56\u6AB1\u4EEA\u34E4\u{28B2C}\u{2789D}\u373A\u8E80\u{217F5}\u{28024}\u{28B6C}\u{28B99}\u{27A3E}\u{266AF}\u3DEB\u{27655}\u{23CB7}\u{25635}\u{25956}\u4E9A\u{25E81}\u{26258}\u56BF\u{20E6D}\u8E0E\u5B6D\u{23E88}\u{24C9E}\u63DE\u62D0\u{217F6}\u{2187B}\u6530\u562D\u{25C4A}\u541A\u{25311}\u3DC6\u{29D98}\u4C7D\u5622\u561E\u7F49\u{25ED8}\u5975\u{23D40}\u8770\u4E1C\u{20FEA}\u{20D49}\u{236BA}\u8117\u9D5E\u8D18\u763B\u9C45\u764E\u77B9\u9345\u5432\u8148\u82F7\u5625\u8132\u8418\u80BD\u55EA\u7962\u5643\u5416\u{20E9D}\u35CE\u5605\u55F1\u66F1\u{282E2}\u362D\u7534\u55F0\u55BA\u5497\u5572\u{20C41}\u{20C96}\u5ED0\u{25148}\u{20E76}\u{22C62}"], + ["9e40", "\u{20EA2}\u9EAB\u7D5A\u55DE\u{21075}\u629D\u976D\u5494\u8CCD\u71F6\u9176\u63FC\u63B9\u63FE\u5569\u{22B43}\u9C72\u{22EB3}\u519A\u34DF\u{20DA7}\u51A7\u544D\u551E\u5513\u7666\u8E2D\u{2688A}\u75B1\u80B6\u8804\u8786\u88C7\u81B6\u841C\u{210C1}\u44EC\u7304\u{24706}\u5B90\u830B\u{26893}\u567B\u{226F4}\u{27D2F}\u{241A3}\u{27D73}\u{26ED0}\u{272B6}\u9170\u{211D9}\u9208\u{23CFC}\u{2A6A9}\u{20EAC}\u{20EF9}\u7266\u{21CA2}\u474E\u{24FC2}\u{27FF9}\u{20FEB}\u40FA"], + ["9ea1", "\u9C5D\u651F\u{22DA0}\u48F3\u{247E0}\u{29D7C}\u{20FEC}\u{20E0A}\u6062\u{275A3}\u{20FED}"], + ["9ead", "\u{26048}\u{21187}\u71A3\u7E8E\u9D50\u4E1A\u4E04\u3577\u5B0D\u6CB2\u5367\u36AC\u39DC\u537D\u36A5\u{24618}\u589A\u{24B6E}\u822D\u544B\u57AA\u{25A95}\u{20979}"], + ["9ec5", "\u3A52\u{22465}\u7374\u{29EAC}\u4D09\u9BED\u{23CFE}\u{29F30}\u4C5B\u{24FA9}\u{2959E}\u{29FDE}\u845C\u{23DB6}\u{272B2}\u{267B3}\u{23720}\u632E\u7D25\u{23EF7}\u{23E2C}\u3A2A\u9008\u52CC\u3E74\u367A\u45E9\u{2048E}\u7640\u5AF0\u{20EB6}\u787A\u{27F2E}\u58A7\u40BF\u567C\u9B8B\u5D74\u7654\u{2A434}\u9E85\u4CE1\u75F9\u37FB\u6119\u{230DA}\u{243F2}"], + ["9ef5", "\u565D\u{212A9}\u57A7\u{24963}\u{29E06}\u5234\u{270AE}\u35AD\u6C4A\u9D7C"], + ["9f40", "\u7C56\u9B39\u57DE\u{2176C}\u5C53\u64D3\u{294D0}\u{26335}\u{27164}\u86AD\u{20D28}\u{26D22}\u{24AE2}\u{20D71}"], + ["9f4f", "\u51FE\u{21F0F}\u5D8E\u9703\u{21DD1}\u9E81\u904C\u7B1F\u9B02\u5CD1\u7BA3\u6268\u6335\u9AFF\u7BCF\u9B2A\u7C7E\u9B2E\u7C42\u7C86\u9C15\u7BFC\u9B09\u9F17\u9C1B\u{2493E}\u9F5A\u5573\u5BC3\u4FFD\u9E98\u4FF2\u5260\u3E06\u52D1\u5767\u5056\u59B7\u5E12\u97C8\u9DAB\u8F5C\u5469\u97B4\u9940\u97BA\u532C\u6130"], + ["9fa1", "\u692C\u53DA\u9C0A\u9D02\u4C3B\u9641\u6980\u50A6\u7546\u{2176D}\u99DA\u5273"], + ["9fae", "\u9159\u9681\u915C"], + ["9fb2", "\u9151\u{28E97}\u637F\u{26D23}\u6ACA\u5611\u918E\u757A\u6285\u{203FC}\u734F\u7C70\u{25C21}\u{23CFD}"], + ["9fc1", "\u{24919}\u76D6\u9B9D\u4E2A\u{20CD4}\u83BE\u8842"], + ["9fc9", "\u5C4A\u69C0\u50ED\u577A\u521F\u5DF5\u4ECE\u6C31\u{201F2}\u4F39\u549C\u54DA\u529A\u8D82\u35FE\u5F0C\u35F3"], + ["9fdb", "\u6B52\u917C\u9FA5\u9B97\u982E\u98B4\u9ABA\u9EA8\u9E84\u717A\u7B14"], + ["9fe7", "\u6BFA\u8818\u7F78"], + ["9feb", "\u5620\u{2A64A}\u8E77\u9F53"], + ["9ff0", "\u8DD4\u8E4F\u9E1C\u8E01\u6282\u{2837D}\u8E28\u8E75\u7AD3\u{24A77}\u7A3E\u78D8\u6CEA\u8A67\u7607"], + ["a040", "\u{28A5A}\u9F26\u6CCE\u87D6\u75C3\u{2A2B2}\u7853\u{2F840}\u8D0C\u72E2\u7371\u8B2D\u7302\u74F1\u8CEB\u{24ABB}\u862F\u5FBA\u88A0\u44B7"], + ["a055", "\u{2183B}\u{26E05}"], + ["a058", "\u8A7E\u{2251B}"], + ["a05b", "\u60FD\u7667\u9AD7\u9D44\u936E\u9B8F\u87F5"], + ["a063", "\u880F\u8CF7\u732C\u9721\u9BB0\u35D6\u72B2\u4C07\u7C51\u994A\u{26159}\u6159\u4C04\u9E96\u617D"], + ["a073", "\u575F\u616F\u62A6\u6239\u62CE\u3A5C\u61E2\u53AA\u{233F5}\u6364\u6802\u35D2"], + ["a0a1", "\u5D57\u{28BC2}\u8FDA\u{28E39}"], + ["a0a6", "\u50D9\u{21D46}\u7906\u5332\u9638\u{20F3B}\u4065"], + ["a0ae", "\u77FE"], + ["a0b0", "\u7CC2\u{25F1A}\u7CDA\u7A2D\u8066\u8063\u7D4D\u7505\u74F2\u8994\u821A\u670C\u8062\u{27486}\u805B\u74F0\u8103\u7724\u8989\u{267CC}\u7553\u{26ED1}\u87A9\u87CE\u81C8\u878C\u8A49\u8CAD\u8B43\u772B\u74F8\u84DA\u3635\u69B2\u8DA6"], + ["a0d4", "\u89A9\u7468\u6DB9\u87C1\u{24011}\u74E7\u3DDB\u7176\u60A4\u619C\u3CD1\u7162\u6077"], + ["a0e2", "\u7F71\u{28B2D}\u7250\u60E9\u4B7E\u5220\u3C18\u{23CC7}\u{25ED7}\u{27656}\u{25531}\u{21944}\u{212FE}\u{29903}\u{26DDC}\u{270AD}\u5CC1\u{261AD}\u{28A0F}\u{23677}\u{200EE}\u{26846}\u{24F0E}\u4562\u5B1F\u{2634C}\u9F50\u9EA6\u{2626B}"], + ["a3c0", "\u2400", 31, "\u2421"], + ["c6a1", "\u2460", 9, "\u2474", 9, "\u2170", 9, "\u4E36\u4E3F\u4E85\u4EA0\u5182\u5196\u51AB\u52F9\u5338\u5369\u53B6\u590A\u5B80\u5DDB\u2F33\u5E7F\u5EF4\u5F50\u5F61\u6534\u65E0\u7592\u7676\u8FB5\u96B6\xA8\u02C6\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\uFF3B\uFF3D\u273D\u3041", 23], + ["c740", "\u3059", 58, "\u30A1\u30A2\u30A3\u30A4"], + ["c7a1", "\u30A5", 81, "\u0410", 5, "\u0401\u0416", 4], + ["c840", "\u041B", 26, "\u0451\u0436", 25, "\u21E7\u21B8\u21B9\u31CF\u{200CC}\u4E5A\u{2008A}\u5202\u4491"], + ["c8a1", "\u9FB0\u5188\u9FB1\u{27607}"], + ["c8cd", "\uFFE2\uFFE4\uFF07\uFF02\u3231\u2116\u2121\u309B\u309C\u2E80\u2E84\u2E86\u2E87\u2E88\u2E8A\u2E8C\u2E8D\u2E95\u2E9C\u2E9D\u2EA5\u2EA7\u2EAA\u2EAC\u2EAE\u2EB6\u2EBC\u2EBE\u2EC6\u2ECA\u2ECC\u2ECD\u2ECF\u2ED6\u2ED7\u2EDE\u2EE3"], + ["c8f5", "\u0283\u0250\u025B\u0254\u0275\u0153\xF8\u014B\u028A\u026A"], + ["f9fe", "\uFFED"], + ["fa40", "\u{20547}\u92DB\u{205DF}\u{23FC5}\u854C\u42B5\u73EF\u51B5\u3649\u{24942}\u{289E4}\u9344\u{219DB}\u82EE\u{23CC8}\u783C\u6744\u62DF\u{24933}\u{289AA}\u{202A0}\u{26BB3}\u{21305}\u4FAB\u{224ED}\u5008\u{26D29}\u{27A84}\u{23600}\u{24AB1}\u{22513}\u5029\u{2037E}\u5FA4\u{20380}\u{20347}\u6EDB\u{2041F}\u507D\u5101\u347A\u510E\u986C\u3743\u8416\u{249A4}\u{20487}\u5160\u{233B4}\u516A\u{20BFF}\u{220FC}\u{202E5}\u{22530}\u{2058E}\u{23233}\u{21983}\u5B82\u877D\u{205B3}\u{23C99}\u51B2\u51B8"], + ["faa1", "\u9D34\u51C9\u51CF\u51D1\u3CDC\u51D3\u{24AA6}\u51B3\u51E2\u5342\u51ED\u83CD\u693E\u{2372D}\u5F7B\u520B\u5226\u523C\u52B5\u5257\u5294\u52B9\u52C5\u7C15\u8542\u52E0\u860D\u{26B13}\u5305\u{28ADE}\u5549\u6ED9\u{23F80}\u{20954}\u{23FEC}\u5333\u5344\u{20BE2}\u6CCB\u{21726}\u681B\u73D5\u604A\u3EAA\u38CC\u{216E8}\u71DD\u44A2\u536D\u5374\u{286AB}\u537E\u537F\u{21596}\u{21613}\u77E6\u5393\u{28A9B}\u53A0\u53AB\u53AE\u73A7\u{25772}\u3F59\u739C\u53C1\u53C5\u6C49\u4E49\u57FE\u53D9\u3AAB\u{20B8F}\u53E0\u{23FEB}\u{22DA3}\u53F6\u{20C77}\u5413\u7079\u552B\u6657\u6D5B\u546D\u{26B53}\u{20D74}\u555D\u548F\u54A4\u47A6\u{2170D}\u{20EDD}\u3DB4\u{20D4D}"], + ["fb40", "\u{289BC}\u{22698}\u5547\u4CED\u542F\u7417\u5586\u55A9\u5605\u{218D7}\u{2403A}\u4552\u{24435}\u66B3\u{210B4}\u5637\u66CD\u{2328A}\u66A4\u66AD\u564D\u564F\u78F1\u56F1\u9787\u53FE\u5700\u56EF\u56ED\u{28B66}\u3623\u{2124F}\u5746\u{241A5}\u6C6E\u708B\u5742\u36B1\u{26C7E}\u57E6\u{21416}\u5803\u{21454}\u{24363}\u5826\u{24BF5}\u585C\u58AA\u3561\u58E0\u58DC\u{2123C}\u58FB\u5BFF\u5743\u{2A150}\u{24278}\u93D3\u35A1\u591F\u68A6\u36C3\u6E59"], + ["fba1", "\u{2163E}\u5A24\u5553\u{21692}\u8505\u59C9\u{20D4E}\u{26C81}\u{26D2A}\u{217DC}\u59D9\u{217FB}\u{217B2}\u{26DA6}\u6D71\u{21828}\u{216D5}\u59F9\u{26E45}\u5AAB\u5A63\u36E6\u{249A9}\u5A77\u3708\u5A96\u7465\u5AD3\u{26FA1}\u{22554}\u3D85\u{21911}\u3732\u{216B8}\u5E83\u52D0\u5B76\u6588\u5B7C\u{27A0E}\u4004\u485D\u{20204}\u5BD5\u6160\u{21A34}\u{259CC}\u{205A5}\u5BF3\u5B9D\u4D10\u5C05\u{21B44}\u5C13\u73CE\u5C14\u{21CA5}\u{26B28}\u5C49\u48DD\u5C85\u5CE9\u5CEF\u5D8B\u{21DF9}\u{21E37}\u5D10\u5D18\u5D46\u{21EA4}\u5CBA\u5DD7\u82FC\u382D\u{24901}\u{22049}\u{22173}\u8287\u3836\u3BC2\u5E2E\u6A8A\u5E75\u5E7A\u{244BC}\u{20CD3}\u53A6\u4EB7\u5ED0\u53A8\u{21771}\u5E09\u5EF4\u{28482}"], + ["fc40", "\u5EF9\u5EFB\u38A0\u5EFC\u683E\u941B\u5F0D\u{201C1}\u{2F894}\u3ADE\u48AE\u{2133A}\u5F3A\u{26888}\u{223D0}\u5F58\u{22471}\u5F63\u97BD\u{26E6E}\u5F72\u9340\u{28A36}\u5FA7\u5DB6\u3D5F\u{25250}\u{21F6A}\u{270F8}\u{22668}\u91D6\u{2029E}\u{28A29}\u6031\u6685\u{21877}\u3963\u3DC7\u3639\u5790\u{227B4}\u7971\u3E40\u609E\u60A4\u60B3\u{24982}\u{2498F}\u{27A53}\u74A4\u50E1\u5AA0\u6164\u8424\u6142\u{2F8A6}\u{26ED2}\u6181\u51F4\u{20656}\u6187\u5BAA\u{23FB7}"], + ["fca1", "\u{2285F}\u61D3\u{28B9D}\u{2995D}\u61D0\u3932\u{22980}\u{228C1}\u6023\u615C\u651E\u638B\u{20118}\u62C5\u{21770}\u62D5\u{22E0D}\u636C\u{249DF}\u3A17\u6438\u63F8\u{2138E}\u{217FC}\u6490\u6F8A\u{22E36}\u9814\u{2408C}\u{2571D}\u64E1\u64E5\u947B\u3A66\u643A\u3A57\u654D\u6F16\u{24A28}\u{24A23}\u6585\u656D\u655F\u{2307E}\u65B5\u{24940}\u4B37\u65D1\u40D8\u{21829}\u65E0\u65E3\u5FDF\u{23400}\u6618\u{231F7}\u{231F8}\u6644\u{231A4}\u{231A5}\u664B\u{20E75}\u6667\u{251E6}\u6673\u6674\u{21E3D}\u{23231}\u{285F4}\u{231C8}\u{25313}\u77C5\u{228F7}\u99A4\u6702\u{2439C}\u{24A21}\u3B2B\u69FA\u{237C2}\u675E\u6767\u6762\u{241CD}\u{290ED}\u67D7\u44E9\u6822\u6E50\u923C\u6801\u{233E6}\u{26DA0}\u685D"], + ["fd40", "\u{2346F}\u69E1\u6A0B\u{28ADF}\u6973\u68C3\u{235CD}\u6901\u6900\u3D32\u3A01\u{2363C}\u3B80\u67AC\u6961\u{28A4A}\u42FC\u6936\u6998\u3BA1\u{203C9}\u8363\u5090\u69F9\u{23659}\u{2212A}\u6A45\u{23703}\u6A9D\u3BF3\u67B1\u6AC8\u{2919C}\u3C0D\u6B1D\u{20923}\u60DE\u6B35\u6B74\u{227CD}\u6EB5\u{23ADB}\u{203B5}\u{21958}\u3740\u5421\u{23B5A}\u6BE1\u{23EFC}\u6BDC\u6C37\u{2248B}\u{248F1}\u{26B51}\u6C5A\u8226\u6C79\u{23DBC}\u44C5\u{23DBD}\u{241A4}\u{2490C}\u{24900}"], + ["fda1", "\u{23CC9}\u36E5\u3CEB\u{20D32}\u9B83\u{231F9}\u{22491}\u7F8F\u6837\u{26D25}\u{26DA1}\u{26DEB}\u6D96\u6D5C\u6E7C\u6F04\u{2497F}\u{24085}\u{26E72}\u8533\u{26F74}\u51C7\u6C9C\u6E1D\u842E\u{28B21}\u6E2F\u{23E2F}\u7453\u{23F82}\u79CC\u6E4F\u5A91\u{2304B}\u6FF8\u370D\u6F9D\u{23E30}\u6EFA\u{21497}\u{2403D}\u4555\u93F0\u6F44\u6F5C\u3D4E\u6F74\u{29170}\u3D3B\u6F9F\u{24144}\u6FD3\u{24091}\u{24155}\u{24039}\u{23FF0}\u{23FB4}\u{2413F}\u51DF\u{24156}\u{24157}\u{24140}\u{261DD}\u704B\u707E\u70A7\u7081\u70CC\u70D5\u70D6\u70DF\u4104\u3DE8\u71B4\u7196\u{24277}\u712B\u7145\u5A88\u714A\u716E\u5C9C\u{24365}\u714F\u9362\u{242C1}\u712C\u{2445A}\u{24A27}\u{24A22}\u71BA\u{28BE8}\u70BD\u720E"], + ["fe40", "\u9442\u7215\u5911\u9443\u7224\u9341\u{25605}\u722E\u7240\u{24974}\u68BD\u7255\u7257\u3E55\u{23044}\u680D\u6F3D\u7282\u732A\u732B\u{24823}\u{2882B}\u48ED\u{28804}\u7328\u732E\u73CF\u73AA\u{20C3A}\u{26A2E}\u73C9\u7449\u{241E2}\u{216E7}\u{24A24}\u6623\u36C5\u{249B7}\u{2498D}\u{249FB}\u73F7\u7415\u6903\u{24A26}\u7439\u{205C3}\u3ED7\u745C\u{228AD}\u7460\u{28EB2}\u7447\u73E4\u7476\u83B9\u746C\u3730\u7474\u93F1\u6A2C\u7482\u4953\u{24A8C}"], + ["fea1", "\u{2415F}\u{24A79}\u{28B8F}\u5B46\u{28C03}\u{2189E}\u74C8\u{21988}\u750E\u74E9\u751E\u{28ED9}\u{21A4B}\u5BD7\u{28EAC}\u9385\u754D\u754A\u7567\u756E\u{24F82}\u3F04\u{24D13}\u758E\u745D\u759E\u75B4\u7602\u762C\u7651\u764F\u766F\u7676\u{263F5}\u7690\u81EF\u37F8\u{26911}\u{2690E}\u76A1\u76A5\u76B7\u76CC\u{26F9F}\u8462\u{2509D}\u{2517D}\u{21E1C}\u771E\u7726\u7740\u64AF\u{25220}\u7758\u{232AC}\u77AF\u{28964}\u{28968}\u{216C1}\u77F4\u7809\u{21376}\u{24A12}\u68CA\u78AF\u78C7\u78D3\u96A5\u792E\u{255E0}\u78D7\u7934\u78B1\u{2760C}\u8FB8\u8884\u{28B2B}\u{26083}\u{2261C}\u7986\u8900\u6902\u7980\u{25857}\u799D\u{27B39}\u793C\u79A9\u6E2A\u{27126}\u3EA8\u79C6\u{2910D}\u79D4"] + ]; + } +}); + +// node_modules/iconv-lite/encodings/dbcs-data.js +var require_dbcs_data = __commonJS({ + "node_modules/iconv-lite/encodings/dbcs-data.js"(exports2, module2) { + "use strict"; + module2.exports = { + "shiftjis": { + type: "_dbcs", + table: function() { + return require_shiftjis(); + }, + encodeAdd: { "\xA5": 92, "\u203E": 126 }, + encodeSkipVals: [{ from: 60736, to: 63808 }] + }, + "csshiftjis": "shiftjis", + "mskanji": "shiftjis", + "sjis": "shiftjis", + "windows31j": "shiftjis", + "ms31j": "shiftjis", + "xsjis": "shiftjis", + "windows932": "shiftjis", + "ms932": "shiftjis", + "932": "shiftjis", + "cp932": "shiftjis", + "eucjp": { + type: "_dbcs", + table: function() { + return require_eucjp(); + }, + encodeAdd: { "\xA5": 92, "\u203E": 126 } + }, + "gb2312": "cp936", + "gb231280": "cp936", + "gb23121980": "cp936", + "csgb2312": "cp936", + "csiso58gb231280": "cp936", + "euccn": "cp936", + "windows936": "cp936", + "ms936": "cp936", + "936": "cp936", + "cp936": { + type: "_dbcs", + table: function() { + return require_cp936(); + } + }, + "gbk": { + type: "_dbcs", + table: function() { + return require_cp936().concat(require_gbk_added()); + } + }, + "xgbk": "gbk", + "isoir58": "gbk", + "gb18030": { + type: "_dbcs", + table: function() { + return require_cp936().concat(require_gbk_added()); + }, + gb18030: function() { + return require_gb18030_ranges(); + }, + encodeSkipVals: [128], + encodeAdd: { "\u20AC": 41699 } + }, + "chinese": "gb18030", + "windows949": "cp949", + "ms949": "cp949", + "949": "cp949", + "cp949": { + type: "_dbcs", + table: function() { + return require_cp949(); + } + }, + "cseuckr": "cp949", + "csksc56011987": "cp949", + "euckr": "cp949", + "isoir149": "cp949", + "korean": "cp949", + "ksc56011987": "cp949", + "ksc56011989": "cp949", + "ksc5601": "cp949", + "windows950": "cp950", + "ms950": "cp950", + "950": "cp950", + "cp950": { + type: "_dbcs", + table: function() { + return require_cp950(); + } + }, + "big5": "big5hkscs", + "big5hkscs": { + type: "_dbcs", + table: function() { + return require_cp950().concat(require_big5_added()); + }, + encodeSkipVals: [41676] + }, + "cnbig5": "big5hkscs", + "csbig5": "big5hkscs", + "xxbig5": "big5hkscs" + }; + } +}); + +// node_modules/iconv-lite/encodings/index.js +var require_encodings = __commonJS({ + "node_modules/iconv-lite/encodings/index.js"(exports2, module2) { + "use strict"; + var modules = [ + require_internal(), + require_utf16(), + require_utf7(), + require_sbcs_codec(), + require_sbcs_data(), + require_sbcs_data_generated(), + require_dbcs_codec(), + require_dbcs_data() + ]; + for (i = 0; i < modules.length; i++) { + module2 = modules[i]; + for (enc in module2) + if (Object.prototype.hasOwnProperty.call(module2, enc)) + exports2[enc] = module2[enc]; + } + var module2; + var enc; + var i; + } +}); + +// node_modules/iconv-lite/lib/streams.js +var require_streams = __commonJS({ + "node_modules/iconv-lite/lib/streams.js"(exports2, module2) { + "use strict"; + var Buffer2 = require("buffer").Buffer; + var Transform = require("stream").Transform; + module2.exports = function(iconv) { + iconv.encodeStream = function encodeStream(encoding, options) { + return new IconvLiteEncoderStream(iconv.getEncoder(encoding, options), options); + }; + iconv.decodeStream = function decodeStream(encoding, options) { + return new IconvLiteDecoderStream(iconv.getDecoder(encoding, options), options); + }; + iconv.supportsStreams = true; + iconv.IconvLiteEncoderStream = IconvLiteEncoderStream; + iconv.IconvLiteDecoderStream = IconvLiteDecoderStream; + iconv._collect = IconvLiteDecoderStream.prototype.collect; + }; + function IconvLiteEncoderStream(conv, options) { + this.conv = conv; + options = options || {}; + options.decodeStrings = false; + Transform.call(this, options); + } + IconvLiteEncoderStream.prototype = Object.create(Transform.prototype, { + constructor: { value: IconvLiteEncoderStream } + }); + IconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) { + if (typeof chunk != "string") + return done(new Error("Iconv encoding stream needs strings as its input.")); + try { + var res = this.conv.write(chunk); + if (res && res.length) + this.push(res); + done(); + } catch (e) { + done(e); + } + }; + IconvLiteEncoderStream.prototype._flush = function(done) { + try { + var res = this.conv.end(); + if (res && res.length) + this.push(res); + done(); + } catch (e) { + done(e); + } + }; + IconvLiteEncoderStream.prototype.collect = function(cb) { + var chunks = []; + this.on("error", cb); + this.on("data", function(chunk) { + chunks.push(chunk); + }); + this.on("end", function() { + cb(null, Buffer2.concat(chunks)); + }); + return this; + }; + function IconvLiteDecoderStream(conv, options) { + this.conv = conv; + options = options || {}; + options.encoding = this.encoding = "utf8"; + Transform.call(this, options); + } + IconvLiteDecoderStream.prototype = Object.create(Transform.prototype, { + constructor: { value: IconvLiteDecoderStream } + }); + IconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) { + if (!Buffer2.isBuffer(chunk)) + return done(new Error("Iconv decoding stream needs buffers as its input.")); + try { + var res = this.conv.write(chunk); + if (res && res.length) + this.push(res, this.encoding); + done(); + } catch (e) { + done(e); + } + }; + IconvLiteDecoderStream.prototype._flush = function(done) { + try { + var res = this.conv.end(); + if (res && res.length) + this.push(res, this.encoding); + done(); + } catch (e) { + done(e); + } + }; + IconvLiteDecoderStream.prototype.collect = function(cb) { + var res = ""; + this.on("error", cb); + this.on("data", function(chunk) { + res += chunk; + }); + this.on("end", function() { + cb(null, res); + }); + return this; + }; + } +}); + +// node_modules/iconv-lite/lib/extend-node.js +var require_extend_node = __commonJS({ + "node_modules/iconv-lite/lib/extend-node.js"(exports2, module2) { + "use strict"; + var Buffer2 = require("buffer").Buffer; + module2.exports = function(iconv) { + var original = void 0; + iconv.supportsNodeEncodingsExtension = !(Buffer2.from || new Buffer2(0) instanceof Uint8Array); + iconv.extendNodeEncodings = function extendNodeEncodings() { + if (original) + return; + original = {}; + if (!iconv.supportsNodeEncodingsExtension) { + console.error("ACTION NEEDED: require('iconv-lite').extendNodeEncodings() is not supported in your version of Node"); + console.error("See more info at https://github.com/ashtuchkin/iconv-lite/wiki/Node-v4-compatibility"); + return; + } + var nodeNativeEncodings = { + "hex": true, + "utf8": true, + "utf-8": true, + "ascii": true, + "binary": true, + "base64": true, + "ucs2": true, + "ucs-2": true, + "utf16le": true, + "utf-16le": true + }; + Buffer2.isNativeEncoding = function(enc) { + return enc && nodeNativeEncodings[enc.toLowerCase()]; + }; + var SlowBuffer = require("buffer").SlowBuffer; + original.SlowBufferToString = SlowBuffer.prototype.toString; + SlowBuffer.prototype.toString = function(encoding, start, end) { + encoding = String(encoding || "utf8").toLowerCase(); + if (Buffer2.isNativeEncoding(encoding)) + return original.SlowBufferToString.call(this, encoding, start, end); + if (typeof start == "undefined") + start = 0; + if (typeof end == "undefined") + end = this.length; + return iconv.decode(this.slice(start, end), encoding); + }; + original.SlowBufferWrite = SlowBuffer.prototype.write; + SlowBuffer.prototype.write = function(string, offset, length, encoding) { + if (isFinite(offset)) { + if (!isFinite(length)) { + encoding = length; + length = void 0; + } + } else { + var swap = encoding; + encoding = offset; + offset = length; + length = swap; + } + offset = +offset || 0; + var remaining = this.length - offset; + if (!length) { + length = remaining; + } else { + length = +length; + if (length > remaining) { + length = remaining; + } + } + encoding = String(encoding || "utf8").toLowerCase(); + if (Buffer2.isNativeEncoding(encoding)) + return original.SlowBufferWrite.call(this, string, offset, length, encoding); + if (string.length > 0 && (length < 0 || offset < 0)) + throw new RangeError("attempt to write beyond buffer bounds"); + var buf = iconv.encode(string, encoding); + if (buf.length < length) + length = buf.length; + buf.copy(this, offset, 0, length); + return length; + }; + original.BufferIsEncoding = Buffer2.isEncoding; + Buffer2.isEncoding = function(encoding) { + return Buffer2.isNativeEncoding(encoding) || iconv.encodingExists(encoding); + }; + original.BufferByteLength = Buffer2.byteLength; + Buffer2.byteLength = SlowBuffer.byteLength = function(str, encoding) { + encoding = String(encoding || "utf8").toLowerCase(); + if (Buffer2.isNativeEncoding(encoding)) + return original.BufferByteLength.call(this, str, encoding); + return iconv.encode(str, encoding).length; + }; + original.BufferToString = Buffer2.prototype.toString; + Buffer2.prototype.toString = function(encoding, start, end) { + encoding = String(encoding || "utf8").toLowerCase(); + if (Buffer2.isNativeEncoding(encoding)) + return original.BufferToString.call(this, encoding, start, end); + if (typeof start == "undefined") + start = 0; + if (typeof end == "undefined") + end = this.length; + return iconv.decode(this.slice(start, end), encoding); + }; + original.BufferWrite = Buffer2.prototype.write; + Buffer2.prototype.write = function(string, offset, length, encoding) { + var _offset = offset, _length = length, _encoding = encoding; + if (isFinite(offset)) { + if (!isFinite(length)) { + encoding = length; + length = void 0; + } + } else { + var swap = encoding; + encoding = offset; + offset = length; + length = swap; + } + encoding = String(encoding || "utf8").toLowerCase(); + if (Buffer2.isNativeEncoding(encoding)) + return original.BufferWrite.call(this, string, _offset, _length, _encoding); + offset = +offset || 0; + var remaining = this.length - offset; + if (!length) { + length = remaining; + } else { + length = +length; + if (length > remaining) { + length = remaining; + } + } + if (string.length > 0 && (length < 0 || offset < 0)) + throw new RangeError("attempt to write beyond buffer bounds"); + var buf = iconv.encode(string, encoding); + if (buf.length < length) + length = buf.length; + buf.copy(this, offset, 0, length); + return length; + }; + if (iconv.supportsStreams) { + var Readable = require("stream").Readable; + original.ReadableSetEncoding = Readable.prototype.setEncoding; + Readable.prototype.setEncoding = function setEncoding(enc, options) { + this._readableState.decoder = iconv.getDecoder(enc, options); + this._readableState.encoding = enc; + }; + Readable.prototype.collect = iconv._collect; + } + }; + iconv.undoExtendNodeEncodings = function undoExtendNodeEncodings() { + if (!iconv.supportsNodeEncodingsExtension) + return; + if (!original) + throw new Error("require('iconv-lite').undoExtendNodeEncodings(): Nothing to undo; extendNodeEncodings() is not called."); + delete Buffer2.isNativeEncoding; + var SlowBuffer = require("buffer").SlowBuffer; + SlowBuffer.prototype.toString = original.SlowBufferToString; + SlowBuffer.prototype.write = original.SlowBufferWrite; + Buffer2.isEncoding = original.BufferIsEncoding; + Buffer2.byteLength = original.BufferByteLength; + Buffer2.prototype.toString = original.BufferToString; + Buffer2.prototype.write = original.BufferWrite; + if (iconv.supportsStreams) { + var Readable = require("stream").Readable; + Readable.prototype.setEncoding = original.ReadableSetEncoding; + delete Readable.prototype.collect; + } + original = void 0; + }; + }; + } +}); + +// node_modules/iconv-lite/lib/index.js +var require_lib3 = __commonJS({ + "node_modules/iconv-lite/lib/index.js"(exports2, module2) { + "use strict"; + var Buffer2 = require_safer().Buffer; + var bomHandling = require_bom_handling(); + var iconv = module2.exports; + iconv.encodings = null; + iconv.defaultCharUnicode = "\uFFFD"; + iconv.defaultCharSingleByte = "?"; + iconv.encode = function encode(str, encoding, options) { + str = "" + (str || ""); + var encoder = iconv.getEncoder(encoding, options); + var res = encoder.write(str); + var trail = encoder.end(); + return trail && trail.length > 0 ? Buffer2.concat([res, trail]) : res; + }; + iconv.decode = function decode(buf, encoding, options) { + if (typeof buf === "string") { + if (!iconv.skipDecodeWarning) { + console.error("Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding"); + iconv.skipDecodeWarning = true; + } + buf = Buffer2.from("" + (buf || ""), "binary"); + } + var decoder = iconv.getDecoder(encoding, options); + var res = decoder.write(buf); + var trail = decoder.end(); + return trail ? res + trail : res; + }; + iconv.encodingExists = function encodingExists(enc) { + try { + iconv.getCodec(enc); + return true; + } catch (e) { + return false; + } + }; + iconv.toEncoding = iconv.encode; + iconv.fromEncoding = iconv.decode; + iconv._codecDataCache = {}; + iconv.getCodec = function getCodec(encoding) { + if (!iconv.encodings) + iconv.encodings = require_encodings(); + var enc = iconv._canonicalizeEncoding(encoding); + var codecOptions = {}; + while (true) { + var codec = iconv._codecDataCache[enc]; + if (codec) + return codec; + var codecDef = iconv.encodings[enc]; + switch (typeof codecDef) { + case "string": + enc = codecDef; + break; + case "object": + for (var key in codecDef) + codecOptions[key] = codecDef[key]; + if (!codecOptions.encodingName) + codecOptions.encodingName = enc; + enc = codecDef.type; + break; + case "function": + if (!codecOptions.encodingName) + codecOptions.encodingName = enc; + codec = new codecDef(codecOptions, iconv); + iconv._codecDataCache[codecOptions.encodingName] = codec; + return codec; + default: + throw new Error("Encoding not recognized: '" + encoding + "' (searched as: '" + enc + "')"); + } + } + }; + iconv._canonicalizeEncoding = function(encoding) { + return ("" + encoding).toLowerCase().replace(/:\d{4}$|[^0-9a-z]/g, ""); + }; + iconv.getEncoder = function getEncoder(encoding, options) { + var codec = iconv.getCodec(encoding), encoder = new codec.encoder(options, codec); + if (codec.bomAware && options && options.addBOM) + encoder = new bomHandling.PrependBOM(encoder, options); + return encoder; + }; + iconv.getDecoder = function getDecoder(encoding, options) { + var codec = iconv.getCodec(encoding), decoder = new codec.decoder(options, codec); + if (codec.bomAware && !(options && options.stripBOM === false)) + decoder = new bomHandling.StripBOM(decoder, options); + return decoder; + }; + var nodeVer = typeof process !== "undefined" && process.versions && process.versions.node; + if (nodeVer) { + nodeVerArr = nodeVer.split(".").map(Number); + if (nodeVerArr[0] > 0 || nodeVerArr[1] >= 10) { + require_streams()(iconv); + } + require_extend_node()(iconv); + } + var nodeVerArr; + if (false) { + console.error("iconv-lite warning: javascript files use encoding different from utf-8. See https://github.com/ashtuchkin/iconv-lite/wiki/Javascript-source-file-encodings for more info."); + } + } +}); + +// node_modules/unpipe/index.js +var require_unpipe = __commonJS({ + "node_modules/unpipe/index.js"(exports2, module2) { + "use strict"; + module2.exports = unpipe; + function hasPipeDataListeners(stream) { + var listeners = stream.listeners("data"); + for (var i = 0; i < listeners.length; i++) { + if (listeners[i].name === "ondata") { + return true; + } + } + return false; + } + function unpipe(stream) { + if (!stream) { + throw new TypeError("argument stream is required"); + } + if (typeof stream.unpipe === "function") { + stream.unpipe(); + return; + } + if (!hasPipeDataListeners(stream)) { + return; + } + var listener; + var listeners = stream.listeners("close"); + for (var i = 0; i < listeners.length; i++) { + listener = listeners[i]; + if (listener.name !== "cleanup" && listener.name !== "onclose") { + continue; + } + listener.call(stream); + } + } + } +}); + +// node_modules/raw-body/index.js +var require_raw_body = __commonJS({ + "node_modules/raw-body/index.js"(exports2, module2) { + "use strict"; + var bytes = require_bytes(); + var createError = require_http_errors(); + var iconv = require_lib3(); + var unpipe = require_unpipe(); + module2.exports = getRawBody; + var ICONV_ENCODING_MESSAGE_REGEXP = /^Encoding not recognized: /; + function getDecoder(encoding) { + if (!encoding) + return null; + try { + return iconv.getDecoder(encoding); + } catch (e) { + if (!ICONV_ENCODING_MESSAGE_REGEXP.test(e.message)) + throw e; + throw createError(415, "specified encoding unsupported", { + encoding, + type: "encoding.unsupported" + }); + } + } + function getRawBody(stream, options, callback) { + var done = callback; + var opts = options || {}; + if (options === true || typeof options === "string") { + opts = { + encoding: options + }; + } + if (typeof options === "function") { + done = options; + opts = {}; + } + if (done !== void 0 && typeof done !== "function") { + throw new TypeError("argument callback must be a function"); + } + if (!done && !global.Promise) { + throw new TypeError("argument callback is required"); + } + var encoding = opts.encoding !== true ? opts.encoding : "utf-8"; + var limit = bytes.parse(opts.limit); + var length = opts.length != null && !isNaN(opts.length) ? parseInt(opts.length, 10) : null; + if (done) { + return readStream(stream, encoding, length, limit, done); + } + return new Promise(function executor(resolve, reject) { + readStream(stream, encoding, length, limit, function onRead(err, buf) { + if (err) + return reject(err); + resolve(buf); + }); + }); + } + function halt(stream) { + unpipe(stream); + if (typeof stream.pause === "function") { + stream.pause(); + } + } + function readStream(stream, encoding, length, limit, callback) { + var complete = false; + var sync = true; + if (limit !== null && length !== null && length > limit) { + return done(createError(413, "request entity too large", { + expected: length, + length, + limit, + type: "entity.too.large" + })); + } + var state = stream._readableState; + if (stream._decoder || state && (state.encoding || state.decoder)) { + return done(createError(500, "stream encoding should not be set", { + type: "stream.encoding.set" + })); + } + var received = 0; + var decoder; + try { + decoder = getDecoder(encoding); + } catch (err) { + return done(err); + } + var buffer = decoder ? "" : []; + stream.on("aborted", onAborted); + stream.on("close", cleanup); + stream.on("data", onData); + stream.on("end", onEnd); + stream.on("error", onEnd); + sync = false; + function done() { + var args2 = new Array(arguments.length); + for (var i = 0; i < args2.length; i++) { + args2[i] = arguments[i]; + } + complete = true; + if (sync) { + process.nextTick(invokeCallback); + } else { + invokeCallback(); + } + function invokeCallback() { + cleanup(); + if (args2[0]) { + halt(stream); + } + callback.apply(null, args2); + } + } + function onAborted() { + if (complete) + return; + done(createError(400, "request aborted", { + code: "ECONNABORTED", + expected: length, + length, + received, + type: "request.aborted" + })); + } + function onData(chunk) { + if (complete) + return; + received += chunk.length; + if (limit !== null && received > limit) { + done(createError(413, "request entity too large", { + limit, + received, + type: "entity.too.large" + })); + } else if (decoder) { + buffer += decoder.write(chunk); + } else { + buffer.push(chunk); + } + } + function onEnd(err) { + if (complete) + return; + if (err) + return done(err); + if (length !== null && received !== length) { + done(createError(400, "request size did not match content length", { + expected: length, + length, + received, + type: "request.size.invalid" + })); + } else { + var string = decoder ? buffer + (decoder.end() || "") : Buffer.concat(buffer); + done(null, string); + } + } + function cleanup() { + buffer = null; + stream.removeListener("aborted", onAborted); + stream.removeListener("data", onData); + stream.removeListener("end", onEnd); + stream.removeListener("error", onEnd); + stream.removeListener("close", cleanup); + } + } + } +}); + +// node_modules/body-parser/lib/read.js +var require_read = __commonJS({ + "node_modules/body-parser/lib/read.js"(exports2, module2) { + "use strict"; + var createError = require_http_errors(); + var getBody = require_raw_body(); + var iconv = require_lib3(); + var onFinished = require_on_finished(); + var zlib = require("zlib"); + module2.exports = read; + function read(req, res, next, parse, debug, options) { + var length; + var opts = options; + var stream; + var encoding = opts.encoding !== null ? opts.encoding : null; + var verify = opts.verify; + try { + stream = contentstream(req, debug, opts.inflate); + length = stream.length; + stream.length = void 0; + } catch (err) { + return next(err); + } + opts.length = length; + opts.encoding = verify ? null : encoding; + if (opts.encoding === null && encoding !== null && !iconv.encodingExists(encoding)) { + return next(createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', { + charset: encoding.toLowerCase(), + type: "charset.unsupported" + })); + } + debug("read body"); + getBody(stream, opts, function(error, body) { + if (error) { + var _error; + if (error.type === "encoding.unsupported") { + _error = createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', { + charset: encoding.toLowerCase(), + type: "charset.unsupported" + }); + } else { + _error = createError(400, error); + } + stream.resume(); + onFinished(req, function onfinished() { + next(createError(400, _error)); + }); + return; + } + if (verify) { + try { + debug("verify body"); + verify(req, res, body, encoding); + } catch (err) { + next(createError(403, err, { + body, + type: err.type || "entity.verify.failed" + })); + return; + } + } + var str = body; + try { + debug("parse body"); + str = typeof body !== "string" && encoding !== null ? iconv.decode(body, encoding) : body; + req.body = parse(str); + } catch (err) { + next(createError(400, err, { + body: str, + type: err.type || "entity.parse.failed" + })); + return; + } + next(); + }); + } + function contentstream(req, debug, inflate) { + var encoding = (req.headers["content-encoding"] || "identity").toLowerCase(); + var length = req.headers["content-length"]; + var stream; + debug('content-encoding "%s"', encoding); + if (inflate === false && encoding !== "identity") { + throw createError(415, "content encoding unsupported", { + encoding, + type: "encoding.unsupported" + }); + } + switch (encoding) { + case "deflate": + stream = zlib.createInflate(); + debug("inflate body"); + req.pipe(stream); + break; + case "gzip": + stream = zlib.createGunzip(); + debug("gunzip body"); + req.pipe(stream); + break; + case "identity": + stream = req; + stream.length = length; + break; + default: + throw createError(415, 'unsupported content encoding "' + encoding + '"', { + encoding, + type: "encoding.unsupported" + }); + } + return stream; + } + } +}); + +// node_modules/media-typer/index.js +var require_media_typer = __commonJS({ + "node_modules/media-typer/index.js"(exports2) { + var paramRegExp = /; *([!#$%&'\*\+\-\.0-9A-Z\^_`a-z\|~]+) *= *("(?:[ !\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\u0020-\u007e])*"|[!#$%&'\*\+\-\.0-9A-Z\^_`a-z\|~]+) */g; + var textRegExp = /^[\u0020-\u007e\u0080-\u00ff]+$/; + var tokenRegExp = /^[!#$%&'\*\+\-\.0-9A-Z\^_`a-z\|~]+$/; + var qescRegExp = /\\([\u0000-\u007f])/g; + var quoteRegExp = /([\\"])/g; + var subtypeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_.-]{0,126}$/; + var typeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126}$/; + var typeRegExp = /^ *([A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126})\/([A-Za-z0-9][A-Za-z0-9!#$&^_.+-]{0,126}) *$/; + exports2.format = format; + exports2.parse = parse; + function format(obj) { + if (!obj || typeof obj !== "object") { + throw new TypeError("argument obj is required"); + } + var parameters = obj.parameters; + var subtype = obj.subtype; + var suffix = obj.suffix; + var type = obj.type; + if (!type || !typeNameRegExp.test(type)) { + throw new TypeError("invalid type"); + } + if (!subtype || !subtypeNameRegExp.test(subtype)) { + throw new TypeError("invalid subtype"); + } + var string = type + "/" + subtype; + if (suffix) { + if (!typeNameRegExp.test(suffix)) { + throw new TypeError("invalid suffix"); + } + string += "+" + suffix; + } + if (parameters && typeof parameters === "object") { + var param; + var params = Object.keys(parameters).sort(); + for (var i = 0; i < params.length; i++) { + param = params[i]; + if (!tokenRegExp.test(param)) { + throw new TypeError("invalid parameter name"); + } + string += "; " + param + "=" + qstring(parameters[param]); + } + } + return string; + } + function parse(string) { + if (!string) { + throw new TypeError("argument string is required"); + } + if (typeof string === "object") { + string = getcontenttype(string); + } + if (typeof string !== "string") { + throw new TypeError("argument string is required to be a string"); + } + var index = string.indexOf(";"); + var type = index !== -1 ? string.substr(0, index) : string; + var key; + var match; + var obj = splitType(type); + var params = {}; + var value; + paramRegExp.lastIndex = index; + while (match = paramRegExp.exec(string)) { + if (match.index !== index) { + throw new TypeError("invalid parameter format"); + } + index += match[0].length; + key = match[1].toLowerCase(); + value = match[2]; + if (value[0] === '"') { + value = value.substr(1, value.length - 2).replace(qescRegExp, "$1"); + } + params[key] = value; + } + if (index !== -1 && index !== string.length) { + throw new TypeError("invalid parameter format"); + } + obj.parameters = params; + return obj; + } + function getcontenttype(obj) { + if (typeof obj.getHeader === "function") { + return obj.getHeader("content-type"); + } + if (typeof obj.headers === "object") { + return obj.headers && obj.headers["content-type"]; + } + } + function qstring(val) { + var str = String(val); + if (tokenRegExp.test(str)) { + return str; + } + if (str.length > 0 && !textRegExp.test(str)) { + throw new TypeError("invalid parameter value"); + } + return '"' + str.replace(quoteRegExp, "\\$1") + '"'; + } + function splitType(string) { + var match = typeRegExp.exec(string.toLowerCase()); + if (!match) { + throw new TypeError("invalid media type"); + } + var type = match[1]; + var subtype = match[2]; + var suffix; + var index = subtype.lastIndexOf("+"); + if (index !== -1) { + suffix = subtype.substr(index + 1); + subtype = subtype.substr(0, index); + } + var obj = { + type, + subtype, + suffix + }; + return obj; + } + } +}); + +// node_modules/mime-db/db.json +var require_db = __commonJS({ + "node_modules/mime-db/db.json"(exports2, module2) { + module2.exports = { + "application/1d-interleaved-parityfec": { + source: "iana" + }, + "application/3gpdash-qoe-report+xml": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "application/3gpp-ims+xml": { + source: "iana", + compressible: true + }, + "application/3gpphal+json": { + source: "iana", + compressible: true + }, + "application/3gpphalforms+json": { + source: "iana", + compressible: true + }, + "application/a2l": { + source: "iana" + }, + "application/ace+cbor": { + source: "iana" + }, + "application/activemessage": { + source: "iana" + }, + "application/activity+json": { + source: "iana", + compressible: true + }, + "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/alto-updatestreamcontrol+json": { + source: "iana", + compressible: true + }, + "application/alto-updatestreamparams+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/at+jwt": { + source: "iana" + }, + "application/atf": { + source: "iana" + }, + "application/atfx": { + source: "iana" + }, + "application/atom+xml": { + source: "iana", + compressible: true, + extensions: ["atom"] + }, + "application/atomcat+xml": { + source: "iana", + compressible: true, + extensions: ["atomcat"] + }, + "application/atomdeleted+xml": { + source: "iana", + compressible: true, + extensions: ["atomdeleted"] + }, + "application/atomicmail": { + source: "iana" + }, + "application/atomsvc+xml": { + source: "iana", + compressible: true, + extensions: ["atomsvc"] + }, + "application/atsc-dwd+xml": { + source: "iana", + compressible: true, + extensions: ["dwd"] + }, + "application/atsc-dynamic-event-message": { + source: "iana" + }, + "application/atsc-held+xml": { + source: "iana", + compressible: true, + extensions: ["held"] + }, + "application/atsc-rdt+json": { + source: "iana", + compressible: true + }, + "application/atsc-rsat+xml": { + source: "iana", + compressible: true, + extensions: ["rsat"] + }, + "application/atxml": { + source: "iana" + }, + "application/auth-policy+xml": { + source: "iana", + compressible: true + }, + "application/bacnet-xdd+zip": { + source: "iana", + compressible: false + }, + "application/batch-smtp": { + source: "iana" + }, + "application/bdoc": { + compressible: false, + extensions: ["bdoc"] + }, + "application/beep+xml": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "application/calendar+json": { + source: "iana", + compressible: true + }, + "application/calendar+xml": { + source: "iana", + compressible: true, + extensions: ["xcs"] + }, + "application/call-completion": { + source: "iana" + }, + "application/cals-1840": { + source: "iana" + }, + "application/captive+json": { + source: "iana", + compressible: true + }, + "application/cbor": { + source: "iana" + }, + "application/cbor-seq": { + source: "iana" + }, + "application/cccex": { + source: "iana" + }, + "application/ccmp+xml": { + source: "iana", + compressible: true + }, + "application/ccxml+xml": { + source: "iana", + compressible: true, + extensions: ["ccxml"] + }, + "application/cdfx+xml": { + source: "iana", + compressible: true, + extensions: ["cdfx"] + }, + "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", + compressible: true + }, + "application/cellml+xml": { + source: "iana", + compressible: true + }, + "application/cfw": { + source: "iana" + }, + "application/city+json": { + source: "iana", + compressible: true + }, + "application/clr": { + source: "iana" + }, + "application/clue+xml": { + source: "iana", + compressible: true + }, + "application/clue_info+xml": { + source: "iana", + compressible: true + }, + "application/cms": { + source: "iana" + }, + "application/cnrp+xml": { + source: "iana", + compressible: true + }, + "application/coap-group+json": { + source: "iana", + compressible: true + }, + "application/coap-payload": { + source: "iana" + }, + "application/commonground": { + source: "iana" + }, + "application/conference-info+xml": { + source: "iana", + compressible: true + }, + "application/cose": { + source: "iana" + }, + "application/cose-key": { + source: "iana" + }, + "application/cose-key-set": { + source: "iana" + }, + "application/cpl+xml": { + source: "iana", + compressible: true, + extensions: ["cpl"] + }, + "application/csrattrs": { + source: "iana" + }, + "application/csta+xml": { + source: "iana", + compressible: true + }, + "application/cstadata+xml": { + source: "iana", + compressible: true + }, + "application/csvm+json": { + source: "iana", + compressible: true + }, + "application/cu-seeme": { + source: "apache", + extensions: ["cu"] + }, + "application/cwt": { + source: "iana" + }, + "application/cybercash": { + source: "iana" + }, + "application/dart": { + compressible: true + }, + "application/dash+xml": { + source: "iana", + compressible: true, + extensions: ["mpd"] + }, + "application/dash-patch+xml": { + source: "iana", + compressible: true, + extensions: ["mpp"] + }, + "application/dashdelta": { + source: "iana" + }, + "application/davmount+xml": { + source: "iana", + compressible: true, + extensions: ["davmount"] + }, + "application/dca-rft": { + source: "iana" + }, + "application/dcd": { + source: "iana" + }, + "application/dec-dx": { + source: "iana" + }, + "application/dialog-info+xml": { + source: "iana", + compressible: true + }, + "application/dicom": { + source: "iana" + }, + "application/dicom+json": { + source: "iana", + compressible: true + }, + "application/dicom+xml": { + source: "iana", + compressible: true + }, + "application/dii": { + source: "iana" + }, + "application/dit": { + source: "iana" + }, + "application/dns": { + source: "iana" + }, + "application/dns+json": { + source: "iana", + compressible: true + }, + "application/dns-message": { + source: "iana" + }, + "application/docbook+xml": { + source: "apache", + compressible: true, + extensions: ["dbk"] + }, + "application/dots+cbor": { + source: "iana" + }, + "application/dskpp+xml": { + source: "iana", + compressible: true + }, + "application/dssc+der": { + source: "iana", + extensions: ["dssc"] + }, + "application/dssc+xml": { + source: "iana", + compressible: true, + extensions: ["xdssc"] + }, + "application/dvcs": { + source: "iana" + }, + "application/ecmascript": { + source: "iana", + compressible: true, + extensions: ["es", "ecma"] + }, + "application/edi-consent": { + source: "iana" + }, + "application/edi-x12": { + source: "iana", + compressible: false + }, + "application/edifact": { + source: "iana", + compressible: false + }, + "application/efi": { + source: "iana" + }, + "application/elm+json": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "application/elm+xml": { + source: "iana", + compressible: true + }, + "application/emergencycalldata.cap+xml": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "application/emergencycalldata.comment+xml": { + source: "iana", + compressible: true + }, + "application/emergencycalldata.control+xml": { + source: "iana", + compressible: true + }, + "application/emergencycalldata.deviceinfo+xml": { + source: "iana", + compressible: true + }, + "application/emergencycalldata.ecall.msd": { + source: "iana" + }, + "application/emergencycalldata.providerinfo+xml": { + source: "iana", + compressible: true + }, + "application/emergencycalldata.serviceinfo+xml": { + source: "iana", + compressible: true + }, + "application/emergencycalldata.subscriberinfo+xml": { + source: "iana", + compressible: true + }, + "application/emergencycalldata.veds+xml": { + source: "iana", + compressible: true + }, + "application/emma+xml": { + source: "iana", + compressible: true, + extensions: ["emma"] + }, + "application/emotionml+xml": { + source: "iana", + compressible: true, + extensions: ["emotionml"] + }, + "application/encaprtp": { + source: "iana" + }, + "application/epp+xml": { + source: "iana", + compressible: true + }, + "application/epub+zip": { + source: "iana", + compressible: false, + extensions: ["epub"] + }, + "application/eshop": { + source: "iana" + }, + "application/exi": { + source: "iana", + extensions: ["exi"] + }, + "application/expect-ct-report+json": { + source: "iana", + compressible: true + }, + "application/express": { + source: "iana", + extensions: ["exp"] + }, + "application/fastinfoset": { + source: "iana" + }, + "application/fastsoap": { + source: "iana" + }, + "application/fdt+xml": { + source: "iana", + compressible: true, + extensions: ["fdt"] + }, + "application/fhir+json": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "application/fhir+xml": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "application/fido.trusted-apps+json": { + compressible: true + }, + "application/fits": { + source: "iana" + }, + "application/flexfec": { + source: "iana" + }, + "application/font-sfnt": { + source: "iana" + }, + "application/font-tdpfr": { + source: "iana", + extensions: ["pfr"] + }, + "application/font-woff": { + source: "iana", + compressible: false + }, + "application/framework-attributes+xml": { + source: "iana", + compressible: true + }, + "application/geo+json": { + source: "iana", + compressible: true, + extensions: ["geojson"] + }, + "application/geo+json-seq": { + source: "iana" + }, + "application/geopackage+sqlite3": { + source: "iana" + }, + "application/geoxacml+xml": { + source: "iana", + compressible: true + }, + "application/gltf-buffer": { + source: "iana" + }, + "application/gml+xml": { + source: "iana", + compressible: true, + extensions: ["gml"] + }, + "application/gpx+xml": { + source: "apache", + compressible: true, + extensions: ["gpx"] + }, + "application/gxf": { + source: "apache", + extensions: ["gxf"] + }, + "application/gzip": { + source: "iana", + compressible: false, + extensions: ["gz"] + }, + "application/h224": { + source: "iana" + }, + "application/held+xml": { + source: "iana", + compressible: true + }, + "application/hjson": { + extensions: ["hjson"] + }, + "application/http": { + source: "iana" + }, + "application/hyperstudio": { + source: "iana", + extensions: ["stk"] + }, + "application/ibe-key-request+xml": { + source: "iana", + compressible: true + }, + "application/ibe-pkg-reply+xml": { + source: "iana", + compressible: true + }, + "application/ibe-pp-data": { + source: "iana" + }, + "application/iges": { + source: "iana" + }, + "application/im-iscomposing+xml": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "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", + compressible: true, + 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", + compressible: true, + extensions: ["its"] + }, + "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", "mjs"] + }, + "application/jf2feed+json": { + source: "iana", + compressible: true + }, + "application/jose": { + source: "iana" + }, + "application/jose+json": { + source: "iana", + compressible: true + }, + "application/jrd+json": { + source: "iana", + compressible: true + }, + "application/jscalendar+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", + compressible: true + }, + "application/kpml-response+xml": { + source: "iana", + compressible: true + }, + "application/ld+json": { + source: "iana", + compressible: true, + extensions: ["jsonld"] + }, + "application/lgr+xml": { + source: "iana", + compressible: true, + extensions: ["lgr"] + }, + "application/link-format": { + source: "iana" + }, + "application/load-control+xml": { + source: "iana", + compressible: true + }, + "application/lost+xml": { + source: "iana", + compressible: true, + extensions: ["lostxml"] + }, + "application/lostsync+xml": { + source: "iana", + compressible: true + }, + "application/lpf+zip": { + source: "iana", + compressible: false + }, + "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", + compressible: true, + extensions: ["mads"] + }, + "application/manifest+json": { + source: "iana", + charset: "UTF-8", + compressible: true, + extensions: ["webmanifest"] + }, + "application/marc": { + source: "iana", + extensions: ["mrc"] + }, + "application/marcxml+xml": { + source: "iana", + compressible: true, + extensions: ["mrcx"] + }, + "application/mathematica": { + source: "iana", + extensions: ["ma", "nb", "mb"] + }, + "application/mathml+xml": { + source: "iana", + compressible: true, + extensions: ["mathml"] + }, + "application/mathml-content+xml": { + source: "iana", + compressible: true + }, + "application/mathml-presentation+xml": { + source: "iana", + compressible: true + }, + "application/mbms-associated-procedure-description+xml": { + source: "iana", + compressible: true + }, + "application/mbms-deregister+xml": { + source: "iana", + compressible: true + }, + "application/mbms-envelope+xml": { + source: "iana", + compressible: true + }, + "application/mbms-msk+xml": { + source: "iana", + compressible: true + }, + "application/mbms-msk-response+xml": { + source: "iana", + compressible: true + }, + "application/mbms-protection-description+xml": { + source: "iana", + compressible: true + }, + "application/mbms-reception-report+xml": { + source: "iana", + compressible: true + }, + "application/mbms-register+xml": { + source: "iana", + compressible: true + }, + "application/mbms-register-response+xml": { + source: "iana", + compressible: true + }, + "application/mbms-schedule+xml": { + source: "iana", + compressible: true + }, + "application/mbms-user-service-description+xml": { + source: "iana", + compressible: true + }, + "application/mbox": { + source: "iana", + extensions: ["mbox"] + }, + "application/media-policy-dataset+xml": { + source: "iana", + compressible: true, + extensions: ["mpf"] + }, + "application/media_control+xml": { + source: "iana", + compressible: true + }, + "application/mediaservercontrol+xml": { + source: "iana", + compressible: true, + extensions: ["mscml"] + }, + "application/merge-patch+json": { + source: "iana", + compressible: true + }, + "application/metalink+xml": { + source: "apache", + compressible: true, + extensions: ["metalink"] + }, + "application/metalink4+xml": { + source: "iana", + compressible: true, + extensions: ["meta4"] + }, + "application/mets+xml": { + source: "iana", + compressible: true, + extensions: ["mets"] + }, + "application/mf4": { + source: "iana" + }, + "application/mikey": { + source: "iana" + }, + "application/mipc": { + source: "iana" + }, + "application/missing-blocks+cbor-seq": { + source: "iana" + }, + "application/mmt-aei+xml": { + source: "iana", + compressible: true, + extensions: ["maei"] + }, + "application/mmt-usd+xml": { + source: "iana", + compressible: true, + extensions: ["musd"] + }, + "application/mods+xml": { + source: "iana", + compressible: true, + 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", + compressible: true + }, + "application/mrb-publish+xml": { + source: "iana", + compressible: true + }, + "application/msc-ivr+xml": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "application/msc-mixer+xml": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "application/msword": { + source: "iana", + compressible: false, + extensions: ["doc", "dot"] + }, + "application/mud+json": { + source: "iana", + compressible: true + }, + "application/multipart-core": { + source: "iana" + }, + "application/mxf": { + source: "iana", + extensions: ["mxf"] + }, + "application/n-quads": { + source: "iana", + extensions: ["nq"] + }, + "application/n-triples": { + source: "iana", + extensions: ["nt"] + }, + "application/nasdata": { + source: "iana" + }, + "application/news-checkgroups": { + source: "iana", + charset: "US-ASCII" + }, + "application/news-groupinfo": { + source: "iana", + charset: "US-ASCII" + }, + "application/news-transmission": { + source: "iana" + }, + "application/nlsml+xml": { + source: "iana", + compressible: true + }, + "application/node": { + source: "iana", + extensions: ["cjs"] + }, + "application/nss": { + source: "iana" + }, + "application/oauth-authz-req+jwt": { + source: "iana" + }, + "application/oblivious-dns-message": { + 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/odm+xml": { + source: "iana", + compressible: true + }, + "application/odx": { + source: "iana" + }, + "application/oebps-package+xml": { + source: "iana", + compressible: true, + extensions: ["opf"] + }, + "application/ogg": { + source: "iana", + compressible: false, + extensions: ["ogx"] + }, + "application/omdoc+xml": { + source: "apache", + compressible: true, + extensions: ["omdoc"] + }, + "application/onenote": { + source: "apache", + extensions: ["onetoc", "onetoc2", "onetmp", "onepkg"] + }, + "application/opc-nodeset+xml": { + source: "iana", + compressible: true + }, + "application/oscore": { + source: "iana" + }, + "application/oxps": { + source: "iana", + extensions: ["oxps"] + }, + "application/p21": { + source: "iana" + }, + "application/p21+zip": { + source: "iana", + compressible: false + }, + "application/p2p-overlay+xml": { + source: "iana", + compressible: true, + extensions: ["relo"] + }, + "application/parityfec": { + source: "iana" + }, + "application/passport": { + source: "iana" + }, + "application/patch-ops-error+xml": { + source: "iana", + compressible: true, + extensions: ["xer"] + }, + "application/pdf": { + source: "iana", + compressible: false, + extensions: ["pdf"] + }, + "application/pdx": { + source: "iana" + }, + "application/pem-certificate-chain": { + source: "iana" + }, + "application/pgp-encrypted": { + source: "iana", + compressible: false, + extensions: ["pgp"] + }, + "application/pgp-keys": { + source: "iana", + extensions: ["asc"] + }, + "application/pgp-signature": { + source: "iana", + extensions: ["asc", "sig"] + }, + "application/pics-rules": { + source: "apache", + extensions: ["prf"] + }, + "application/pidf+xml": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "application/pidf-diff+xml": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "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/pkcs8-encrypted": { + source: "iana" + }, + "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", + compressible: true, + extensions: ["pls"] + }, + "application/poc-settings+xml": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "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", + compressible: true + }, + "application/provenance+xml": { + source: "iana", + compressible: true, + extensions: ["provx"] + }, + "application/prs.alvestrand.titrax-sheet": { + source: "iana" + }, + "application/prs.cww": { + source: "iana", + extensions: ["cww"] + }, + "application/prs.cyn": { + source: "iana", + charset: "7-BIT" + }, + "application/prs.hpub+zip": { + source: "iana", + compressible: false + }, + "application/prs.nprend": { + source: "iana" + }, + "application/prs.plucker": { + source: "iana" + }, + "application/prs.rdf-xml-crypt": { + source: "iana" + }, + "application/prs.xsf+xml": { + source: "iana", + compressible: true + }, + "application/pskc+xml": { + source: "iana", + compressible: true, + extensions: ["pskcxml"] + }, + "application/pvd+json": { + source: "iana", + compressible: true + }, + "application/qsig": { + source: "iana" + }, + "application/raml+yaml": { + compressible: true, + extensions: ["raml"] + }, + "application/raptorfec": { + source: "iana" + }, + "application/rdap+json": { + source: "iana", + compressible: true + }, + "application/rdf+xml": { + source: "iana", + compressible: true, + extensions: ["rdf", "owl"] + }, + "application/reginfo+xml": { + source: "iana", + compressible: true, + 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", + compressible: true, + extensions: ["rl"] + }, + "application/resource-lists-diff+xml": { + source: "iana", + compressible: true, + extensions: ["rld"] + }, + "application/rfc+xml": { + source: "iana", + compressible: true + }, + "application/riscos": { + source: "iana" + }, + "application/rlmi+xml": { + source: "iana", + compressible: true + }, + "application/rls-services+xml": { + source: "iana", + compressible: true, + extensions: ["rs"] + }, + "application/route-apd+xml": { + source: "iana", + compressible: true, + extensions: ["rapd"] + }, + "application/route-s-tsid+xml": { + source: "iana", + compressible: true, + extensions: ["sls"] + }, + "application/route-usd+xml": { + source: "iana", + compressible: true, + extensions: ["rusd"] + }, + "application/rpki-ghostbusters": { + source: "iana", + extensions: ["gbr"] + }, + "application/rpki-manifest": { + source: "iana", + extensions: ["mft"] + }, + "application/rpki-publication": { + source: "iana" + }, + "application/rpki-roa": { + source: "iana", + extensions: ["roa"] + }, + "application/rpki-updown": { + source: "iana" + }, + "application/rsd+xml": { + source: "apache", + compressible: true, + 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", + compressible: true + }, + "application/samlmetadata+xml": { + source: "iana", + compressible: true + }, + "application/sarif+json": { + source: "iana", + compressible: true + }, + "application/sarif-external-properties+json": { + source: "iana", + compressible: true + }, + "application/sbe": { + source: "iana" + }, + "application/sbml+xml": { + source: "iana", + compressible: true, + extensions: ["sbml"] + }, + "application/scaip+xml": { + source: "iana", + compressible: true + }, + "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/secevent+jwt": { + source: "iana" + }, + "application/senml+cbor": { + source: "iana" + }, + "application/senml+json": { + source: "iana", + compressible: true + }, + "application/senml+xml": { + source: "iana", + compressible: true, + extensions: ["senmlx"] + }, + "application/senml-etch+cbor": { + source: "iana" + }, + "application/senml-etch+json": { + source: "iana", + compressible: true + }, + "application/senml-exi": { + source: "iana" + }, + "application/sensml+cbor": { + source: "iana" + }, + "application/sensml+json": { + source: "iana", + compressible: true + }, + "application/sensml+xml": { + source: "iana", + compressible: true, + extensions: ["sensmlx"] + }, + "application/sensml-exi": { + source: "iana" + }, + "application/sep+xml": { + source: "iana", + compressible: true + }, + "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", + compressible: true, + extensions: ["shf"] + }, + "application/sieve": { + source: "iana", + extensions: ["siv", "sieve"] + }, + "application/simple-filter+xml": { + source: "iana", + compressible: true + }, + "application/simple-message-summary": { + source: "iana" + }, + "application/simplesymbolcontainer": { + source: "iana" + }, + "application/sipc": { + source: "iana" + }, + "application/slate": { + source: "iana" + }, + "application/smil": { + source: "iana" + }, + "application/smil+xml": { + source: "iana", + compressible: true, + 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", + compressible: true, + extensions: ["srx"] + }, + "application/spdx+json": { + source: "iana", + compressible: true + }, + "application/spirits-event+xml": { + source: "iana", + compressible: true + }, + "application/sql": { + source: "iana" + }, + "application/srgs": { + source: "iana", + extensions: ["gram"] + }, + "application/srgs+xml": { + source: "iana", + compressible: true, + extensions: ["grxml"] + }, + "application/sru+xml": { + source: "iana", + compressible: true, + extensions: ["sru"] + }, + "application/ssdl+xml": { + source: "apache", + compressible: true, + extensions: ["ssdl"] + }, + "application/ssml+xml": { + source: "iana", + compressible: true, + extensions: ["ssml"] + }, + "application/stix+json": { + source: "iana", + compressible: true + }, + "application/swid+xml": { + source: "iana", + compressible: true, + extensions: ["swidtag"] + }, + "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/taxii+json": { + source: "iana", + compressible: true + }, + "application/td+json": { + source: "iana", + compressible: true + }, + "application/tei+xml": { + source: "iana", + compressible: true, + extensions: ["tei", "teicorpus"] + }, + "application/tetra_isi": { + source: "iana" + }, + "application/thraud+xml": { + source: "iana", + compressible: true, + extensions: ["tfi"] + }, + "application/timestamp-query": { + source: "iana" + }, + "application/timestamp-reply": { + source: "iana" + }, + "application/timestamped-data": { + source: "iana", + extensions: ["tsd"] + }, + "application/tlsrpt+gzip": { + source: "iana" + }, + "application/tlsrpt+json": { + source: "iana", + compressible: true + }, + "application/tnauthlist": { + source: "iana" + }, + "application/token-introspection+jwt": { + source: "iana" + }, + "application/toml": { + compressible: true, + extensions: ["toml"] + }, + "application/trickle-ice-sdpfrag": { + source: "iana" + }, + "application/trig": { + source: "iana", + extensions: ["trig"] + }, + "application/ttml+xml": { + source: "iana", + compressible: true, + extensions: ["ttml"] + }, + "application/tve-trigger": { + source: "iana" + }, + "application/tzif": { + source: "iana" + }, + "application/tzif-leap": { + source: "iana" + }, + "application/ubjson": { + compressible: false, + extensions: ["ubj"] + }, + "application/ulpfec": { + source: "iana" + }, + "application/urc-grpsheet+xml": { + source: "iana", + compressible: true + }, + "application/urc-ressheet+xml": { + source: "iana", + compressible: true, + extensions: ["rsheet"] + }, + "application/urc-targetdesc+xml": { + source: "iana", + compressible: true, + extensions: ["td"] + }, + "application/urc-uisocketdesc+xml": { + source: "iana", + compressible: true + }, + "application/vcard+json": { + source: "iana", + compressible: true + }, + "application/vcard+xml": { + source: "iana", + compressible: true + }, + "application/vemmi": { + source: "iana" + }, + "application/vividence.scriptfile": { + source: "apache" + }, + "application/vnd.1000minds.decision-model+xml": { + source: "iana", + compressible: true, + extensions: ["1km"] + }, + "application/vnd.3gpp-prose+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp-prose-pc3ch+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp-v2x-local-service-information": { + source: "iana" + }, + "application/vnd.3gpp.5gnas": { + source: "iana" + }, + "application/vnd.3gpp.access-transfer-events+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.bsf+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.gmop+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.gtpc": { + source: "iana" + }, + "application/vnd.3gpp.interworking-data": { + source: "iana" + }, + "application/vnd.3gpp.lpp": { + source: "iana" + }, + "application/vnd.3gpp.mc-signalling-ear": { + source: "iana" + }, + "application/vnd.3gpp.mcdata-affiliation-command+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcdata-info+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcdata-payload": { + source: "iana" + }, + "application/vnd.3gpp.mcdata-service-config+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcdata-signalling": { + source: "iana" + }, + "application/vnd.3gpp.mcdata-ue-config+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcdata-user-profile+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcptt-affiliation-command+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcptt-floor-request+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcptt-info+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcptt-location-info+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcptt-mbms-usage-info+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcptt-service-config+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcptt-signed+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcptt-ue-config+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcptt-ue-init-config+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcptt-user-profile+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcvideo-affiliation-command+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcvideo-affiliation-info+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcvideo-info+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcvideo-location-info+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcvideo-mbms-usage-info+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcvideo-service-config+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcvideo-transmission-request+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcvideo-ue-config+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcvideo-user-profile+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mid-call+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.ngap": { + source: "iana" + }, + "application/vnd.3gpp.pfcp": { + 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.s1ap": { + source: "iana" + }, + "application/vnd.3gpp.sms": { + source: "iana" + }, + "application/vnd.3gpp.sms+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.srvcc-ext+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.srvcc-info+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.state-and-event-info+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.ussd+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp2.bcmcsinfo+xml": { + source: "iana", + compressible: true + }, + "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", + compressible: false, + 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", + compressible: true, + extensions: ["xdp"] + }, + "application/vnd.adobe.xfdf": { + source: "iana", + extensions: ["xfdf"] + }, + "application/vnd.aether.imp": { + source: "iana" + }, + "application/vnd.afpc.afplinedata": { + source: "iana" + }, + "application/vnd.afpc.afplinedata-pagedef": { + source: "iana" + }, + "application/vnd.afpc.cmoca-cmresource": { + source: "iana" + }, + "application/vnd.afpc.foca-charset": { + source: "iana" + }, + "application/vnd.afpc.foca-codedfont": { + source: "iana" + }, + "application/vnd.afpc.foca-codepage": { + source: "iana" + }, + "application/vnd.afpc.modca": { + source: "iana" + }, + "application/vnd.afpc.modca-cmtable": { + source: "iana" + }, + "application/vnd.afpc.modca-formdef": { + source: "iana" + }, + "application/vnd.afpc.modca-mediummap": { + source: "iana" + }, + "application/vnd.afpc.modca-objectcontainer": { + source: "iana" + }, + "application/vnd.afpc.modca-overlay": { + source: "iana" + }, + "application/vnd.afpc.modca-pagesegment": { + source: "iana" + }, + "application/vnd.age": { + source: "iana", + extensions: ["age"] + }, + "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.amadeus+json": { + source: "iana", + compressible: true + }, + "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", + compressible: true + }, + "application/vnd.android.ota": { + 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.arrow.file": { + source: "iana" + }, + "application/vnd.apache.arrow.stream": { + source: "iana" + }, + "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.aplextor.warrp+json": { + source: "iana", + compressible: true + }, + "application/vnd.apothekende.reservation+json": { + source: "iana", + compressible: true + }, + "application/vnd.apple.installer+xml": { + source: "iana", + compressible: true, + extensions: ["mpkg"] + }, + "application/vnd.apple.keynote": { + source: "iana", + extensions: ["key"] + }, + "application/vnd.apple.mpegurl": { + source: "iana", + extensions: ["m3u8"] + }, + "application/vnd.apple.numbers": { + source: "iana", + extensions: ["numbers"] + }, + "application/vnd.apple.pages": { + source: "iana", + extensions: ["pages"] + }, + "application/vnd.apple.pkpass": { + compressible: false, + extensions: ["pkpass"] + }, + "application/vnd.arastra.swi": { + source: "iana" + }, + "application/vnd.aristanetworks.swi": { + source: "iana", + extensions: ["swi"] + }, + "application/vnd.artisan+json": { + source: "iana", + compressible: true + }, + "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.avalon+json": { + source: "iana", + compressible: true + }, + "application/vnd.avistar+xml": { + source: "iana", + compressible: true + }, + "application/vnd.balsamiq.bmml+xml": { + source: "iana", + compressible: true, + extensions: ["bmml"] + }, + "application/vnd.balsamiq.bmpr": { + source: "iana" + }, + "application/vnd.banana-accounting": { + source: "iana" + }, + "application/vnd.bbf.usp.error": { + source: "iana" + }, + "application/vnd.bbf.usp.msg": { + source: "iana" + }, + "application/vnd.bbf.usp.msg+json": { + source: "iana", + compressible: true + }, + "application/vnd.bekitzur-stech+json": { + source: "iana", + compressible: true + }, + "application/vnd.bint.med-content": { + source: "iana" + }, + "application/vnd.biopax.rdf+xml": { + source: "iana", + compressible: true + }, + "application/vnd.blink-idb-value-wrapper": { + 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.bpf": { + source: "iana" + }, + "application/vnd.bpf3": { + source: "iana" + }, + "application/vnd.businessobjects": { + source: "iana", + extensions: ["rep"] + }, + "application/vnd.byu.uapi+json": { + source: "iana", + compressible: true + }, + "application/vnd.cab-jscript": { + source: "iana" + }, + "application/vnd.canon-cpdl": { + source: "iana" + }, + "application/vnd.canon-lips": { + source: "iana" + }, + "application/vnd.capasystems-pg+json": { + source: "iana", + compressible: true + }, + "application/vnd.cendio.thinlinc.clientconf": { + source: "iana" + }, + "application/vnd.century-systems.tcp_stream": { + source: "iana" + }, + "application/vnd.chemdraw+xml": { + source: "iana", + compressible: true, + extensions: ["cdxml"] + }, + "application/vnd.chess-pgn": { + source: "iana" + }, + "application/vnd.chipnuts.karaoke-mmd": { + source: "iana", + extensions: ["mmd"] + }, + "application/vnd.ciedi": { + source: "iana" + }, + "application/vnd.cinderella": { + source: "iana", + extensions: ["cdy"] + }, + "application/vnd.cirpack.isdn-ext": { + source: "iana" + }, + "application/vnd.citationstyles.style+xml": { + source: "iana", + compressible: true, + extensions: ["csl"] + }, + "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.collabio.xodocuments.document": { + source: "iana" + }, + "application/vnd.collabio.xodocuments.document-template": { + source: "iana" + }, + "application/vnd.collabio.xodocuments.presentation": { + source: "iana" + }, + "application/vnd.collabio.xodocuments.presentation-template": { + source: "iana" + }, + "application/vnd.collabio.xodocuments.spreadsheet": { + source: "iana" + }, + "application/vnd.collabio.xodocuments.spreadsheet-template": { + 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", + compressible: false + }, + "application/vnd.comicbook-rar": { + 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", + compressible: true, + extensions: ["wbs"] + }, + "application/vnd.cryptii.pipe+json": { + source: "iana", + compressible: true + }, + "application/vnd.crypto-shade-file": { + source: "iana" + }, + "application/vnd.cryptomator.encrypted": { + source: "iana" + }, + "application/vnd.cryptomator.vault": { + source: "iana" + }, + "application/vnd.ctc-posml": { + source: "iana", + extensions: ["pml"] + }, + "application/vnd.ctct.ws+xml": { + source: "iana", + compressible: true + }, + "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", + compressible: true + }, + "application/vnd.cybank": { + source: "iana" + }, + "application/vnd.cyclonedx+json": { + source: "iana", + compressible: true + }, + "application/vnd.cyclonedx+xml": { + source: "iana", + compressible: true + }, + "application/vnd.d2l.coursepackage1p0+zip": { + source: "iana", + compressible: false + }, + "application/vnd.d3m-dataset": { + source: "iana" + }, + "application/vnd.d3m-problem": { + source: "iana" + }, + "application/vnd.dart": { + source: "iana", + compressible: true, + extensions: ["dart"] + }, + "application/vnd.data-vision.rdz": { + source: "iana", + extensions: ["rdz"] + }, + "application/vnd.datapackage+json": { + source: "iana", + compressible: true + }, + "application/vnd.dataresource+json": { + source: "iana", + compressible: true + }, + "application/vnd.dbf": { + source: "iana", + extensions: ["dbf"] + }, + "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", + compressible: true, + 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.dir-bi.plate-dl-nosuffix": { + source: "iana" + }, + "application/vnd.dm.delegation+xml": { + source: "iana", + compressible: true + }, + "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.dvbisl+xml": { + source: "iana", + compressible: true + }, + "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", + compressible: true + }, + "application/vnd.dvb.notif-container+xml": { + source: "iana", + compressible: true + }, + "application/vnd.dvb.notif-generic+xml": { + source: "iana", + compressible: true + }, + "application/vnd.dvb.notif-ia-msglist+xml": { + source: "iana", + compressible: true + }, + "application/vnd.dvb.notif-ia-registration-request+xml": { + source: "iana", + compressible: true + }, + "application/vnd.dvb.notif-ia-registration-response+xml": { + source: "iana", + compressible: true + }, + "application/vnd.dvb.notif-init+xml": { + source: "iana", + compressible: true + }, + "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.ecip.rlp": { + source: "iana" + }, + "application/vnd.eclipse.ditto+json": { + source: "iana", + compressible: true + }, + "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.efi.img": { + source: "iana" + }, + "application/vnd.efi.iso": { + source: "iana" + }, + "application/vnd.emclient.accessrequest+xml": { + source: "iana", + compressible: true + }, + "application/vnd.enliven": { + source: "iana", + extensions: ["nml"] + }, + "application/vnd.enphase.envoy": { + source: "iana" + }, + "application/vnd.eprints.data+xml": { + source: "iana", + compressible: true + }, + "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", + compressible: false + }, + "application/vnd.eszigno3+xml": { + source: "iana", + compressible: true, + extensions: ["es3", "et3"] + }, + "application/vnd.etsi.aoc+xml": { + source: "iana", + compressible: true + }, + "application/vnd.etsi.asic-e+zip": { + source: "iana", + compressible: false + }, + "application/vnd.etsi.asic-s+zip": { + source: "iana", + compressible: false + }, + "application/vnd.etsi.cug+xml": { + source: "iana", + compressible: true + }, + "application/vnd.etsi.iptvcommand+xml": { + source: "iana", + compressible: true + }, + "application/vnd.etsi.iptvdiscovery+xml": { + source: "iana", + compressible: true + }, + "application/vnd.etsi.iptvprofile+xml": { + source: "iana", + compressible: true + }, + "application/vnd.etsi.iptvsad-bc+xml": { + source: "iana", + compressible: true + }, + "application/vnd.etsi.iptvsad-cod+xml": { + source: "iana", + compressible: true + }, + "application/vnd.etsi.iptvsad-npvr+xml": { + source: "iana", + compressible: true + }, + "application/vnd.etsi.iptvservice+xml": { + source: "iana", + compressible: true + }, + "application/vnd.etsi.iptvsync+xml": { + source: "iana", + compressible: true + }, + "application/vnd.etsi.iptvueprofile+xml": { + source: "iana", + compressible: true + }, + "application/vnd.etsi.mcid+xml": { + source: "iana", + compressible: true + }, + "application/vnd.etsi.mheg5": { + source: "iana" + }, + "application/vnd.etsi.overload-control-policy-dataset+xml": { + source: "iana", + compressible: true + }, + "application/vnd.etsi.pstn+xml": { + source: "iana", + compressible: true + }, + "application/vnd.etsi.sci+xml": { + source: "iana", + compressible: true + }, + "application/vnd.etsi.simservs+xml": { + source: "iana", + compressible: true + }, + "application/vnd.etsi.timestamp-token": { + source: "iana" + }, + "application/vnd.etsi.tsl+xml": { + source: "iana", + compressible: true + }, + "application/vnd.etsi.tsl.der": { + source: "iana" + }, + "application/vnd.eu.kasparian.car+json": { + source: "iana", + compressible: true + }, + "application/vnd.eudora.data": { + source: "iana" + }, + "application/vnd.evolv.ecig.profile": { + source: "iana" + }, + "application/vnd.evolv.ecig.settings": { + source: "iana" + }, + "application/vnd.evolv.ecig.theme": { + source: "iana" + }, + "application/vnd.exstream-empower+zip": { + source: "iana", + compressible: false + }, + "application/vnd.exstream-package": { + 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.familysearch.gedcom+zip": { + source: "iana", + compressible: false + }, + "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.ficlab.flb+zip": { + source: "iana", + compressible: false + }, + "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.fujifilm.fb.docuworks": { + source: "iana" + }, + "application/vnd.fujifilm.fb.docuworks.binder": { + source: "iana" + }, + "application/vnd.fujifilm.fb.docuworks.container": { + source: "iana" + }, + "application/vnd.fujifilm.fb.jfi+xml": { + source: "iana", + compressible: true + }, + "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.futoin+cbor": { + source: "iana" + }, + "application/vnd.futoin+json": { + source: "iana", + compressible: true + }, + "application/vnd.fuzzysheet": { + source: "iana", + extensions: ["fzs"] + }, + "application/vnd.genomatix.tuxedo": { + source: "iana", + extensions: ["txd"] + }, + "application/vnd.gentics.grd+json": { + source: "iana", + compressible: true + }, + "application/vnd.geo+json": { + source: "iana", + compressible: true + }, + "application/vnd.geocube+xml": { + source: "iana", + compressible: true + }, + "application/vnd.geogebra.file": { + source: "iana", + extensions: ["ggb"] + }, + "application/vnd.geogebra.slides": { + source: "iana" + }, + "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", + compressible: true + }, + "application/vnd.gov.sk.e-form+zip": { + source: "iana", + compressible: false + }, + "application/vnd.gov.sk.xmldatacontainer+xml": { + source: "iana", + compressible: true + }, + "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", + compressible: true, + extensions: ["hal"] + }, + "application/vnd.handheld-entertainment+xml": { + source: "iana", + compressible: true, + extensions: ["zmm"] + }, + "application/vnd.hbci": { + source: "iana", + extensions: ["hbci"] + }, + "application/vnd.hc+json": { + source: "iana", + compressible: true + }, + "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.hl7cda+xml": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "application/vnd.hl7v2+xml": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "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.hyper+json": { + source: "iana", + compressible: true + }, + "application/vnd.hyper-item+json": { + source: "iana", + compressible: true + }, + "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.imagemeter.folder+zip": { + source: "iana", + compressible: false + }, + "application/vnd.imagemeter.image+zip": { + source: "iana", + compressible: false + }, + "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", + compressible: true + }, + "application/vnd.informix-visionary": { + source: "iana" + }, + "application/vnd.infotech.project": { + source: "iana" + }, + "application/vnd.infotech.project+xml": { + source: "iana", + compressible: true + }, + "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", + compressible: true + }, + "application/vnd.iptc.g2.conceptitem+xml": { + source: "iana", + compressible: true + }, + "application/vnd.iptc.g2.knowledgeitem+xml": { + source: "iana", + compressible: true + }, + "application/vnd.iptc.g2.newsitem+xml": { + source: "iana", + compressible: true + }, + "application/vnd.iptc.g2.newsmessage+xml": { + source: "iana", + compressible: true + }, + "application/vnd.iptc.g2.packageitem+xml": { + source: "iana", + compressible: true + }, + "application/vnd.iptc.g2.planningitem+xml": { + source: "iana", + compressible: true + }, + "application/vnd.ipunplugged.rcprofile": { + source: "iana", + extensions: ["rcprofile"] + }, + "application/vnd.irepository.package+xml": { + source: "iana", + compressible: true, + extensions: ["irp"] + }, + "application/vnd.is-xpr": { + source: "iana", + extensions: ["xpr"] + }, + "application/vnd.isac.fcs": { + source: "iana", + extensions: ["fcs"] + }, + "application/vnd.iso11783-10+zip": { + source: "iana", + compressible: false + }, + "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": { + source: "iana" + }, + "application/vnd.las.las+json": { + source: "iana", + compressible: true + }, + "application/vnd.las.las+xml": { + source: "iana", + compressible: true, + extensions: ["lasxml"] + }, + "application/vnd.laszip": { + source: "iana" + }, + "application/vnd.leap+json": { + source: "iana", + compressible: true + }, + "application/vnd.liberty-request+xml": { + source: "iana", + compressible: true + }, + "application/vnd.llamagraphics.life-balance.desktop": { + source: "iana", + extensions: ["lbd"] + }, + "application/vnd.llamagraphics.life-balance.exchange+xml": { + source: "iana", + compressible: true, + extensions: ["lbe"] + }, + "application/vnd.logipipe.circuit+zip": { + source: "iana", + compressible: false + }, + "application/vnd.loom": { + source: "iana" + }, + "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", + extensions: ["mvt"] + }, + "application/vnd.marlin.drm.actiontoken+xml": { + source: "iana", + compressible: true + }, + "application/vnd.marlin.drm.conftoken+xml": { + source: "iana", + compressible: true + }, + "application/vnd.marlin.drm.license+xml": { + source: "iana", + compressible: true + }, + "application/vnd.marlin.drm.mdcf": { + source: "iana" + }, + "application/vnd.mason+json": { + source: "iana", + compressible: true + }, + "application/vnd.maxar.archive.3tz+zip": { + source: "iana", + compressible: false + }, + "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.microsoft.windows.thumbnail-cache": { + 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", + compressible: true + }, + "application/vnd.ms-officetheme": { + source: "iana", + extensions: ["thmx"] + }, + "application/vnd.ms-opentype": { + source: "apache", + compressible: true + }, + "application/vnd.ms-outlook": { + compressible: false, + extensions: ["msg"] + }, + "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", + compressible: true + }, + "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", + compressible: true + }, + "application/vnd.ms-printing.printticket+xml": { + source: "apache", + compressible: true + }, + "application/vnd.ms-printschematicket+xml": { + source: "iana", + compressible: true + }, + "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.nacamar.ybrid+json": { + source: "iana", + compressible: true + }, + "application/vnd.ncd.control": { + source: "iana" + }, + "application/vnd.ncd.reference": { + source: "iana" + }, + "application/vnd.nearst.inv+json": { + source: "iana", + compressible: true + }, + "application/vnd.nebumind.line": { + source: "iana" + }, + "application/vnd.nervana": { + source: "iana" + }, + "application/vnd.netfpx": { + source: "iana" + }, + "application/vnd.neurolanguage.nlu": { + source: "iana", + extensions: ["nlu"] + }, + "application/vnd.nimn": { + source: "iana" + }, + "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", + compressible: true + }, + "application/vnd.nokia.iptv.config+xml": { + source: "iana", + compressible: true + }, + "application/vnd.nokia.isds-radio-presets": { + source: "iana" + }, + "application/vnd.nokia.landmark+wbxml": { + source: "iana" + }, + "application/vnd.nokia.landmark+xml": { + source: "iana", + compressible: true + }, + "application/vnd.nokia.landmarkcollection+xml": { + source: "iana", + compressible: true + }, + "application/vnd.nokia.n-gage.ac+xml": { + source: "iana", + compressible: true, + extensions: ["ac"] + }, + "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", + compressible: true + }, + "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.ocf+cbor": { + source: "iana" + }, + "application/vnd.oci.image.manifest.v1+json": { + source: "iana", + compressible: true + }, + "application/vnd.oftn.l10n+json": { + source: "iana", + compressible: true + }, + "application/vnd.oipf.contentaccessdownload+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oipf.contentaccessstreaming+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oipf.cspg-hexbinary": { + source: "iana" + }, + "application/vnd.oipf.dae.svg+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oipf.dae.xhtml+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oipf.mippvcontrolmessage+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oipf.pae.gem": { + source: "iana" + }, + "application/vnd.oipf.spdiscovery+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oipf.spdlist+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oipf.ueprofile+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oipf.userprofile+xml": { + source: "iana", + compressible: true + }, + "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", + compressible: true + }, + "application/vnd.oma.bcast.drm-trigger+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.bcast.imd+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.bcast.ltkm": { + source: "iana" + }, + "application/vnd.oma.bcast.notification+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.bcast.provisioningtrigger": { + source: "iana" + }, + "application/vnd.oma.bcast.sgboot": { + source: "iana" + }, + "application/vnd.oma.bcast.sgdd+xml": { + source: "iana", + compressible: true + }, + "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", + compressible: true + }, + "application/vnd.oma.bcast.sprov+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.bcast.stkm": { + source: "iana" + }, + "application/vnd.oma.cab-address-book+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.cab-feature-handler+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.cab-pcc+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.cab-subs-invite+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.cab-user-prefs+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.dcd": { + source: "iana" + }, + "application/vnd.oma.dcdc": { + source: "iana" + }, + "application/vnd.oma.dd2+xml": { + source: "iana", + compressible: true, + extensions: ["dd2"] + }, + "application/vnd.oma.drm.risd+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.group-usage-list+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.lwm2m+cbor": { + 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", + compressible: true + }, + "application/vnd.oma.poc.detailed-progress-report+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.poc.final-report+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.poc.groups+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.poc.invocation-descriptor+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.poc.optimized-progress-report+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.push": { + source: "iana" + }, + "application/vnd.oma.scidm.messages+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.xcap-directory+xml": { + source: "iana", + compressible: true + }, + "application/vnd.omads-email+xml": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "application/vnd.omads-file+xml": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "application/vnd.omads-folder+xml": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "application/vnd.omaloc-supl-init": { + source: "iana" + }, + "application/vnd.onepager": { + source: "iana" + }, + "application/vnd.onepagertamp": { + source: "iana" + }, + "application/vnd.onepagertamx": { + source: "iana" + }, + "application/vnd.onepagertat": { + source: "iana" + }, + "application/vnd.onepagertatp": { + source: "iana" + }, + "application/vnd.onepagertatx": { + source: "iana" + }, + "application/vnd.openblox.game+xml": { + source: "iana", + compressible: true, + extensions: ["obgx"] + }, + "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", + compressible: true, + extensions: ["osm"] + }, + "application/vnd.opentimestamps.ots": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.custom-properties+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.drawing+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.extended-properties+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.presentationml.presentation": { + source: "iana", + compressible: false, + extensions: ["pptx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slide": { + source: "iana", + extensions: ["sldx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideshow": { + source: "iana", + extensions: ["ppsx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.presentationml.template": { + source: "iana", + extensions: ["potx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": { + source: "iana", + compressible: false, + extensions: ["xlsx"] + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.template": { + source: "iana", + extensions: ["xltx"] + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.theme+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.themeoverride+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.vmldrawing": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document": { + source: "iana", + compressible: false, + extensions: ["docx"] + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.template": { + source: "iana", + extensions: ["dotx"] + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-package.core-properties+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-package.relationships+xml": { + source: "iana", + compressible: true + }, + "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", + compressible: true + }, + "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.patentdive": { + source: "iana" + }, + "application/vnd.patientecommsdoc": { + source: "iana" + }, + "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", + compressible: true + }, + "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.psfs": { + source: "iana" + }, + "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", + compressible: true + }, + "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", + compressible: true + }, + "application/vnd.radisys.msml+xml": { + source: "iana", + compressible: true + }, + "application/vnd.radisys.msml-audit+xml": { + source: "iana", + compressible: true + }, + "application/vnd.radisys.msml-audit-conf+xml": { + source: "iana", + compressible: true + }, + "application/vnd.radisys.msml-audit-conn+xml": { + source: "iana", + compressible: true + }, + "application/vnd.radisys.msml-audit-dialog+xml": { + source: "iana", + compressible: true + }, + "application/vnd.radisys.msml-audit-stream+xml": { + source: "iana", + compressible: true + }, + "application/vnd.radisys.msml-conf+xml": { + source: "iana", + compressible: true + }, + "application/vnd.radisys.msml-dialog+xml": { + source: "iana", + compressible: true + }, + "application/vnd.radisys.msml-dialog-base+xml": { + source: "iana", + compressible: true + }, + "application/vnd.radisys.msml-dialog-fax-detect+xml": { + source: "iana", + compressible: true + }, + "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": { + source: "iana", + compressible: true + }, + "application/vnd.radisys.msml-dialog-group+xml": { + source: "iana", + compressible: true + }, + "application/vnd.radisys.msml-dialog-speech+xml": { + source: "iana", + compressible: true + }, + "application/vnd.radisys.msml-dialog-transform+xml": { + source: "iana", + compressible: true + }, + "application/vnd.rainstor.data": { + source: "iana" + }, + "application/vnd.rapid": { + source: "iana" + }, + "application/vnd.rar": { + source: "iana", + extensions: ["rar"] + }, + "application/vnd.realvnc.bed": { + source: "iana", + extensions: ["bed"] + }, + "application/vnd.recordare.musicxml": { + source: "iana", + extensions: ["mxl"] + }, + "application/vnd.recordare.musicxml+xml": { + source: "iana", + compressible: true, + extensions: ["musicxml"] + }, + "application/vnd.renlearn.rlprint": { + source: "iana" + }, + "application/vnd.resilient.logic": { + source: "iana" + }, + "application/vnd.restful+json": { + source: "iana", + compressible: true + }, + "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", + compressible: true, + 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.sar": { + source: "iana" + }, + "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.seis+json": { + source: "iana", + compressible: true + }, + "application/vnd.sema": { + source: "iana", + extensions: ["sema"] + }, + "application/vnd.semd": { + source: "iana", + extensions: ["semd"] + }, + "application/vnd.semf": { + source: "iana", + extensions: ["semf"] + }, + "application/vnd.shade-save-file": { + source: "iana" + }, + "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.shootproof+json": { + source: "iana", + compressible: true + }, + "application/vnd.shopkick+json": { + source: "iana", + compressible: true + }, + "application/vnd.shp": { + source: "iana" + }, + "application/vnd.shx": { + source: "iana" + }, + "application/vnd.sigrok.session": { + source: "iana" + }, + "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.snesdev-page-table": { + source: "iana" + }, + "application/vnd.software602.filler.form+xml": { + source: "iana", + compressible: true, + extensions: ["fo"] + }, + "application/vnd.software602.filler.form-xml-zip": { + source: "iana" + }, + "application/vnd.solent.sdkm+xml": { + source: "iana", + compressible: true, + extensions: ["sdkm", "sdkd"] + }, + "application/vnd.spotfire.dxp": { + source: "iana", + extensions: ["dxp"] + }, + "application/vnd.spotfire.sfs": { + source: "iana", + extensions: ["sfs"] + }, + "application/vnd.sqlite3": { + source: "iana" + }, + "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", + compressible: true, + extensions: ["wadl"] + }, + "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.sycle+xml": { + source: "iana", + compressible: true + }, + "application/vnd.syft+json": { + source: "iana", + compressible: true + }, + "application/vnd.symbian.install": { + source: "apache", + extensions: ["sis", "sisx"] + }, + "application/vnd.syncml+xml": { + source: "iana", + charset: "UTF-8", + compressible: true, + extensions: ["xsm"] + }, + "application/vnd.syncml.dm+wbxml": { + source: "iana", + charset: "UTF-8", + extensions: ["bdm"] + }, + "application/vnd.syncml.dm+xml": { + source: "iana", + charset: "UTF-8", + compressible: true, + extensions: ["xdm"] + }, + "application/vnd.syncml.dm.notification": { + source: "iana" + }, + "application/vnd.syncml.dmddf+wbxml": { + source: "iana" + }, + "application/vnd.syncml.dmddf+xml": { + source: "iana", + charset: "UTF-8", + compressible: true, + extensions: ["ddf"] + }, + "application/vnd.syncml.dmtnds+wbxml": { + source: "iana" + }, + "application/vnd.syncml.dmtnds+xml": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "application/vnd.syncml.ds.notification": { + source: "iana" + }, + "application/vnd.tableschema+json": { + source: "iana", + compressible: true + }, + "application/vnd.tao.intent-module-archive": { + source: "iana", + extensions: ["tao"] + }, + "application/vnd.tcpdump.pcap": { + source: "iana", + extensions: ["pcap", "cap", "dmp"] + }, + "application/vnd.think-cell.ppttc+json": { + source: "iana", + compressible: true + }, + "application/vnd.tmd.mediaflex.api+xml": { + source: "iana", + compressible: true + }, + "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", + compressible: true, + 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.veritone.aion+json": { + source: "iana", + compressible: true + }, + "application/vnd.veryant.thin": { + source: "iana" + }, + "application/vnd.ves.encrypted": { + 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", + charset: "UTF-8", + 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.dpp": { + source: "iana" + }, + "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", + compressible: true + }, + "application/vnd.wv.ssp+xml": { + source: "iana", + compressible: true + }, + "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", + compressible: true + }, + "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", + compressible: true, + 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.youtube.yt": { + source: "iana" + }, + "application/vnd.zul": { + source: "iana", + extensions: ["zir", "zirz"] + }, + "application/vnd.zzazz.deck+xml": { + source: "iana", + compressible: true, + extensions: ["zaz"] + }, + "application/voicexml+xml": { + source: "iana", + compressible: true, + extensions: ["vxml"] + }, + "application/voucher-cms+json": { + source: "iana", + compressible: true + }, + "application/vq-rtcpxr": { + source: "iana" + }, + "application/wasm": { + source: "iana", + compressible: true, + extensions: ["wasm"] + }, + "application/watcherinfo+xml": { + source: "iana", + compressible: true, + extensions: ["wif"] + }, + "application/webpush-options+json": { + source: "iana", + compressible: true + }, + "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", + compressible: true, + extensions: ["wsdl"] + }, + "application/wspolicy+xml": { + source: "iana", + compressible: true, + 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-arj": { + compressible: false, + extensions: ["arj"] + }, + "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", + compressible: true, + extensions: ["ncx"] + }, + "application/x-dtbook+xml": { + source: "apache", + compressible: true, + extensions: ["dtb"] + }, + "application/x-dtbresource+xml": { + source: "apache", + compressible: true, + 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-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-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-iwork-keynote-sffkey": { + extensions: ["key"] + }, + "application/x-iwork-numbers-sffnumbers": { + extensions: ["numbers"] + }, + "application/x-iwork-pages-sffpages": { + extensions: ["pages"] + }, + "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-keepass2": { + extensions: ["kdbx"] + }, + "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-pki-message": { + source: "iana" + }, + "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-virtualbox-hdd": { + compressible: true, + extensions: ["hdd"] + }, + "application/x-virtualbox-ova": { + compressible: true, + extensions: ["ova"] + }, + "application/x-virtualbox-ovf": { + compressible: true, + extensions: ["ovf"] + }, + "application/x-virtualbox-vbox": { + compressible: true, + extensions: ["vbox"] + }, + "application/x-virtualbox-vbox-extpack": { + compressible: false, + extensions: ["vbox-extpack"] + }, + "application/x-virtualbox-vdi": { + compressible: true, + extensions: ["vdi"] + }, + "application/x-virtualbox-vhd": { + compressible: true, + extensions: ["vhd"] + }, + "application/x-virtualbox-vmdk": { + compressible: true, + extensions: ["vmdk"] + }, + "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: "iana", + extensions: ["der", "crt", "pem"] + }, + "application/x-x509-ca-ra-cert": { + source: "iana" + }, + "application/x-x509-next-ca-cert": { + source: "iana" + }, + "application/x-xfig": { + source: "apache", + extensions: ["fig"] + }, + "application/x-xliff+xml": { + source: "apache", + compressible: true, + 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", + compressible: true + }, + "application/xaml+xml": { + source: "apache", + compressible: true, + extensions: ["xaml"] + }, + "application/xcap-att+xml": { + source: "iana", + compressible: true, + extensions: ["xav"] + }, + "application/xcap-caps+xml": { + source: "iana", + compressible: true, + extensions: ["xca"] + }, + "application/xcap-diff+xml": { + source: "iana", + compressible: true, + extensions: ["xdf"] + }, + "application/xcap-el+xml": { + source: "iana", + compressible: true, + extensions: ["xel"] + }, + "application/xcap-error+xml": { + source: "iana", + compressible: true + }, + "application/xcap-ns+xml": { + source: "iana", + compressible: true, + extensions: ["xns"] + }, + "application/xcon-conference-info+xml": { + source: "iana", + compressible: true + }, + "application/xcon-conference-info-diff+xml": { + source: "iana", + compressible: true + }, + "application/xenc+xml": { + source: "iana", + compressible: true, + extensions: ["xenc"] + }, + "application/xhtml+xml": { + source: "iana", + compressible: true, + extensions: ["xhtml", "xht"] + }, + "application/xhtml-voice+xml": { + source: "apache", + compressible: true + }, + "application/xliff+xml": { + source: "iana", + compressible: true, + extensions: ["xlf"] + }, + "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", + compressible: true + }, + "application/xmpp+xml": { + source: "iana", + compressible: true + }, + "application/xop+xml": { + source: "iana", + compressible: true, + extensions: ["xop"] + }, + "application/xproc+xml": { + source: "apache", + compressible: true, + extensions: ["xpl"] + }, + "application/xslt+xml": { + source: "iana", + compressible: true, + extensions: ["xsl", "xslt"] + }, + "application/xspf+xml": { + source: "apache", + compressible: true, + extensions: ["xspf"] + }, + "application/xv+xml": { + source: "iana", + compressible: true, + 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", + compressible: true + }, + "application/yang-patch+json": { + source: "iana", + compressible: true + }, + "application/yang-patch+xml": { + source: "iana", + compressible: true + }, + "application/yin+xml": { + source: "iana", + compressible: true, + extensions: ["yin"] + }, + "application/zip": { + source: "iana", + compressible: false, + extensions: ["zip"] + }, + "application/zlib": { + source: "iana" + }, + "application/zstd": { + 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/aac": { + source: "iana" + }, + "audio/ac3": { + source: "iana" + }, + "audio/adpcm": { + source: "apache", + extensions: ["adp"] + }, + "audio/amr": { + source: "iana", + extensions: ["amr"] + }, + "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/flexfec": { + 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/melp": { + source: "iana" + }, + "audio/melp1200": { + source: "iana" + }, + "audio/melp2400": { + source: "iana" + }, + "audio/melp600": { + source: "iana" + }, + "audio/mhas": { + source: "iana" + }, + "audio/midi": { + source: "apache", + extensions: ["mid", "midi", "kar", "rmi"] + }, + "audio/mobile-xmf": { + source: "iana", + extensions: ["mxmf"] + }, + "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", "opus"] + }, + "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/scip": { + source: "iana" + }, + "audio/silk": { + source: "apache", + extensions: ["sil"] + }, + "audio/smv": { + source: "iana" + }, + "audio/smv-qcp": { + source: "iana" + }, + "audio/smv0": { + source: "iana" + }, + "audio/sofa": { + 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/tetra_acelp": { + source: "iana" + }, + "audio/tetra_acelp_bb": { + source: "iana" + }, + "audio/tone": { + source: "iana" + }, + "audio/tsvcis": { + source: "iana" + }, + "audio/uemclip": { + source: "iana" + }, + "audio/ulpfec": { + source: "iana" + }, + "audio/usac": { + 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.dts.uhd": { + source: "iana" + }, + "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.presonus.multitrack": { + 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/collection": { + source: "iana", + extensions: ["ttc"] + }, + "font/otf": { + source: "iana", + compressible: true, + extensions: ["otf"] + }, + "font/sfnt": { + source: "iana" + }, + "font/ttf": { + source: "iana", + compressible: true, + extensions: ["ttf"] + }, + "font/woff": { + source: "iana", + extensions: ["woff"] + }, + "font/woff2": { + source: "iana", + extensions: ["woff2"] + }, + "image/aces": { + source: "iana", + extensions: ["exr"] + }, + "image/apng": { + compressible: false, + extensions: ["apng"] + }, + "image/avci": { + source: "iana", + extensions: ["avci"] + }, + "image/avcs": { + source: "iana", + extensions: ["avcs"] + }, + "image/avif": { + source: "iana", + compressible: false, + extensions: ["avif"] + }, + "image/bmp": { + source: "iana", + compressible: true, + extensions: ["bmp"] + }, + "image/cgm": { + source: "iana", + extensions: ["cgm"] + }, + "image/dicom-rle": { + source: "iana", + extensions: ["drle"] + }, + "image/emf": { + source: "iana", + extensions: ["emf"] + }, + "image/fits": { + source: "iana", + extensions: ["fits"] + }, + "image/g3fax": { + source: "iana", + extensions: ["g3"] + }, + "image/gif": { + source: "iana", + compressible: false, + extensions: ["gif"] + }, + "image/heic": { + source: "iana", + extensions: ["heic"] + }, + "image/heic-sequence": { + source: "iana", + extensions: ["heics"] + }, + "image/heif": { + source: "iana", + extensions: ["heif"] + }, + "image/heif-sequence": { + source: "iana", + extensions: ["heifs"] + }, + "image/hej2k": { + source: "iana", + extensions: ["hej2"] + }, + "image/hsj2": { + source: "iana", + extensions: ["hsj2"] + }, + "image/ief": { + source: "iana", + extensions: ["ief"] + }, + "image/jls": { + source: "iana", + extensions: ["jls"] + }, + "image/jp2": { + source: "iana", + compressible: false, + extensions: ["jp2", "jpg2"] + }, + "image/jpeg": { + source: "iana", + compressible: false, + extensions: ["jpeg", "jpg", "jpe"] + }, + "image/jph": { + source: "iana", + extensions: ["jph"] + }, + "image/jphc": { + source: "iana", + extensions: ["jhc"] + }, + "image/jpm": { + source: "iana", + compressible: false, + extensions: ["jpm"] + }, + "image/jpx": { + source: "iana", + compressible: false, + extensions: ["jpx", "jpf"] + }, + "image/jxr": { + source: "iana", + extensions: ["jxr"] + }, + "image/jxra": { + source: "iana", + extensions: ["jxra"] + }, + "image/jxrs": { + source: "iana", + extensions: ["jxrs"] + }, + "image/jxs": { + source: "iana", + extensions: ["jxs"] + }, + "image/jxsc": { + source: "iana", + extensions: ["jxsc"] + }, + "image/jxsi": { + source: "iana", + extensions: ["jxsi"] + }, + "image/jxss": { + source: "iana", + extensions: ["jxss"] + }, + "image/ktx": { + source: "iana", + extensions: ["ktx"] + }, + "image/ktx2": { + source: "iana", + extensions: ["ktx2"] + }, + "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", + extensions: ["pti"] + }, + "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", + extensions: ["t38"] + }, + "image/tiff": { + source: "iana", + compressible: false, + extensions: ["tif", "tiff"] + }, + "image/tiff-fx": { + source: "iana", + extensions: ["tfx"] + }, + "image/vnd.adobe.photoshop": { + source: "iana", + compressible: true, + extensions: ["psd"] + }, + "image/vnd.airzip.accelerator.azv": { + source: "iana", + extensions: ["azv"] + }, + "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", + compressible: true, + extensions: ["ico"] + }, + "image/vnd.mix": { + source: "iana" + }, + "image/vnd.mozilla.apng": { + source: "iana" + }, + "image/vnd.ms-dds": { + compressible: true, + extensions: ["dds"] + }, + "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.pco.b16": { + source: "iana", + extensions: ["b16"] + }, + "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", + extensions: ["tap"] + }, + "image/vnd.valve.source.texture": { + source: "iana", + extensions: ["vtf"] + }, + "image/vnd.wap.wbmp": { + source: "iana", + extensions: ["wbmp"] + }, + "image/vnd.xiff": { + source: "iana", + extensions: ["xif"] + }, + "image/vnd.zbrush.pcx": { + source: "iana", + extensions: ["pcx"] + }, + "image/webp": { + source: "apache", + extensions: ["webp"] + }, + "image/wmf": { + source: "iana", + extensions: ["wmf"] + }, + "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", + extensions: [ + "disposition-notification" + ] + }, + "message/external-body": { + source: "iana" + }, + "message/feedback-report": { + source: "iana" + }, + "message/global": { + source: "iana", + extensions: ["u8msg"] + }, + "message/global-delivery-status": { + source: "iana", + extensions: ["u8dsn"] + }, + "message/global-disposition-notification": { + source: "iana", + extensions: ["u8mdn"] + }, + "message/global-headers": { + source: "iana", + extensions: ["u8hdr"] + }, + "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", + extensions: ["wsc"] + }, + "model/3mf": { + source: "iana", + extensions: ["3mf"] + }, + "model/e57": { + source: "iana" + }, + "model/gltf+json": { + source: "iana", + compressible: true, + extensions: ["gltf"] + }, + "model/gltf-binary": { + source: "iana", + compressible: true, + extensions: ["glb"] + }, + "model/iges": { + source: "iana", + compressible: false, + extensions: ["igs", "iges"] + }, + "model/mesh": { + source: "iana", + compressible: false, + extensions: ["msh", "mesh", "silo"] + }, + "model/mtl": { + source: "iana", + extensions: ["mtl"] + }, + "model/obj": { + source: "iana", + extensions: ["obj"] + }, + "model/step": { + source: "iana" + }, + "model/step+xml": { + source: "iana", + compressible: true, + extensions: ["stpx"] + }, + "model/step+zip": { + source: "iana", + compressible: false, + extensions: ["stpz"] + }, + "model/step-xml+zip": { + source: "iana", + compressible: false, + extensions: ["stpxz"] + }, + "model/stl": { + source: "iana", + extensions: ["stl"] + }, + "model/vnd.collada+xml": { + source: "iana", + compressible: true, + 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", + compressible: true + }, + "model/vnd.mts": { + source: "iana", + extensions: ["mts"] + }, + "model/vnd.opengex": { + source: "iana", + extensions: ["ogex"] + }, + "model/vnd.parasolid.transmit.binary": { + source: "iana", + extensions: ["x_b"] + }, + "model/vnd.parasolid.transmit.text": { + source: "iana", + extensions: ["x_t"] + }, + "model/vnd.pytha.pyox": { + source: "iana" + }, + "model/vnd.rosette.annotated-data-model": { + source: "iana" + }, + "model/vnd.sap.vds": { + source: "iana", + extensions: ["vds"] + }, + "model/vnd.usdz+zip": { + source: "iana", + compressible: false, + extensions: ["usdz"] + }, + "model/vnd.valve.source.compiled-map": { + source: "iana", + extensions: ["bsp"] + }, + "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", + extensions: ["x3db"] + }, + "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", + extensions: ["x3dv"] + }, + "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" + }, + "multipart/multilingual": { + source: "iana" + }, + "multipart/parallel": { + source: "iana" + }, + "multipart/related": { + source: "iana", + compressible: false + }, + "multipart/report": { + source: "iana" + }, + "multipart/signed": { + source: "iana", + compressible: false + }, + "multipart/vnd.bint.med-plus": { + source: "iana" + }, + "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/cql": { + source: "iana" + }, + "text/cql-expression": { + source: "iana" + }, + "text/cql-identifier": { + source: "iana" + }, + "text/css": { + source: "iana", + charset: "UTF-8", + 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/fhirpath": { + source: "iana" + }, + "text/flexfec": { + source: "iana" + }, + "text/fwdred": { + source: "iana" + }, + "text/gff3": { + source: "iana" + }, + "text/grammar-ref-list": { + source: "iana" + }, + "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": { + compressible: true, + extensions: ["less"] + }, + "text/markdown": { + source: "iana", + compressible: true, + extensions: ["markdown", "md"] + }, + "text/mathml": { + source: "nginx", + extensions: ["mml"] + }, + "text/mdx": { + compressible: true, + extensions: ["mdx"] + }, + "text/mizar": { + source: "iana" + }, + "text/n3": { + source: "iana", + charset: "UTF-8", + compressible: true, + extensions: ["n3"] + }, + "text/parameters": { + source: "iana", + charset: "UTF-8" + }, + "text/parityfec": { + source: "iana" + }, + "text/plain": { + source: "iana", + compressible: true, + extensions: ["txt", "text", "conf", "def", "list", "log", "in", "ini"] + }, + "text/provenance-notation": { + source: "iana", + charset: "UTF-8" + }, + "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/shaclc": { + source: "iana" + }, + "text/shex": { + source: "iana", + extensions: ["shex"] + }, + "text/slim": { + extensions: ["slim", "slm"] + }, + "text/spdx": { + source: "iana", + extensions: ["spdx"] + }, + "text/strings": { + source: "iana" + }, + "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", + charset: "UTF-8", + 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", + charset: "UTF-8" + }, + "text/vnd.dmclientscript": { + source: "iana" + }, + "text/vnd.dvb.subtitle": { + source: "iana", + extensions: ["sub"] + }, + "text/vnd.esmertec.theme-descriptor": { + source: "iana", + charset: "UTF-8" + }, + "text/vnd.familysearch.gedcom": { + source: "iana", + extensions: ["ged"] + }, + "text/vnd.ficlab.flt": { + source: "iana" + }, + "text/vnd.fly": { + source: "iana", + extensions: ["fly"] + }, + "text/vnd.fmi.flexstor": { + source: "iana", + extensions: ["flx"] + }, + "text/vnd.gml": { + source: "iana" + }, + "text/vnd.graphviz": { + source: "iana", + extensions: ["gv"] + }, + "text/vnd.hans": { + source: "iana" + }, + "text/vnd.hgl": { + source: "iana" + }, + "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.senx.warpscript": { + source: "iana" + }, + "text/vnd.si.uricatalogue": { + source: "iana" + }, + "text/vnd.sosi": { + source: "iana" + }, + "text/vnd.sun.j2me.app-descriptor": { + source: "iana", + charset: "UTF-8", + extensions: ["jad"] + }, + "text/vnd.trolltech.linguist": { + source: "iana", + charset: "UTF-8" + }, + "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": { + source: "iana", + 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: ["mkd"] + }, + "text/x-nfo": { + source: "apache", + extensions: ["nfo"] + }, + "text/x-opml": { + source: "apache", + extensions: ["opml"] + }, + "text/x-org": { + compressible: true, + extensions: ["org"] + }, + "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": { + compressible: true, + extensions: ["yaml", "yml"] + }, + "video/1d-interleaved-parityfec": { + source: "iana" + }, + "video/3gpp": { + source: "iana", + extensions: ["3gp", "3gpp"] + }, + "video/3gpp-tt": { + source: "iana" + }, + "video/3gpp2": { + source: "iana", + extensions: ["3g2"] + }, + "video/av1": { + source: "iana" + }, + "video/bmpeg": { + source: "iana" + }, + "video/bt656": { + source: "iana" + }, + "video/celb": { + source: "iana" + }, + "video/dv": { + source: "iana" + }, + "video/encaprtp": { + source: "iana" + }, + "video/ffv1": { + source: "iana" + }, + "video/flexfec": { + source: "iana" + }, + "video/h261": { + source: "iana", + extensions: ["h261"] + }, + "video/h263": { + source: "iana", + extensions: ["h263"] + }, + "video/h263-1998": { + source: "iana" + }, + "video/h263-2000": { + source: "iana" + }, + "video/h264": { + source: "iana", + extensions: ["h264"] + }, + "video/h264-rcdo": { + source: "iana" + }, + "video/h264-svc": { + source: "iana" + }, + "video/h265": { + source: "iana" + }, + "video/iso.segment": { + source: "iana", + extensions: ["m4s"] + }, + "video/jpeg": { + source: "iana", + extensions: ["jpgv"] + }, + "video/jpeg2000": { + source: "iana" + }, + "video/jpm": { + source: "apache", + extensions: ["jpm", "jpgm"] + }, + "video/jxsv": { + source: "iana" + }, + "video/mj2": { + source: "iana", + extensions: ["mj2", "mjp2"] + }, + "video/mp1s": { + source: "iana" + }, + "video/mp2p": { + source: "iana" + }, + "video/mp2t": { + source: "iana", + extensions: ["ts"] + }, + "video/mp4": { + source: "iana", + compressible: false, + extensions: ["mp4", "mp4v", "mpg4"] + }, + "video/mp4v-es": { + source: "iana" + }, + "video/mpeg": { + source: "iana", + compressible: false, + extensions: ["mpeg", "mpg", "mpe", "m1v", "m2v"] + }, + "video/mpeg4-generic": { + source: "iana" + }, + "video/mpv": { + source: "iana" + }, + "video/nv": { + source: "iana" + }, + "video/ogg": { + source: "iana", + compressible: false, + extensions: ["ogv"] + }, + "video/parityfec": { + source: "iana" + }, + "video/pointer": { + source: "iana" + }, + "video/quicktime": { + source: "iana", + compressible: false, + extensions: ["qt", "mov"] + }, + "video/raptorfec": { + source: "iana" + }, + "video/raw": { + source: "iana" + }, + "video/rtp-enc-aescm128": { + source: "iana" + }, + "video/rtploopback": { + source: "iana" + }, + "video/rtx": { + source: "iana" + }, + "video/scip": { + source: "iana" + }, + "video/smpte291": { + source: "iana" + }, + "video/smpte292m": { + source: "iana" + }, + "video/ulpfec": { + source: "iana" + }, + "video/vc1": { + source: "iana" + }, + "video/vc2": { + source: "iana" + }, + "video/vnd.cctv": { + source: "iana" + }, + "video/vnd.dece.hd": { + source: "iana", + extensions: ["uvh", "uvvh"] + }, + "video/vnd.dece.mobile": { + source: "iana", + extensions: ["uvm", "uvvm"] + }, + "video/vnd.dece.mp4": { + source: "iana" + }, + "video/vnd.dece.pd": { + source: "iana", + extensions: ["uvp", "uvvp"] + }, + "video/vnd.dece.sd": { + source: "iana", + extensions: ["uvs", "uvvs"] + }, + "video/vnd.dece.video": { + source: "iana", + extensions: ["uvv", "uvvv"] + }, + "video/vnd.directv.mpeg": { + source: "iana" + }, + "video/vnd.directv.mpeg-tts": { + source: "iana" + }, + "video/vnd.dlna.mpeg-tts": { + source: "iana" + }, + "video/vnd.dvb.file": { + source: "iana", + extensions: ["dvb"] + }, + "video/vnd.fvt": { + source: "iana", + extensions: ["fvt"] + }, + "video/vnd.hns.video": { + source: "iana" + }, + "video/vnd.iptvforum.1dparityfec-1010": { + source: "iana" + }, + "video/vnd.iptvforum.1dparityfec-2005": { + source: "iana" + }, + "video/vnd.iptvforum.2dparityfec-1010": { + source: "iana" + }, + "video/vnd.iptvforum.2dparityfec-2005": { + source: "iana" + }, + "video/vnd.iptvforum.ttsavc": { + source: "iana" + }, + "video/vnd.iptvforum.ttsmpeg2": { + source: "iana" + }, + "video/vnd.motorola.video": { + source: "iana" + }, + "video/vnd.motorola.videop": { + source: "iana" + }, + "video/vnd.mpegurl": { + source: "iana", + extensions: ["mxu", "m4u"] + }, + "video/vnd.ms-playready.media.pyv": { + source: "iana", + extensions: ["pyv"] + }, + "video/vnd.nokia.interleaved-multimedia": { + source: "iana" + }, + "video/vnd.nokia.mp4vr": { + source: "iana" + }, + "video/vnd.nokia.videovoip": { + source: "iana" + }, + "video/vnd.objectvideo": { + source: "iana" + }, + "video/vnd.radgamettools.bink": { + source: "iana" + }, + "video/vnd.radgamettools.smacker": { + source: "iana" + }, + "video/vnd.sealed.mpeg1": { + source: "iana" + }, + "video/vnd.sealed.mpeg4": { + source: "iana" + }, + "video/vnd.sealed.swf": { + source: "iana" + }, + "video/vnd.sealedmedia.softseal.mov": { + source: "iana" + }, + "video/vnd.uvvu.mp4": { + source: "iana", + extensions: ["uvu", "uvvu"] + }, + "video/vnd.vivo": { + source: "iana", + extensions: ["viv"] + }, + "video/vnd.youtube.yt": { + source: "iana" + }, + "video/vp8": { + source: "iana" + }, + "video/vp9": { + source: "iana" + }, + "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"(exports2, module2) { + module2.exports = require_db(); + } +}); + +// node_modules/mime-types/index.js +var require_mime_types = __commonJS({ + "node_modules/mime-types/index.js"(exports2) { + "use strict"; + var db = require_mime_db(); + var extname = require("path").extname; + var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/; + var TEXT_TYPE_REGEXP = /^text\//i; + exports2.charset = charset; + exports2.charsets = { lookup: charset }; + exports2.contentType = contentType; + exports2.extension = extension; + exports2.extensions = Object.create(null); + exports2.lookup = lookup; + exports2.types = Object.create(null); + populateMaps(exports2.extensions, exports2.types); + function charset(type) { + if (!type || typeof type !== "string") { + return false; + } + var match = EXTRACT_TYPE_REGEXP.exec(type); + var mime2 = match && db[match[1].toLowerCase()]; + if (mime2 && mime2.charset) { + return mime2.charset; + } + if (match && TEXT_TYPE_REGEXP.test(match[1])) { + return "UTF-8"; + } + return false; + } + function contentType(str) { + if (!str || typeof str !== "string") { + return false; + } + var mime2 = str.indexOf("/") === -1 ? exports2.lookup(str) : str; + if (!mime2) { + return false; + } + if (mime2.indexOf("charset") === -1) { + var charset2 = exports2.charset(mime2); + if (charset2) + mime2 += "; charset=" + charset2.toLowerCase(); + } + return mime2; + } + function extension(type) { + if (!type || typeof type !== "string") { + return false; + } + var match = EXTRACT_TYPE_REGEXP.exec(type); + var exts = match && exports2.extensions[match[1].toLowerCase()]; + if (!exts || !exts.length) { + return false; + } + return exts[0]; + } + function lookup(path2) { + if (!path2 || typeof path2 !== "string") { + return false; + } + var extension2 = extname("x." + path2).toLowerCase().substr(1); + if (!extension2) { + return false; + } + return exports2.types[extension2] || false; + } + function populateMaps(extensions, types) { + var preference = ["nginx", "apache", void 0, "iana"]; + Object.keys(db).forEach(function forEachMimeType(type) { + var mime2 = db[type]; + var exts = mime2.extensions; + if (!exts || !exts.length) { + return; + } + extensions[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(mime2.source); + if (types[extension2] !== "application/octet-stream" && (from > to || from === to && types[extension2].substr(0, 12) === "application/")) { + continue; + } + } + types[extension2] = type; + } + }); + } + } +}); + +// node_modules/type-is/index.js +var require_type_is = __commonJS({ + "node_modules/type-is/index.js"(exports2, module2) { + "use strict"; + var typer = require_media_typer(); + var mime2 = require_mime_types(); + module2.exports = typeofrequest; + module2.exports.is = typeis; + module2.exports.hasBody = hasbody; + module2.exports.normalize = normalize; + module2.exports.match = mimeMatch; + function typeis(value, types_) { + var i; + var types = types_; + var val = tryNormalizeType(value); + if (!val) { + return false; + } + if (types && !Array.isArray(types)) { + types = new Array(arguments.length - 1); + for (i = 0; i < types.length; i++) { + types[i] = arguments[i + 1]; + } + } + if (!types || !types.length) { + return val; + } + var type; + for (i = 0; i < types.length; i++) { + if (mimeMatch(normalize(type = types[i]), val)) { + return type[0] === "+" || type.indexOf("*") !== -1 ? val : type; + } + } + return false; + } + function hasbody(req) { + return req.headers["transfer-encoding"] !== void 0 || !isNaN(req.headers["content-length"]); + } + function typeofrequest(req, types_) { + var types = types_; + if (!hasbody(req)) { + return null; + } + if (arguments.length > 2) { + types = new Array(arguments.length - 1); + for (var i = 0; i < types.length; i++) { + types[i] = arguments[i + 1]; + } + } + var value = req.headers["content-type"]; + return typeis(value, types); + } + function normalize(type) { + if (typeof type !== "string") { + return false; + } + switch (type) { + case "urlencoded": + return "application/x-www-form-urlencoded"; + case "multipart": + return "multipart/*"; + } + if (type[0] === "+") { + return "*/*" + type; + } + return type.indexOf("/") === -1 ? mime2.lookup(type) : type; + } + function mimeMatch(expected, actual) { + if (expected === false) { + return false; + } + var actualParts = actual.split("/"); + var expectedParts = expected.split("/"); + if (actualParts.length !== 2 || expectedParts.length !== 2) { + return false; + } + if (expectedParts[0] !== "*" && expectedParts[0] !== actualParts[0]) { + return false; + } + if (expectedParts[1].substr(0, 2) === "*+") { + return expectedParts[1].length <= actualParts[1].length + 1 && expectedParts[1].substr(1) === actualParts[1].substr(1 - expectedParts[1].length); + } + if (expectedParts[1] !== "*" && expectedParts[1] !== actualParts[1]) { + return false; + } + return true; + } + function normalizeType(value) { + var type = typer.parse(value); + type.parameters = void 0; + return typer.format(type); + } + function tryNormalizeType(value) { + if (!value) { + return null; + } + try { + return normalizeType(value); + } catch (err) { + return null; + } + } + } +}); + +// node_modules/body-parser/lib/types/json.js +var require_json = __commonJS({ + "node_modules/body-parser/lib/types/json.js"(exports2, module2) { + "use strict"; + var bytes = require_bytes(); + var contentType = require_content_type(); + var createError = require_http_errors(); + var debug = require_src()("body-parser:json"); + var isFinished = require_on_finished().isFinished; + var read = require_read(); + var typeis = require_type_is(); + module2.exports = json; + var FIRST_CHAR_REGEXP = /^[\x20\x09\x0a\x0d]*(.)/; + function json(options) { + var opts = options || {}; + var limit = typeof opts.limit !== "number" ? bytes.parse(opts.limit || "100kb") : opts.limit; + var inflate = opts.inflate !== false; + var reviver = opts.reviver; + var strict = opts.strict !== false; + var type = opts.type || "application/json"; + var verify = opts.verify || false; + if (verify !== false && typeof verify !== "function") { + throw new TypeError("option verify must be function"); + } + var shouldParse = typeof type !== "function" ? typeChecker(type) : type; + function parse(body) { + if (body.length === 0) { + return {}; + } + if (strict) { + var first = firstchar(body); + if (first !== "{" && first !== "[") { + debug("strict violation"); + throw createStrictSyntaxError(body, first); + } + } + try { + debug("parse json"); + return JSON.parse(body, reviver); + } catch (e) { + throw normalizeJsonSyntaxError(e, { + message: e.message, + stack: e.stack + }); + } + } + return function jsonParser(req, res, next) { + if (isFinished(req)) { + debug("body already parsed"); + next(); + return; + } + if (!("body" in req)) { + req.body = void 0; + } + if (!typeis.hasBody(req)) { + debug("skip empty body"); + next(); + return; + } + debug("content-type %j", req.headers["content-type"]); + if (!shouldParse(req)) { + debug("skip parsing"); + next(); + return; + } + var charset = getCharset(req) || "utf-8"; + if (charset.substr(0, 4) !== "utf-") { + debug("invalid charset"); + next(createError(415, 'unsupported charset "' + charset.toUpperCase() + '"', { + charset, + type: "charset.unsupported" + })); + return; + } + read(req, res, next, parse, debug, { + encoding: charset, + inflate, + limit, + verify + }); + }; + } + function createStrictSyntaxError(str, char) { + var index = str.indexOf(char); + var partial = str.substring(0, index) + "#"; + try { + JSON.parse(partial); + throw new SyntaxError("strict violation"); + } catch (e) { + return normalizeJsonSyntaxError(e, { + message: e.message.replace("#", char), + stack: e.stack + }); + } + } + function firstchar(str) { + return FIRST_CHAR_REGEXP.exec(str)[1]; + } + function getCharset(req) { + try { + return (contentType.parse(req).parameters.charset || "").toLowerCase(); + } catch (e) { + return void 0; + } + } + function normalizeJsonSyntaxError(error, obj) { + var keys = Object.getOwnPropertyNames(error); + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (key !== "stack" && key !== "message") { + delete error[key]; + } + } + error.stack = obj.stack.replace(error.message, obj.message); + error.message = obj.message; + return error; + } + function typeChecker(type) { + return function checkType(req) { + return Boolean(typeis(req, type)); + }; + } + } +}); + +// node_modules/body-parser/lib/types/raw.js +var require_raw = __commonJS({ + "node_modules/body-parser/lib/types/raw.js"(exports2, module2) { + "use strict"; + var bytes = require_bytes(); + var debug = require_src()("body-parser:raw"); + var isFinished = require_on_finished().isFinished; + var read = require_read(); + var typeis = require_type_is(); + module2.exports = raw; + function raw(options) { + var opts = options || {}; + var inflate = opts.inflate !== false; + var limit = typeof opts.limit !== "number" ? bytes.parse(opts.limit || "100kb") : opts.limit; + var type = opts.type || "application/octet-stream"; + var verify = opts.verify || false; + if (verify !== false && typeof verify !== "function") { + throw new TypeError("option verify must be function"); + } + var shouldParse = typeof type !== "function" ? typeChecker(type) : type; + function parse(buf) { + return buf; + } + return function rawParser(req, res, next) { + if (isFinished(req)) { + debug("body already parsed"); + next(); + return; + } + if (!("body" in req)) { + req.body = void 0; + } + if (!typeis.hasBody(req)) { + debug("skip empty body"); + next(); + return; + } + debug("content-type %j", req.headers["content-type"]); + if (!shouldParse(req)) { + debug("skip parsing"); + next(); + return; + } + read(req, res, next, parse, debug, { + encoding: null, + inflate, + limit, + verify + }); + }; + } + function typeChecker(type) { + return function checkType(req) { + return Boolean(typeis(req, type)); + }; + } + } +}); + +// node_modules/body-parser/lib/types/text.js +var require_text = __commonJS({ + "node_modules/body-parser/lib/types/text.js"(exports2, module2) { + "use strict"; + var bytes = require_bytes(); + var contentType = require_content_type(); + var debug = require_src()("body-parser:text"); + var isFinished = require_on_finished().isFinished; + var read = require_read(); + var typeis = require_type_is(); + module2.exports = text; + function text(options) { + var opts = options || {}; + var defaultCharset = opts.defaultCharset || "utf-8"; + var inflate = opts.inflate !== false; + var limit = typeof opts.limit !== "number" ? bytes.parse(opts.limit || "100kb") : opts.limit; + var type = opts.type || "text/plain"; + var verify = opts.verify || false; + if (verify !== false && typeof verify !== "function") { + throw new TypeError("option verify must be function"); + } + var shouldParse = typeof type !== "function" ? typeChecker(type) : type; + function parse(buf) { + return buf; + } + return function textParser(req, res, next) { + if (isFinished(req)) { + debug("body already parsed"); + next(); + return; + } + if (!("body" in req)) { + req.body = void 0; + } + if (!typeis.hasBody(req)) { + debug("skip empty body"); + next(); + return; + } + debug("content-type %j", req.headers["content-type"]); + if (!shouldParse(req)) { + debug("skip parsing"); + next(); + return; + } + var charset = getCharset(req) || defaultCharset; + read(req, res, next, parse, debug, { + encoding: charset, + inflate, + limit, + verify + }); + }; + } + function getCharset(req) { + try { + return (contentType.parse(req).parameters.charset || "").toLowerCase(); + } catch (e) { + return void 0; + } + } + function typeChecker(type) { + return function checkType(req) { + return Boolean(typeis(req, type)); + }; + } + } +}); + +// node_modules/qs/lib/formats.js +var require_formats = __commonJS({ + "node_modules/qs/lib/formats.js"(exports2, module2) { + "use strict"; + var replace = String.prototype.replace; + var percentTwenties = /%20/g; + var Format = { + RFC1738: "RFC1738", + RFC3986: "RFC3986" + }; + module2.exports = { + "default": Format.RFC3986, + formatters: { + RFC1738: function(value) { + return replace.call(value, percentTwenties, "+"); + }, + RFC3986: function(value) { + return String(value); + } + }, + RFC1738: Format.RFC1738, + RFC3986: Format.RFC3986 + }; + } +}); + +// node_modules/qs/lib/utils.js +var require_utils = __commonJS({ + "node_modules/qs/lib/utils.js"(exports2, module2) { + "use strict"; + var formats = require_formats(); + var has = Object.prototype.hasOwnProperty; + var isArray = Array.isArray; + var hexTable = function() { + var array = []; + for (var i = 0; i < 256; ++i) { + array.push("%" + ((i < 16 ? "0" : "") + i.toString(16)).toUpperCase()); + } + return array; + }(); + var compactQueue = function compactQueue2(queue) { + while (queue.length > 1) { + var item = queue.pop(); + var obj = item.obj[item.prop]; + if (isArray(obj)) { + var compacted = []; + for (var j = 0; j < obj.length; ++j) { + if (typeof obj[j] !== "undefined") { + compacted.push(obj[j]); + } + } + item.obj[item.prop] = compacted; + } + } + }; + var arrayToObject = function arrayToObject2(source, options) { + var obj = options && options.plainObjects ? Object.create(null) : {}; + for (var i = 0; i < source.length; ++i) { + if (typeof source[i] !== "undefined") { + obj[i] = source[i]; + } + } + return obj; + }; + var merge = function merge2(target, source, options) { + if (!source) { + return target; + } + if (typeof source !== "object") { + if (isArray(target)) { + target.push(source); + } else if (target && typeof target === "object") { + if (options && (options.plainObjects || options.allowPrototypes) || !has.call(Object.prototype, source)) { + target[source] = true; + } + } else { + return [target, source]; + } + return target; + } + if (!target || typeof target !== "object") { + return [target].concat(source); + } + var mergeTarget = target; + if (isArray(target) && !isArray(source)) { + mergeTarget = arrayToObject(target, options); + } + if (isArray(target) && isArray(source)) { + source.forEach(function(item, i) { + if (has.call(target, i)) { + var targetItem = target[i]; + if (targetItem && typeof targetItem === "object" && item && typeof item === "object") { + target[i] = merge2(targetItem, item, options); + } else { + target.push(item); + } + } else { + target[i] = item; + } + }); + return target; + } + return Object.keys(source).reduce(function(acc, key) { + var value = source[key]; + if (has.call(acc, key)) { + acc[key] = merge2(acc[key], value, options); + } else { + acc[key] = value; + } + return acc; + }, mergeTarget); + }; + var assign = function assignSingleSource(target, source) { + return Object.keys(source).reduce(function(acc, key) { + acc[key] = source[key]; + return acc; + }, target); + }; + var decode = function(str, decoder, charset) { + var strWithoutPlus = str.replace(/\+/g, " "); + if (charset === "iso-8859-1") { + return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape); + } + try { + return decodeURIComponent(strWithoutPlus); + } catch (e) { + return strWithoutPlus; + } + }; + var encode = function encode2(str, defaultEncoder, charset, kind, format) { + if (str.length === 0) { + return str; + } + var string = str; + if (typeof str === "symbol") { + string = Symbol.prototype.toString.call(str); + } else if (typeof str !== "string") { + string = String(str); + } + if (charset === "iso-8859-1") { + return escape(string).replace(/%u[0-9a-f]{4}/gi, function($0) { + return "%26%23" + parseInt($0.slice(2), 16) + "%3B"; + }); + } + var out = ""; + for (var i = 0; i < string.length; ++i) { + var c = string.charCodeAt(i); + if (c === 45 || c === 46 || c === 95 || c === 126 || c >= 48 && c <= 57 || c >= 65 && c <= 90 || c >= 97 && c <= 122 || format === formats.RFC1738 && (c === 40 || c === 41)) { + out += string.charAt(i); + continue; + } + if (c < 128) { + out = out + hexTable[c]; + continue; + } + if (c < 2048) { + out = out + (hexTable[192 | c >> 6] + hexTable[128 | c & 63]); + continue; + } + if (c < 55296 || c >= 57344) { + out = out + (hexTable[224 | c >> 12] + hexTable[128 | c >> 6 & 63] + hexTable[128 | c & 63]); + continue; + } + i += 1; + c = 65536 + ((c & 1023) << 10 | string.charCodeAt(i) & 1023); + out += hexTable[240 | c >> 18] + hexTable[128 | c >> 12 & 63] + hexTable[128 | c >> 6 & 63] + hexTable[128 | c & 63]; + } + return out; + }; + var compact = function compact2(value) { + var queue = [{ obj: { o: value }, prop: "o" }]; + var refs = []; + for (var i = 0; i < queue.length; ++i) { + var item = queue[i]; + var obj = item.obj[item.prop]; + var keys = Object.keys(obj); + for (var j = 0; j < keys.length; ++j) { + var key = keys[j]; + var val = obj[key]; + if (typeof val === "object" && val !== null && refs.indexOf(val) === -1) { + queue.push({ obj, prop: key }); + refs.push(val); + } + } + } + compactQueue(queue); + return value; + }; + var isRegExp = function isRegExp2(obj) { + return Object.prototype.toString.call(obj) === "[object RegExp]"; + }; + var isBuffer = function isBuffer2(obj) { + if (!obj || typeof obj !== "object") { + return false; + } + return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj)); + }; + var combine = function combine2(a, b) { + return [].concat(a, b); + }; + var maybeMap = function maybeMap2(val, fn2) { + if (isArray(val)) { + var mapped = []; + for (var i = 0; i < val.length; i += 1) { + mapped.push(fn2(val[i])); + } + return mapped; + } + return fn2(val); + }; + module2.exports = { + arrayToObject, + assign, + combine, + compact, + decode, + encode, + isBuffer, + isRegExp, + maybeMap, + merge + }; + } +}); + +// node_modules/qs/lib/stringify.js +var require_stringify = __commonJS({ + "node_modules/qs/lib/stringify.js"(exports2, module2) { + "use strict"; + var utils = require_utils(); + var formats = require_formats(); + var has = Object.prototype.hasOwnProperty; + var arrayPrefixGenerators = { + brackets: function brackets(prefix) { + return prefix + "[]"; + }, + comma: "comma", + indices: function indices(prefix, key) { + return prefix + "[" + key + "]"; + }, + repeat: function repeat(prefix) { + return prefix; + } + }; + var isArray = Array.isArray; + var push = Array.prototype.push; + var pushToArray = function(arr, valueOrArray) { + push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]); + }; + var toISO = Date.prototype.toISOString; + var defaultFormat = formats["default"]; + var defaults = { + addQueryPrefix: false, + allowDots: false, + charset: "utf-8", + charsetSentinel: false, + delimiter: "&", + encode: true, + encoder: utils.encode, + encodeValuesOnly: false, + format: defaultFormat, + formatter: formats.formatters[defaultFormat], + indices: false, + serializeDate: function serializeDate(date) { + return toISO.call(date); + }, + skipNulls: false, + strictNullHandling: false + }; + var isNonNullishPrimitive = function isNonNullishPrimitive2(v) { + return typeof v === "string" || typeof v === "number" || typeof v === "boolean" || typeof v === "symbol" || typeof v === "bigint"; + }; + var stringify = function stringify2(object, prefix, generateArrayPrefix, strictNullHandling, skipNulls, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset) { + var obj = object; + if (typeof filter === "function") { + obj = filter(prefix, obj); + } else if (obj instanceof Date) { + obj = serializeDate(obj); + } else if (generateArrayPrefix === "comma" && isArray(obj)) { + obj = utils.maybeMap(obj, function(value2) { + if (value2 instanceof Date) { + return serializeDate(value2); + } + return value2; + }); + } + if (obj === null) { + if (strictNullHandling) { + return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, "key", format) : prefix; + } + obj = ""; + } + if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) { + if (encoder) { + var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, "key", format); + return [formatter(keyValue) + "=" + formatter(encoder(obj, defaults.encoder, charset, "value", format))]; + } + return [formatter(prefix) + "=" + formatter(String(obj))]; + } + var values = []; + if (typeof obj === "undefined") { + return values; + } + var objKeys; + if (generateArrayPrefix === "comma" && isArray(obj)) { + objKeys = [{ value: obj.length > 0 ? obj.join(",") || null : void 0 }]; + } else if (isArray(filter)) { + objKeys = filter; + } else { + var keys = Object.keys(obj); + objKeys = sort ? keys.sort(sort) : keys; + } + for (var i = 0; i < objKeys.length; ++i) { + var key = objKeys[i]; + var value = typeof key === "object" && key.value !== void 0 ? key.value : obj[key]; + if (skipNulls && value === null) { + continue; + } + var keyPrefix = isArray(obj) ? typeof generateArrayPrefix === "function" ? generateArrayPrefix(prefix, key) : prefix : prefix + (allowDots ? "." + key : "[" + key + "]"); + pushToArray(values, stringify2(value, keyPrefix, generateArrayPrefix, strictNullHandling, skipNulls, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset)); + } + return values; + }; + var normalizeStringifyOptions = function normalizeStringifyOptions2(opts) { + if (!opts) { + return defaults; + } + if (opts.encoder !== null && opts.encoder !== void 0 && typeof opts.encoder !== "function") { + throw new TypeError("Encoder has to be a function."); + } + var charset = opts.charset || defaults.charset; + if (typeof opts.charset !== "undefined" && opts.charset !== "utf-8" && opts.charset !== "iso-8859-1") { + throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined"); + } + var format = formats["default"]; + if (typeof opts.format !== "undefined") { + if (!has.call(formats.formatters, opts.format)) { + throw new TypeError("Unknown format option provided."); + } + format = opts.format; + } + var formatter = formats.formatters[format]; + var filter = defaults.filter; + if (typeof opts.filter === "function" || isArray(opts.filter)) { + filter = opts.filter; + } + return { + addQueryPrefix: typeof opts.addQueryPrefix === "boolean" ? opts.addQueryPrefix : defaults.addQueryPrefix, + allowDots: typeof opts.allowDots === "undefined" ? defaults.allowDots : !!opts.allowDots, + charset, + charsetSentinel: typeof opts.charsetSentinel === "boolean" ? opts.charsetSentinel : defaults.charsetSentinel, + delimiter: typeof opts.delimiter === "undefined" ? defaults.delimiter : opts.delimiter, + encode: typeof opts.encode === "boolean" ? opts.encode : defaults.encode, + encoder: typeof opts.encoder === "function" ? opts.encoder : defaults.encoder, + encodeValuesOnly: typeof opts.encodeValuesOnly === "boolean" ? opts.encodeValuesOnly : defaults.encodeValuesOnly, + filter, + format, + formatter, + serializeDate: typeof opts.serializeDate === "function" ? opts.serializeDate : defaults.serializeDate, + skipNulls: typeof opts.skipNulls === "boolean" ? opts.skipNulls : defaults.skipNulls, + sort: typeof opts.sort === "function" ? opts.sort : null, + strictNullHandling: typeof opts.strictNullHandling === "boolean" ? opts.strictNullHandling : defaults.strictNullHandling + }; + }; + module2.exports = function(object, opts) { + var obj = object; + var options = normalizeStringifyOptions(opts); + var objKeys; + var filter; + if (typeof options.filter === "function") { + filter = options.filter; + obj = filter("", obj); + } else if (isArray(options.filter)) { + filter = options.filter; + objKeys = filter; + } + var keys = []; + if (typeof obj !== "object" || obj === null) { + return ""; + } + var arrayFormat; + if (opts && opts.arrayFormat in arrayPrefixGenerators) { + arrayFormat = opts.arrayFormat; + } else if (opts && "indices" in opts) { + arrayFormat = opts.indices ? "indices" : "repeat"; + } else { + arrayFormat = "indices"; + } + var generateArrayPrefix = arrayPrefixGenerators[arrayFormat]; + if (!objKeys) { + objKeys = Object.keys(obj); + } + if (options.sort) { + objKeys.sort(options.sort); + } + for (var i = 0; i < objKeys.length; ++i) { + var key = objKeys[i]; + if (options.skipNulls && obj[key] === null) { + continue; + } + pushToArray(keys, stringify(obj[key], key, generateArrayPrefix, options.strictNullHandling, options.skipNulls, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.format, options.formatter, options.encodeValuesOnly, options.charset)); + } + var joined = keys.join(options.delimiter); + var prefix = options.addQueryPrefix === true ? "?" : ""; + if (options.charsetSentinel) { + if (options.charset === "iso-8859-1") { + prefix += "utf8=%26%2310003%3B&"; + } else { + prefix += "utf8=%E2%9C%93&"; + } + } + return joined.length > 0 ? prefix + joined : ""; + }; + } +}); + +// node_modules/qs/lib/parse.js +var require_parse = __commonJS({ + "node_modules/qs/lib/parse.js"(exports2, module2) { + "use strict"; + var utils = require_utils(); + var has = Object.prototype.hasOwnProperty; + var isArray = Array.isArray; + var defaults = { + allowDots: false, + allowPrototypes: false, + arrayLimit: 20, + charset: "utf-8", + charsetSentinel: false, + comma: false, + decoder: utils.decode, + delimiter: "&", + depth: 5, + ignoreQueryPrefix: false, + interpretNumericEntities: false, + parameterLimit: 1e3, + parseArrays: true, + plainObjects: false, + strictNullHandling: false + }; + var interpretNumericEntities = function(str) { + return str.replace(/&#(\d+);/g, function($0, numberStr) { + return String.fromCharCode(parseInt(numberStr, 10)); + }); + }; + var parseArrayValue = function(val, options) { + if (val && typeof val === "string" && options.comma && val.indexOf(",") > -1) { + return val.split(","); + } + return val; + }; + var isoSentinel = "utf8=%26%2310003%3B"; + var charsetSentinel = "utf8=%E2%9C%93"; + var parseValues = function parseQueryStringValues(str, options) { + var obj = {}; + var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\?/, "") : str; + var limit = options.parameterLimit === Infinity ? void 0 : options.parameterLimit; + var parts = cleanStr.split(options.delimiter, limit); + var skipIndex = -1; + var i; + var charset = options.charset; + if (options.charsetSentinel) { + for (i = 0; i < parts.length; ++i) { + if (parts[i].indexOf("utf8=") === 0) { + if (parts[i] === charsetSentinel) { + charset = "utf-8"; + } else if (parts[i] === isoSentinel) { + charset = "iso-8859-1"; + } + skipIndex = i; + i = parts.length; + } + } + } + for (i = 0; i < parts.length; ++i) { + if (i === skipIndex) { + continue; + } + var part = parts[i]; + var bracketEqualsPos = part.indexOf("]="); + var pos = bracketEqualsPos === -1 ? part.indexOf("=") : bracketEqualsPos + 1; + var key, val; + if (pos === -1) { + key = options.decoder(part, defaults.decoder, charset, "key"); + val = options.strictNullHandling ? null : ""; + } else { + key = options.decoder(part.slice(0, pos), defaults.decoder, charset, "key"); + val = utils.maybeMap(parseArrayValue(part.slice(pos + 1), options), function(encodedVal) { + return options.decoder(encodedVal, defaults.decoder, charset, "value"); + }); + } + if (val && options.interpretNumericEntities && charset === "iso-8859-1") { + val = interpretNumericEntities(val); + } + if (part.indexOf("[]=") > -1) { + val = isArray(val) ? [val] : val; + } + if (has.call(obj, key)) { + obj[key] = utils.combine(obj[key], val); + } else { + obj[key] = val; + } + } + return obj; + }; + var parseObject = function(chain, val, options, valuesParsed) { + var leaf = valuesParsed ? val : parseArrayValue(val, options); + for (var i = chain.length - 1; i >= 0; --i) { + var obj; + var root = chain[i]; + if (root === "[]" && options.parseArrays) { + obj = [].concat(leaf); + } else { + obj = options.plainObjects ? Object.create(null) : {}; + var cleanRoot = root.charAt(0) === "[" && root.charAt(root.length - 1) === "]" ? root.slice(1, -1) : root; + var index = parseInt(cleanRoot, 10); + if (!options.parseArrays && cleanRoot === "") { + obj = { 0: leaf }; + } else if (!isNaN(index) && root !== cleanRoot && String(index) === cleanRoot && index >= 0 && (options.parseArrays && index <= options.arrayLimit)) { + obj = []; + obj[index] = leaf; + } else { + obj[cleanRoot] = leaf; + } + } + leaf = obj; + } + return leaf; + }; + var parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) { + if (!givenKey) { + return; + } + var key = options.allowDots ? givenKey.replace(/\.([^.[]+)/g, "[$1]") : givenKey; + var brackets = /(\[[^[\]]*])/; + var child = /(\[[^[\]]*])/g; + var segment = options.depth > 0 && brackets.exec(key); + var parent = segment ? key.slice(0, segment.index) : key; + var keys = []; + if (parent) { + if (!options.plainObjects && has.call(Object.prototype, parent)) { + if (!options.allowPrototypes) { + return; + } + } + keys.push(parent); + } + var i = 0; + while (options.depth > 0 && (segment = child.exec(key)) !== null && i < options.depth) { + i += 1; + if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) { + if (!options.allowPrototypes) { + return; + } + } + keys.push(segment[1]); + } + if (segment) { + keys.push("[" + key.slice(segment.index) + "]"); + } + return parseObject(keys, val, options, valuesParsed); + }; + var normalizeParseOptions = function normalizeParseOptions2(opts) { + if (!opts) { + return defaults; + } + if (opts.decoder !== null && opts.decoder !== void 0 && typeof opts.decoder !== "function") { + throw new TypeError("Decoder has to be a function."); + } + if (typeof opts.charset !== "undefined" && opts.charset !== "utf-8" && opts.charset !== "iso-8859-1") { + throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined"); + } + var charset = typeof opts.charset === "undefined" ? defaults.charset : opts.charset; + return { + allowDots: typeof opts.allowDots === "undefined" ? defaults.allowDots : !!opts.allowDots, + allowPrototypes: typeof opts.allowPrototypes === "boolean" ? opts.allowPrototypes : defaults.allowPrototypes, + arrayLimit: typeof opts.arrayLimit === "number" ? opts.arrayLimit : defaults.arrayLimit, + charset, + charsetSentinel: typeof opts.charsetSentinel === "boolean" ? opts.charsetSentinel : defaults.charsetSentinel, + comma: typeof opts.comma === "boolean" ? opts.comma : defaults.comma, + decoder: typeof opts.decoder === "function" ? opts.decoder : defaults.decoder, + delimiter: typeof opts.delimiter === "string" || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter, + depth: typeof opts.depth === "number" || opts.depth === false ? +opts.depth : defaults.depth, + ignoreQueryPrefix: opts.ignoreQueryPrefix === true, + interpretNumericEntities: typeof opts.interpretNumericEntities === "boolean" ? opts.interpretNumericEntities : defaults.interpretNumericEntities, + parameterLimit: typeof opts.parameterLimit === "number" ? opts.parameterLimit : defaults.parameterLimit, + parseArrays: opts.parseArrays !== false, + plainObjects: typeof opts.plainObjects === "boolean" ? opts.plainObjects : defaults.plainObjects, + strictNullHandling: typeof opts.strictNullHandling === "boolean" ? opts.strictNullHandling : defaults.strictNullHandling + }; + }; + module2.exports = function(str, opts) { + var options = normalizeParseOptions(opts); + if (str === "" || str === null || typeof str === "undefined") { + return options.plainObjects ? Object.create(null) : {}; + } + var tempObj = typeof str === "string" ? parseValues(str, options) : str; + var obj = options.plainObjects ? Object.create(null) : {}; + var keys = Object.keys(tempObj); + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + var newObj = parseKeys(key, tempObj[key], options, typeof str === "string"); + obj = utils.merge(obj, newObj, options); + } + return utils.compact(obj); + }; + } +}); + +// node_modules/qs/lib/index.js +var require_lib4 = __commonJS({ + "node_modules/qs/lib/index.js"(exports2, module2) { + "use strict"; + var stringify = require_stringify(); + var parse = require_parse(); + var formats = require_formats(); + module2.exports = { + formats, + parse, + stringify + }; + } +}); + +// node_modules/body-parser/lib/types/urlencoded.js +var require_urlencoded = __commonJS({ + "node_modules/body-parser/lib/types/urlencoded.js"(exports2, module2) { + "use strict"; + var bytes = require_bytes(); + var contentType = require_content_type(); + var createError = require_http_errors(); + var debug = require_src()("body-parser:urlencoded"); + var isFinished = require_on_finished().isFinished; + var read = require_read(); + var typeis = require_type_is(); + module2.exports = urlencoded; + var parsers = Object.create(null); + function urlencoded(options) { + var opts = options || {}; + var extended = Boolean(opts.extended); + var inflate = opts.inflate !== false; + var limit = typeof opts.limit !== "number" ? bytes.parse(opts.limit || "100kb") : opts.limit; + var type = opts.type || "application/x-www-form-urlencoded"; + var verify = opts.verify || false; + if (verify !== false && typeof verify !== "function") { + throw new TypeError("option verify must be function"); + } + var queryparse = extended ? extendedparser(opts) : simpleparser(opts); + var shouldParse = typeof type !== "function" ? typeChecker(type) : type; + function parse(body) { + return body.length ? queryparse(body) : {}; + } + return function urlencodedParser(req, res, next) { + if (isFinished(req)) { + debug("body already parsed"); + next(); + return; + } + if (!("body" in req)) { + req.body = void 0; + } + if (!typeis.hasBody(req)) { + debug("skip empty body"); + next(); + return; + } + debug("content-type %j", req.headers["content-type"]); + if (!shouldParse(req)) { + debug("skip parsing"); + next(); + return; + } + var charset = getCharset(req) || "utf-8"; + if (charset !== "utf-8") { + debug("invalid charset"); + next(createError(415, 'unsupported charset "' + charset.toUpperCase() + '"', { + charset, + type: "charset.unsupported" + })); + return; + } + read(req, res, next, parse, debug, { + debug, + encoding: charset, + inflate, + limit, + verify + }); + }; + } + function extendedparser(options) { + var parameterLimit = options.parameterLimit !== void 0 ? options.parameterLimit : 1e3; + var parse = parser("qs"); + if (isNaN(parameterLimit) || parameterLimit < 1) { + throw new TypeError("option parameterLimit must be a positive number"); + } + if (isFinite(parameterLimit)) { + parameterLimit = parameterLimit | 0; + } + return function queryparse(body) { + var paramCount = parameterCount(body, parameterLimit); + if (paramCount === void 0) { + debug("too many parameters"); + throw createError(413, "too many parameters", { + type: "parameters.too.many" + }); + } + var arrayLimit = Math.max(100, paramCount); + debug("parse extended urlencoding"); + return parse(body, { + allowPrototypes: true, + arrayLimit, + depth: Infinity, + parameterLimit + }); + }; + } + function getCharset(req) { + try { + return (contentType.parse(req).parameters.charset || "").toLowerCase(); + } catch (e) { + return void 0; + } + } + function parameterCount(body, limit) { + var count = 0; + var index = 0; + while ((index = body.indexOf("&", index)) !== -1) { + count++; + index++; + if (count === limit) { + return void 0; + } + } + return count; + } + function parser(name) { + var mod = parsers[name]; + if (mod !== void 0) { + return mod.parse; + } + switch (name) { + case "qs": + mod = require_lib4(); + break; + case "querystring": + mod = require("querystring"); + break; + } + parsers[name] = mod; + return mod.parse; + } + function simpleparser(options) { + var parameterLimit = options.parameterLimit !== void 0 ? options.parameterLimit : 1e3; + var parse = parser("querystring"); + if (isNaN(parameterLimit) || parameterLimit < 1) { + throw new TypeError("option parameterLimit must be a positive number"); + } + if (isFinite(parameterLimit)) { + parameterLimit = parameterLimit | 0; + } + return function queryparse(body) { + var paramCount = parameterCount(body, parameterLimit); + if (paramCount === void 0) { + debug("too many parameters"); + throw createError(413, "too many parameters", { + type: "parameters.too.many" + }); + } + debug("parse urlencoding"); + return parse(body, void 0, void 0, { maxKeys: parameterLimit }); + }; + } + function typeChecker(type) { + return function checkType(req) { + return Boolean(typeis(req, type)); + }; + } + } +}); + +// node_modules/body-parser/index.js +var require_body_parser = __commonJS({ + "node_modules/body-parser/index.js"(exports2, module2) { + "use strict"; + var deprecate2 = require_depd()("body-parser"); + var parsers = Object.create(null); + exports2 = module2.exports = deprecate2.function(bodyParser2, "bodyParser: use individual json/urlencoded middlewares"); + Object.defineProperty(exports2, "json", { + configurable: true, + enumerable: true, + get: createParserGetter("json") + }); + Object.defineProperty(exports2, "raw", { + configurable: true, + enumerable: true, + get: createParserGetter("raw") + }); + Object.defineProperty(exports2, "text", { + configurable: true, + enumerable: true, + get: createParserGetter("text") + }); + Object.defineProperty(exports2, "urlencoded", { + configurable: true, + enumerable: true, + get: createParserGetter("urlencoded") + }); + function bodyParser2(options) { + var opts = {}; + if (options) { + for (var prop in options) { + if (prop !== "type") { + opts[prop] = options[prop]; + } + } + } + var _urlencoded = exports2.urlencoded(opts); + var _json = exports2.json(opts); + return function bodyParser3(req, res, next) { + _json(req, res, function(err) { + if (err) + return next(err); + _urlencoded(req, res, next); + }); + }; + } + function createParserGetter(name) { + return function get() { + return loadParser(name); + }; + } + function loadParser(parserName) { + var parser = parsers[parserName]; + if (parser !== void 0) { + return parser; + } + switch (parserName) { + case "json": + parser = require_json(); + break; + case "raw": + parser = require_raw(); + break; + case "text": + parser = require_text(); + break; + case "urlencoded": + parser = require_urlencoded(); + break; + } + return parsers[parserName] = parser; + } + } +}); + +// node_modules/merge-descriptors/index.js +var require_merge_descriptors = __commonJS({ + "node_modules/merge-descriptors/index.js"(exports2, module2) { + "use strict"; + module2.exports = merge; + var hasOwnProperty = Object.prototype.hasOwnProperty; + function merge(dest, src, redefine) { + if (!dest) { + throw new TypeError("argument dest is required"); + } + if (!src) { + throw new TypeError("argument src is required"); + } + if (redefine === void 0) { + redefine = true; + } + Object.getOwnPropertyNames(src).forEach(function forEachOwnPropertyName(name) { + if (!redefine && hasOwnProperty.call(dest, name)) { + return; + } + var descriptor = Object.getOwnPropertyDescriptor(src, name); + Object.defineProperty(dest, name, descriptor); + }); + return dest; + } + } +}); + +// node_modules/finalhandler/node_modules/ms/index.js +var require_ms2 = __commonJS({ + "node_modules/finalhandler/node_modules/ms/index.js"(exports2, module2) { + var s = 1e3; + var m = s * 60; + var h = m * 60; + var d = h * 24; + var y = d * 365.25; + module2.exports = function(val, options) { + options = options || {}; + var type = typeof val; + if (type === "string" && val.length > 0) { + return parse(val); + } else if (type === "number" && isNaN(val) === false) { + 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 parse(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|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 "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) { + if (ms >= d) { + return Math.round(ms / d) + "d"; + } + if (ms >= h) { + return Math.round(ms / h) + "h"; + } + if (ms >= m) { + return Math.round(ms / m) + "m"; + } + if (ms >= s) { + return Math.round(ms / s) + "s"; + } + return ms + "ms"; + } + function fmtLong(ms) { + return plural(ms, d, "day") || plural(ms, h, "hour") || plural(ms, m, "minute") || plural(ms, s, "second") || ms + " ms"; + } + function plural(ms, n, name) { + if (ms < n) { + return; + } + if (ms < n * 1.5) { + return Math.floor(ms / n) + " " + name; + } + return Math.ceil(ms / n) + " " + name + "s"; + } + } +}); + +// node_modules/finalhandler/node_modules/debug/src/debug.js +var require_debug2 = __commonJS({ + "node_modules/finalhandler/node_modules/debug/src/debug.js"(exports2, module2) { + exports2 = module2.exports = createDebug.debug = createDebug["default"] = createDebug; + exports2.coerce = coerce; + exports2.disable = disable; + exports2.enable = enable; + exports2.enabled = enabled; + exports2.humanize = require_ms2(); + exports2.names = []; + exports2.skips = []; + exports2.formatters = {}; + var prevTime; + function selectColor(namespace) { + var hash = 0, i; + for (i in namespace) { + hash = (hash << 5) - hash + namespace.charCodeAt(i); + hash |= 0; + } + return exports2.colors[Math.abs(hash) % exports2.colors.length]; + } + function createDebug(namespace) { + function debug() { + if (!debug.enabled) + return; + var self2 = debug; + var curr = +new Date(); + var ms = curr - (prevTime || curr); + self2.diff = ms; + self2.prev = prevTime; + self2.curr = curr; + prevTime = curr; + var args2 = new Array(arguments.length); + for (var i = 0; i < args2.length; i++) { + args2[i] = arguments[i]; + } + args2[0] = exports2.coerce(args2[0]); + if (typeof args2[0] !== "string") { + args2.unshift("%O"); + } + var index = 0; + args2[0] = args2[0].replace(/%([a-zA-Z%])/g, function(match, format) { + if (match === "%%") + return match; + index++; + var formatter = exports2.formatters[format]; + if (typeof formatter === "function") { + var val = args2[index]; + match = formatter.call(self2, val); + args2.splice(index, 1); + index--; + } + return match; + }); + exports2.formatArgs.call(self2, args2); + var logFn = debug.log || exports2.log || console.log.bind(console); + logFn.apply(self2, args2); + } + debug.namespace = namespace; + debug.enabled = exports2.enabled(namespace); + debug.useColors = exports2.useColors(); + debug.color = selectColor(namespace); + if (typeof exports2.init === "function") { + exports2.init(debug); + } + return debug; + } + function enable(namespaces) { + exports2.save(namespaces); + exports2.names = []; + exports2.skips = []; + var split = (typeof namespaces === "string" ? namespaces : "").split(/[\s,]+/); + var len = split.length; + for (var i = 0; i < len; i++) { + if (!split[i]) + continue; + namespaces = split[i].replace(/\*/g, ".*?"); + if (namespaces[0] === "-") { + exports2.skips.push(new RegExp("^" + namespaces.substr(1) + "$")); + } else { + exports2.names.push(new RegExp("^" + namespaces + "$")); + } + } + } + function disable() { + exports2.enable(""); + } + function enabled(name) { + var i, len; + for (i = 0, len = exports2.skips.length; i < len; i++) { + if (exports2.skips[i].test(name)) { + return false; + } + } + for (i = 0, len = exports2.names.length; i < len; i++) { + if (exports2.names[i].test(name)) { + return true; + } + } + return false; + } + function coerce(val) { + if (val instanceof Error) + return val.stack || val.message; + return val; + } + } +}); + +// node_modules/finalhandler/node_modules/debug/src/browser.js +var require_browser2 = __commonJS({ + "node_modules/finalhandler/node_modules/debug/src/browser.js"(exports2, module2) { + exports2 = module2.exports = require_debug2(); + exports2.log = log2; + exports2.formatArgs = formatArgs; + exports2.save = save; + exports2.load = load; + exports2.useColors = useColors; + exports2.storage = typeof chrome != "undefined" && typeof chrome.storage != "undefined" ? chrome.storage.local : localstorage(); + exports2.colors = [ + "lightseagreen", + "forestgreen", + "goldenrod", + "dodgerblue", + "darkorchid", + "crimson" + ]; + function useColors() { + if (typeof window !== "undefined" && window.process && window.process.type === "renderer") { + return true; + } + return typeof document !== "undefined" && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || typeof window !== "undefined" && window.console && (window.console.firebug || window.console.exception && window.console.table) || typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 || typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/); + } + exports2.formatters.j = function(v) { + try { + return JSON.stringify(v); + } catch (err) { + return "[UnexpectedJSONParseError]: " + err.message; + } + }; + function formatArgs(args2) { + var useColors2 = this.useColors; + args2[0] = (useColors2 ? "%c" : "") + this.namespace + (useColors2 ? " %c" : " ") + args2[0] + (useColors2 ? "%c " : " ") + "+" + exports2.humanize(this.diff); + if (!useColors2) + return; + var c = "color: " + this.color; + args2.splice(1, 0, c, "color: inherit"); + var index = 0; + var lastC = 0; + args2[0].replace(/%[a-zA-Z%]/g, function(match) { + if (match === "%%") + return; + index++; + if (match === "%c") { + lastC = index; + } + }); + args2.splice(lastC, 0, c); + } + function log2() { + return typeof console === "object" && console.log && Function.prototype.apply.call(console.log, console, arguments); + } + function save(namespaces) { + try { + if (namespaces == null) { + exports2.storage.removeItem("debug"); + } else { + exports2.storage.debug = namespaces; + } + } catch (e) { + } + } + function load() { + var r; + try { + r = exports2.storage.debug; + } catch (e) { + } + if (!r && typeof process !== "undefined" && "env" in process) { + r = process.env.DEBUG; + } + return r; + } + exports2.enable(load()); + function localstorage() { + try { + return window.localStorage; + } catch (e) { + } + } + } +}); + +// node_modules/finalhandler/node_modules/debug/src/node.js +var require_node2 = __commonJS({ + "node_modules/finalhandler/node_modules/debug/src/node.js"(exports2, module2) { + var tty = require("tty"); + var util = require("util"); + exports2 = module2.exports = require_debug2(); + exports2.init = init; + exports2.log = log2; + exports2.formatArgs = formatArgs; + exports2.save = save; + exports2.load = load; + exports2.useColors = useColors; + exports2.colors = [6, 2, 3, 4, 5, 1]; + exports2.inspectOpts = Object.keys(process.env).filter(function(key) { + return /^debug_/i.test(key); + }).reduce(function(obj, key) { + var prop = key.substring(6).toLowerCase().replace(/_([a-z])/g, function(_, k) { + return k.toUpperCase(); + }); + var val = process.env[key]; + if (/^(yes|on|true|enabled)$/i.test(val)) + val = true; + else if (/^(no|off|false|disabled)$/i.test(val)) + val = false; + else if (val === "null") + val = null; + else + val = Number(val); + obj[prop] = val; + return obj; + }, {}); + var fd = parseInt(process.env.DEBUG_FD, 10) || 2; + if (fd !== 1 && fd !== 2) { + util.deprecate(function() { + }, "except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)")(); + } + var stream = fd === 1 ? process.stdout : fd === 2 ? process.stderr : createWritableStdioStream(fd); + function useColors() { + return "colors" in exports2.inspectOpts ? Boolean(exports2.inspectOpts.colors) : tty.isatty(fd); + } + exports2.formatters.o = function(v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts).split("\n").map(function(str) { + return str.trim(); + }).join(" "); + }; + exports2.formatters.O = function(v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts); + }; + function formatArgs(args2) { + var name = this.namespace; + var useColors2 = this.useColors; + if (useColors2) { + var c = this.color; + var prefix = " [3" + c + ";1m" + name + " "; + args2[0] = prefix + args2[0].split("\n").join("\n" + prefix); + args2.push("[3" + c + "m+" + exports2.humanize(this.diff) + ""); + } else { + args2[0] = new Date().toUTCString() + " " + name + " " + args2[0]; + } + } + function log2() { + return stream.write(util.format.apply(util, arguments) + "\n"); + } + function save(namespaces) { + if (namespaces == null) { + delete process.env.DEBUG; + } else { + process.env.DEBUG = namespaces; + } + } + function load() { + return process.env.DEBUG; + } + function createWritableStdioStream(fd2) { + var stream2; + var tty_wrap = process.binding("tty_wrap"); + switch (tty_wrap.guessHandleType(fd2)) { + case "TTY": + stream2 = new tty.WriteStream(fd2); + stream2._type = "tty"; + if (stream2._handle && stream2._handle.unref) { + stream2._handle.unref(); + } + break; + case "FILE": + var fs = require("fs"); + stream2 = new fs.SyncWriteStream(fd2, { autoClose: false }); + stream2._type = "fs"; + break; + case "PIPE": + case "TCP": + var net = require("net"); + stream2 = new net.Socket({ + fd: fd2, + readable: false, + writable: true + }); + stream2.readable = false; + stream2.read = null; + stream2._type = "pipe"; + if (stream2._handle && stream2._handle.unref) { + stream2._handle.unref(); + } + break; + default: + throw new Error("Implement me. Unknown stream file type!"); + } + stream2.fd = fd2; + stream2._isStdio = true; + return stream2; + } + function init(debug) { + debug.inspectOpts = {}; + var keys = Object.keys(exports2.inspectOpts); + for (var i = 0; i < keys.length; i++) { + debug.inspectOpts[keys[i]] = exports2.inspectOpts[keys[i]]; + } + } + exports2.enable(load()); + } +}); + +// node_modules/finalhandler/node_modules/debug/src/index.js +var require_src2 = __commonJS({ + "node_modules/finalhandler/node_modules/debug/src/index.js"(exports2, module2) { + if (typeof process !== "undefined" && process.type === "renderer") { + module2.exports = require_browser2(); + } else { + module2.exports = require_node2(); + } + } +}); + +// node_modules/encodeurl/index.js +var require_encodeurl = __commonJS({ + "node_modules/encodeurl/index.js"(exports2, module2) { + "use strict"; + module2.exports = encodeUrl; + var ENCODE_CHARS_REGEXP = /(?:[^\x21\x25\x26-\x3B\x3D\x3F-\x5B\x5D\x5F\x61-\x7A\x7E]|%(?:[^0-9A-Fa-f]|[0-9A-Fa-f][^0-9A-Fa-f]|$))+/g; + var UNMATCHED_SURROGATE_PAIR_REGEXP = /(^|[^\uD800-\uDBFF])[\uDC00-\uDFFF]|[\uD800-\uDBFF]([^\uDC00-\uDFFF]|$)/g; + var UNMATCHED_SURROGATE_PAIR_REPLACE = "$1\uFFFD$2"; + function encodeUrl(url) { + return String(url).replace(UNMATCHED_SURROGATE_PAIR_REGEXP, UNMATCHED_SURROGATE_PAIR_REPLACE).replace(ENCODE_CHARS_REGEXP, encodeURI); + } + } +}); + +// node_modules/escape-html/index.js +var require_escape_html = __commonJS({ + "node_modules/escape-html/index.js"(exports2, module2) { + "use strict"; + var matchHtmlRegExp = /["'&<>]/; + module2.exports = escapeHtml; + function escapeHtml(string) { + var str = "" + string; + var match = matchHtmlRegExp.exec(str); + if (!match) { + return str; + } + var escape2; + var html = ""; + var index = 0; + var lastIndex = 0; + for (index = match.index; index < str.length; index++) { + switch (str.charCodeAt(index)) { + case 34: + escape2 = """; + break; + case 38: + escape2 = "&"; + break; + case 39: + escape2 = "'"; + break; + case 60: + escape2 = "<"; + break; + case 62: + escape2 = ">"; + break; + default: + continue; + } + if (lastIndex !== index) { + html += str.substring(lastIndex, index); + } + lastIndex = index + 1; + html += escape2; + } + return lastIndex !== index ? html + str.substring(lastIndex, index) : html; + } + } +}); + +// node_modules/parseurl/index.js +var require_parseurl = __commonJS({ + "node_modules/parseurl/index.js"(exports2, module2) { + "use strict"; + var url = require("url"); + var parse = url.parse; + var Url = url.Url; + module2.exports = parseurl; + module2.exports.original = originalurl; + function parseurl(req) { + var url2 = req.url; + if (url2 === void 0) { + return void 0; + } + var parsed = req._parsedUrl; + if (fresh(url2, parsed)) { + return parsed; + } + parsed = fastparse(url2); + parsed._raw = url2; + return req._parsedUrl = parsed; + } + function originalurl(req) { + var url2 = req.originalUrl; + if (typeof url2 !== "string") { + return parseurl(req); + } + var parsed = req._parsedOriginalUrl; + if (fresh(url2, parsed)) { + return parsed; + } + parsed = fastparse(url2); + parsed._raw = url2; + return req._parsedOriginalUrl = parsed; + } + function fastparse(str) { + if (typeof str !== "string" || str.charCodeAt(0) !== 47) { + return parse(str); + } + var pathname = str; + var query = null; + var search = null; + for (var i = 1; i < str.length; i++) { + switch (str.charCodeAt(i)) { + case 63: + if (search === null) { + pathname = str.substring(0, i); + query = str.substring(i + 1); + search = str.substring(i); + } + break; + case 9: + case 10: + case 12: + case 13: + case 32: + case 35: + case 160: + case 65279: + return parse(str); + } + } + var url2 = Url !== void 0 ? new Url() : {}; + url2.path = str; + url2.href = str; + url2.pathname = pathname; + if (search !== null) { + url2.query = query; + url2.search = search; + } + return url2; + } + function fresh(url2, parsedUrl) { + return typeof parsedUrl === "object" && parsedUrl !== null && (Url === void 0 || parsedUrl instanceof Url) && parsedUrl._raw === url2; + } + } +}); + +// node_modules/finalhandler/index.js +var require_finalhandler = __commonJS({ + "node_modules/finalhandler/index.js"(exports2, module2) { + "use strict"; + var debug = require_src2()("finalhandler"); + var encodeUrl = require_encodeurl(); + var escapeHtml = require_escape_html(); + var onFinished = require_on_finished(); + var parseUrl = require_parseurl(); + var statuses = require_statuses(); + var unpipe = require_unpipe(); + var DOUBLE_SPACE_REGEXP = /\x20{2}/g; + var NEWLINE_REGEXP = /\n/g; + var defer = typeof setImmediate === "function" ? setImmediate : function(fn2) { + process.nextTick(fn2.bind.apply(fn2, arguments)); + }; + var isFinished = onFinished.isFinished; + function createHtmlDocument(message2) { + var body = escapeHtml(message2).replace(NEWLINE_REGEXP, "
").replace(DOUBLE_SPACE_REGEXP, "  "); + return '\n\n\n\nError\n\n\n
' + body + "
\n\n\n"; + } + module2.exports = finalhandler; + function finalhandler(req, res, options) { + var opts = options || {}; + var env = opts.env || process.env.NODE_ENV || "development"; + var onerror = opts.onerror; + return function(err) { + var headers; + var msg; + var status; + if (!err && headersSent(res)) { + debug("cannot 404 after headers sent"); + return; + } + if (err) { + status = getErrorStatusCode(err); + if (status === void 0) { + status = getResponseStatusCode(res); + } else { + headers = getErrorHeaders(err); + } + msg = getErrorMessage(err, status, env); + } else { + status = 404; + msg = "Cannot " + req.method + " " + encodeUrl(getResourceName(req)); + } + debug("default %s", status); + if (err && onerror) { + defer(onerror, err, req, res); + } + if (headersSent(res)) { + debug("cannot %d after headers sent", status); + req.socket.destroy(); + return; + } + send(req, res, status, headers, msg); + }; + } + function getErrorHeaders(err) { + if (!err.headers || typeof err.headers !== "object") { + return void 0; + } + var headers = Object.create(null); + var keys = Object.keys(err.headers); + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + headers[key] = err.headers[key]; + } + return headers; + } + function getErrorMessage(err, status, env) { + var msg; + if (env !== "production") { + msg = err.stack; + if (!msg && typeof err.toString === "function") { + msg = err.toString(); + } + } + return msg || statuses[status]; + } + function getErrorStatusCode(err) { + if (typeof err.status === "number" && err.status >= 400 && err.status < 600) { + return err.status; + } + if (typeof err.statusCode === "number" && err.statusCode >= 400 && err.statusCode < 600) { + return err.statusCode; + } + return void 0; + } + function getResourceName(req) { + try { + return parseUrl.original(req).pathname; + } catch (e) { + return "resource"; + } + } + function getResponseStatusCode(res) { + var status = res.statusCode; + if (typeof status !== "number" || status < 400 || status > 599) { + status = 500; + } + return status; + } + function headersSent(res) { + return typeof res.headersSent !== "boolean" ? Boolean(res._header) : res.headersSent; + } + function send(req, res, status, headers, message2) { + function write() { + var body = createHtmlDocument(message2); + res.statusCode = status; + res.statusMessage = statuses[status]; + setHeaders(res, headers); + res.setHeader("Content-Security-Policy", "default-src 'none'"); + res.setHeader("X-Content-Type-Options", "nosniff"); + res.setHeader("Content-Type", "text/html; charset=utf-8"); + res.setHeader("Content-Length", Buffer.byteLength(body, "utf8")); + if (req.method === "HEAD") { + res.end(); + return; + } + res.end(body, "utf8"); + } + if (isFinished(req)) { + write(); + return; + } + unpipe(req); + onFinished(req, write); + req.resume(); + } + function setHeaders(res, headers) { + if (!headers) { + return; + } + var keys = Object.keys(headers); + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + res.setHeader(key, headers[key]); + } + } + } +}); + +// node_modules/methods/index.js +var require_methods = __commonJS({ + "node_modules/methods/index.js"(exports2, module2) { + "use strict"; + var http3 = require("http"); + module2.exports = getCurrentNodeMethods() || getBasicNodeMethods(); + function getCurrentNodeMethods() { + return http3.METHODS && http3.METHODS.map(function lowerCaseMethod(method) { + return method.toLowerCase(); + }); + } + function getBasicNodeMethods() { + return [ + "get", + "post", + "put", + "head", + "delete", + "options", + "trace", + "copy", + "lock", + "mkcol", + "move", + "purge", + "propfind", + "proppatch", + "unlock", + "report", + "mkactivity", + "checkout", + "merge", + "m-search", + "notify", + "subscribe", + "unsubscribe", + "patch", + "search", + "connect" + ]; + } + } +}); + +// node_modules/express/node_modules/ms/index.js +var require_ms3 = __commonJS({ + "node_modules/express/node_modules/ms/index.js"(exports2, module2) { + var s = 1e3; + var m = s * 60; + var h = m * 60; + var d = h * 24; + var y = d * 365.25; + module2.exports = function(val, options) { + options = options || {}; + var type = typeof val; + if (type === "string" && val.length > 0) { + return parse(val); + } else if (type === "number" && isNaN(val) === false) { + 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 parse(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|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 "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) { + if (ms >= d) { + return Math.round(ms / d) + "d"; + } + if (ms >= h) { + return Math.round(ms / h) + "h"; + } + if (ms >= m) { + return Math.round(ms / m) + "m"; + } + if (ms >= s) { + return Math.round(ms / s) + "s"; + } + return ms + "ms"; + } + function fmtLong(ms) { + return plural(ms, d, "day") || plural(ms, h, "hour") || plural(ms, m, "minute") || plural(ms, s, "second") || ms + " ms"; + } + function plural(ms, n, name) { + if (ms < n) { + return; + } + if (ms < n * 1.5) { + return Math.floor(ms / n) + " " + name; + } + return Math.ceil(ms / n) + " " + name + "s"; + } + } +}); + +// node_modules/express/node_modules/debug/src/debug.js +var require_debug3 = __commonJS({ + "node_modules/express/node_modules/debug/src/debug.js"(exports2, module2) { + exports2 = module2.exports = createDebug.debug = createDebug["default"] = createDebug; + exports2.coerce = coerce; + exports2.disable = disable; + exports2.enable = enable; + exports2.enabled = enabled; + exports2.humanize = require_ms3(); + exports2.instances = []; + exports2.names = []; + exports2.skips = []; + exports2.formatters = {}; + function selectColor(namespace) { + var hash = 0, i; + for (i in namespace) { + hash = (hash << 5) - hash + namespace.charCodeAt(i); + hash |= 0; + } + return exports2.colors[Math.abs(hash) % exports2.colors.length]; + } + function createDebug(namespace) { + var prevTime; + function debug() { + if (!debug.enabled) + return; + var self2 = debug; + var curr = +new Date(); + var ms = curr - (prevTime || curr); + self2.diff = ms; + self2.prev = prevTime; + self2.curr = curr; + prevTime = curr; + var args2 = new Array(arguments.length); + for (var i = 0; i < args2.length; i++) { + args2[i] = arguments[i]; + } + args2[0] = exports2.coerce(args2[0]); + if (typeof args2[0] !== "string") { + args2.unshift("%O"); + } + var index = 0; + args2[0] = args2[0].replace(/%([a-zA-Z%])/g, function(match, format) { + if (match === "%%") + return match; + index++; + var formatter = exports2.formatters[format]; + if (typeof formatter === "function") { + var val = args2[index]; + match = formatter.call(self2, val); + args2.splice(index, 1); + index--; + } + return match; + }); + exports2.formatArgs.call(self2, args2); + var logFn = debug.log || exports2.log || console.log.bind(console); + logFn.apply(self2, args2); + } + debug.namespace = namespace; + debug.enabled = exports2.enabled(namespace); + debug.useColors = exports2.useColors(); + debug.color = selectColor(namespace); + debug.destroy = destroy; + if (typeof exports2.init === "function") { + exports2.init(debug); + } + exports2.instances.push(debug); + return debug; + } + function destroy() { + var index = exports2.instances.indexOf(this); + if (index !== -1) { + exports2.instances.splice(index, 1); + return true; + } else { + return false; + } + } + function enable(namespaces) { + exports2.save(namespaces); + exports2.names = []; + exports2.skips = []; + var i; + var split = (typeof namespaces === "string" ? namespaces : "").split(/[\s,]+/); + var len = split.length; + for (i = 0; i < len; i++) { + if (!split[i]) + continue; + namespaces = split[i].replace(/\*/g, ".*?"); + if (namespaces[0] === "-") { + exports2.skips.push(new RegExp("^" + namespaces.substr(1) + "$")); + } else { + exports2.names.push(new RegExp("^" + namespaces + "$")); + } + } + for (i = 0; i < exports2.instances.length; i++) { + var instance = exports2.instances[i]; + instance.enabled = exports2.enabled(instance.namespace); + } + } + function disable() { + exports2.enable(""); + } + function enabled(name) { + if (name[name.length - 1] === "*") { + return true; + } + var i, len; + for (i = 0, len = exports2.skips.length; i < len; i++) { + if (exports2.skips[i].test(name)) { + return false; + } + } + for (i = 0, len = exports2.names.length; i < len; i++) { + if (exports2.names[i].test(name)) { + return true; + } + } + return false; + } + function coerce(val) { + if (val instanceof Error) + return val.stack || val.message; + return val; + } + } +}); + +// node_modules/express/node_modules/debug/src/browser.js +var require_browser3 = __commonJS({ + "node_modules/express/node_modules/debug/src/browser.js"(exports2, module2) { + exports2 = module2.exports = require_debug3(); + exports2.log = log2; + exports2.formatArgs = formatArgs; + exports2.save = save; + exports2.load = load; + exports2.useColors = useColors; + exports2.storage = typeof chrome != "undefined" && typeof chrome.storage != "undefined" ? chrome.storage.local : localstorage(); + 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") { + 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 || typeof window !== "undefined" && window.console && (window.console.firebug || window.console.exception && window.console.table) || typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 || typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/); + } + exports2.formatters.j = function(v) { + try { + return JSON.stringify(v); + } catch (err) { + return "[UnexpectedJSONParseError]: " + err.message; + } + }; + function formatArgs(args2) { + var useColors2 = this.useColors; + args2[0] = (useColors2 ? "%c" : "") + this.namespace + (useColors2 ? " %c" : " ") + args2[0] + (useColors2 ? "%c " : " ") + "+" + exports2.humanize(this.diff); + if (!useColors2) + return; + var c = "color: " + this.color; + args2.splice(1, 0, c, "color: inherit"); + var index = 0; + var lastC = 0; + args2[0].replace(/%[a-zA-Z%]/g, function(match) { + if (match === "%%") + return; + index++; + if (match === "%c") { + lastC = index; + } + }); + args2.splice(lastC, 0, c); + } + function log2() { + return typeof console === "object" && console.log && Function.prototype.apply.call(console.log, console, arguments); + } + function save(namespaces) { + try { + if (namespaces == null) { + exports2.storage.removeItem("debug"); + } else { + exports2.storage.debug = namespaces; + } + } catch (e) { + } + } + function load() { + var r; + try { + r = exports2.storage.debug; + } catch (e) { + } + if (!r && typeof process !== "undefined" && "env" in process) { + r = process.env.DEBUG; + } + return r; + } + exports2.enable(load()); + function localstorage() { + try { + return window.localStorage; + } catch (e) { + } + } + } +}); + +// node_modules/has-flag/index.js +var require_has_flag = __commonJS({ + "node_modules/has-flag/index.js"(exports2, module2) { + "use strict"; + module2.exports = (flag, argv = process.argv) => { + const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--"; + const position = argv.indexOf(prefix + flag); + const terminatorPosition = argv.indexOf("--"); + return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition); + }; + } +}); + +// node_modules/supports-color/index.js +var require_supports_color = __commonJS({ + "node_modules/supports-color/index.js"(exports2, module2) { + "use strict"; + var os = require("os"); + var tty = require("tty"); + var hasFlag = require_has_flag(); + var { env } = process; + var forceColor; + if (hasFlag("no-color") || hasFlag("no-colors") || hasFlag("color=false") || hasFlag("color=never")) { + forceColor = 0; + } else if (hasFlag("color") || hasFlag("colors") || hasFlag("color=true") || hasFlag("color=always")) { + forceColor = 1; + } + if ("FORCE_COLOR" in env) { + if (env.FORCE_COLOR === "true") { + forceColor = 1; + } else if (env.FORCE_COLOR === "false") { + forceColor = 0; + } else { + forceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3); + } + } + function translateLevel(level) { + if (level === 0) { + return false; + } + return { + level, + hasBasic: true, + has256: level >= 2, + has16m: level >= 3 + }; + } + function supportsColor(haveStream, streamIsTTY) { + if (forceColor === 0) { + return 0; + } + if (hasFlag("color=16m") || hasFlag("color=full") || hasFlag("color=truecolor")) { + return 3; + } + if (hasFlag("color=256")) { + return 2; + } + if (haveStream && !streamIsTTY && forceColor === void 0) { + return 0; + } + const min = forceColor || 0; + if (env.TERM === "dumb") { + return min; + } + if (process.platform === "win32") { + const osRelease = os.release().split("."); + if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) { + return Number(osRelease[2]) >= 14931 ? 3 : 2; + } + return 1; + } + if ("CI" in env) { + if (["TRAVIS", "CIRCLECI", "APPVEYOR", "GITLAB_CI", "GITHUB_ACTIONS", "BUILDKITE"].some((sign) => sign in env) || env.CI_NAME === "codeship") { + return 1; + } + return min; + } + if ("TEAMCITY_VERSION" in env) { + return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0; + } + if (env.COLORTERM === "truecolor") { + return 3; + } + if ("TERM_PROGRAM" in env) { + const version = parseInt((env.TERM_PROGRAM_VERSION || "").split(".")[0], 10); + switch (env.TERM_PROGRAM) { + case "iTerm.app": + return version >= 3 ? 3 : 2; + case "Apple_Terminal": + return 2; + } + } + if (/-256(color)?$/i.test(env.TERM)) { + return 2; + } + if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) { + return 1; + } + if ("COLORTERM" in env) { + return 1; + } + return min; + } + function getSupportLevel(stream) { + const level = supportsColor(stream, stream && stream.isTTY); + return translateLevel(level); + } + module2.exports = { + supportsColor: getSupportLevel, + stdout: translateLevel(supportsColor(true, tty.isatty(1))), + stderr: translateLevel(supportsColor(true, tty.isatty(2))) + }; + } +}); + +// node_modules/express/node_modules/debug/src/node.js +var require_node3 = __commonJS({ + "node_modules/express/node_modules/debug/src/node.js"(exports2, module2) { + var tty = require("tty"); + var util = require("util"); + exports2 = module2.exports = require_debug3(); + exports2.init = init; + exports2.log = log2; + exports2.formatArgs = formatArgs; + exports2.save = save; + exports2.load = load; + exports2.useColors = useColors; + exports2.colors = [6, 2, 3, 4, 5, 1]; + try { + supportsColor = require_supports_color(); + if (supportsColor && supportsColor.level >= 2) { + exports2.colors = [ + 20, + 21, + 26, + 27, + 32, + 33, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 56, + 57, + 62, + 63, + 68, + 69, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 92, + 93, + 98, + 99, + 112, + 113, + 128, + 129, + 134, + 135, + 148, + 149, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 178, + 179, + 184, + 185, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 214, + 215, + 220, + 221 + ]; + } + } catch (err) { + } + var supportsColor; + exports2.inspectOpts = Object.keys(process.env).filter(function(key) { + return /^debug_/i.test(key); + }).reduce(function(obj, key) { + var prop = key.substring(6).toLowerCase().replace(/_([a-z])/g, function(_, k) { + return k.toUpperCase(); + }); + var val = process.env[key]; + if (/^(yes|on|true|enabled)$/i.test(val)) + val = true; + else if (/^(no|off|false|disabled)$/i.test(val)) + val = false; + else if (val === "null") + val = null; + else + val = Number(val); + obj[prop] = val; + return obj; + }, {}); + function useColors() { + return "colors" in exports2.inspectOpts ? Boolean(exports2.inspectOpts.colors) : tty.isatty(process.stderr.fd); + } + exports2.formatters.o = function(v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts).split("\n").map(function(str) { + return str.trim(); + }).join(" "); + }; + exports2.formatters.O = function(v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts); + }; + function formatArgs(args2) { + var name = this.namespace; + var useColors2 = this.useColors; + if (useColors2) { + var c = this.color; + var colorCode = "[3" + (c < 8 ? c : "8;5;" + c); + var prefix = " " + colorCode + ";1m" + name + " "; + args2[0] = prefix + args2[0].split("\n").join("\n" + prefix); + args2.push(colorCode + "m+" + exports2.humanize(this.diff) + ""); + } else { + args2[0] = getDate() + name + " " + args2[0]; + } + } + function getDate() { + if (exports2.inspectOpts.hideDate) { + return ""; + } else { + return new Date().toISOString() + " "; + } + } + function log2() { + return process.stderr.write(util.format.apply(util, arguments) + "\n"); + } + function save(namespaces) { + if (namespaces == null) { + delete process.env.DEBUG; + } else { + process.env.DEBUG = namespaces; + } + } + function load() { + return process.env.DEBUG; + } + function init(debug) { + debug.inspectOpts = {}; + var keys = Object.keys(exports2.inspectOpts); + for (var i = 0; i < keys.length; i++) { + debug.inspectOpts[keys[i]] = exports2.inspectOpts[keys[i]]; + } + } + exports2.enable(load()); + } +}); + +// node_modules/express/node_modules/debug/src/index.js +var require_src3 = __commonJS({ + "node_modules/express/node_modules/debug/src/index.js"(exports2, module2) { + if (typeof process === "undefined" || process.type === "renderer") { + module2.exports = require_browser3(); + } else { + module2.exports = require_node3(); + } + } +}); + +// node_modules/express/lib/view.js +var require_view = __commonJS({ + "node_modules/express/lib/view.js"(exports2, module2) { + "use strict"; + var debug = require_src3()("express:view"); + var path2 = require("path"); + var fs = require("fs"); + var dirname = path2.dirname; + var basename = path2.basename; + var extname = path2.extname; + var join = path2.join; + var resolve = path2.resolve; + module2.exports = View; + function View(name, options) { + var opts = options || {}; + this.defaultEngine = opts.defaultEngine; + this.ext = extname(name); + this.name = name; + this.root = opts.root; + if (!this.ext && !this.defaultEngine) { + throw new Error("No default engine was specified and no extension was provided."); + } + var fileName = name; + if (!this.ext) { + this.ext = this.defaultEngine[0] !== "." ? "." + this.defaultEngine : this.defaultEngine; + fileName += this.ext; + } + if (!opts.engines[this.ext]) { + var mod = this.ext.substr(1); + debug('require "%s"', mod); + var fn2 = require(mod).__express; + if (typeof fn2 !== "function") { + throw new Error('Module "' + mod + '" does not provide a view engine.'); + } + opts.engines[this.ext] = fn2; + } + this.engine = opts.engines[this.ext]; + this.path = this.lookup(fileName); + } + View.prototype.lookup = function lookup(name) { + var path3; + var roots = [].concat(this.root); + debug('lookup "%s"', name); + for (var i = 0; i < roots.length && !path3; i++) { + var root = roots[i]; + var loc = resolve(root, name); + var dir = dirname(loc); + var file = basename(loc); + path3 = this.resolve(dir, file); + } + return path3; + }; + View.prototype.render = function render(options, callback) { + var sync = true; + debug('render "%s"', this.path); + this.engine(this.path, options, function onRender() { + if (!sync) { + return callback.apply(this, arguments); + } + var args2 = new Array(arguments.length); + var cntx = this; + for (var i = 0; i < arguments.length; i++) { + args2[i] = arguments[i]; + } + return process.nextTick(function renderTick() { + return callback.apply(cntx, args2); + }); + }); + sync = false; + }; + View.prototype.resolve = function resolve2(dir, file) { + var ext = this.ext; + var path3 = join(dir, file); + var stat = tryStat(path3); + if (stat && stat.isFile()) { + return path3; + } + path3 = join(dir, basename(file, ext), "index" + ext); + stat = tryStat(path3); + if (stat && stat.isFile()) { + return path3; + } + }; + function tryStat(path3) { + debug('stat "%s"', path3); + try { + return fs.statSync(path3); + } catch (e) { + return void 0; + } + } + } +}); + +// node_modules/safe-buffer/index.js +var require_safe_buffer = __commonJS({ + "node_modules/safe-buffer/index.js"(exports2, module2) { + var buffer = require("buffer"); + var Buffer2 = buffer.Buffer; + function copyProps(src, dst) { + for (var key in src) { + dst[key] = src[key]; + } + } + if (Buffer2.from && Buffer2.alloc && Buffer2.allocUnsafe && Buffer2.allocUnsafeSlow) { + module2.exports = buffer; + } else { + copyProps(buffer, 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 buffer.SlowBuffer(size); + }; + } +}); + +// node_modules/etag/index.js +var require_etag = __commonJS({ + "node_modules/etag/index.js"(exports2, module2) { + "use strict"; + module2.exports = etag; + var crypto = require("crypto"); + var Stats = require("fs").Stats; + var toString = Object.prototype.toString; + function entitytag(entity) { + if (entity.length === 0) { + return '"0-2jmj7l5rSw0yVb/vlWAYkK/YBwk"'; + } + var hash = crypto.createHash("sha1").update(entity, "utf8").digest("base64").substring(0, 27); + var len = typeof entity === "string" ? Buffer.byteLength(entity, "utf8") : entity.length; + return '"' + len.toString(16) + "-" + hash + '"'; + } + function etag(entity, options) { + if (entity == null) { + throw new TypeError("argument entity is required"); + } + var isStats = isstats(entity); + var weak = options && typeof options.weak === "boolean" ? options.weak : isStats; + if (!isStats && typeof entity !== "string" && !Buffer.isBuffer(entity)) { + throw new TypeError("argument entity must be string, Buffer, or fs.Stats"); + } + var tag = isStats ? stattag(entity) : entitytag(entity); + return weak ? "W/" + tag : tag; + } + function isstats(obj) { + if (typeof Stats === "function" && obj instanceof Stats) { + return true; + } + return obj && typeof obj === "object" && "ctime" in obj && toString.call(obj.ctime) === "[object Date]" && "mtime" in obj && toString.call(obj.mtime) === "[object Date]" && "ino" in obj && typeof obj.ino === "number" && "size" in obj && typeof obj.size === "number"; + } + function stattag(stat) { + var mtime = stat.mtime.getTime().toString(16); + var size = stat.size.toString(16); + return '"' + size + "-" + mtime + '"'; + } + } +}); + +// node_modules/forwarded/index.js +var require_forwarded = __commonJS({ + "node_modules/forwarded/index.js"(exports2, module2) { + "use strict"; + module2.exports = forwarded; + function forwarded(req) { + if (!req) { + throw new TypeError("argument req is required"); + } + var proxyAddrs = parse(req.headers["x-forwarded-for"] || ""); + var socketAddr = getSocketAddr(req); + var addrs = [socketAddr].concat(proxyAddrs); + return addrs; + } + function getSocketAddr(req) { + return req.socket ? req.socket.remoteAddress : req.connection.remoteAddress; + } + function parse(header) { + var end = header.length; + var list = []; + var start = header.length; + for (var i = header.length - 1; i >= 0; i--) { + switch (header.charCodeAt(i)) { + case 32: + if (start === end) { + start = end = i; + } + break; + case 44: + if (start !== end) { + list.push(header.substring(start, end)); + } + start = end = i; + break; + default: + start = i; + break; + } + } + if (start !== end) { + list.push(header.substring(start, end)); + } + return list; + } + } +}); + +// node_modules/ipaddr.js/lib/ipaddr.js +var require_ipaddr = __commonJS({ + "node_modules/ipaddr.js/lib/ipaddr.js"(exports2, module2) { + (function() { + var expandIPv6, ipaddr, ipv4Part, ipv4Regexes, ipv6Part, ipv6Regexes, matchCIDR, root, zoneIndex; + ipaddr = {}; + root = this; + if (typeof module2 !== "undefined" && module2 !== null && module2.exports) { + module2.exports = ipaddr; + } else { + root["ipaddr"] = ipaddr; + } + matchCIDR = function(first, second, partSize, cidrBits) { + var part, shift; + if (first.length !== second.length) { + throw new Error("ipaddr: cannot match CIDR for objects with different lengths"); + } + part = 0; + while (cidrBits > 0) { + shift = partSize - cidrBits; + if (shift < 0) { + shift = 0; + } + if (first[part] >> shift !== second[part] >> shift) { + return false; + } + cidrBits -= partSize; + part += 1; + } + return true; + }; + ipaddr.subnetMatch = function(address, rangeList, defaultName) { + var k, len, rangeName, rangeSubnets, subnet; + if (defaultName == null) { + defaultName = "unicast"; + } + for (rangeName in rangeList) { + rangeSubnets = rangeList[rangeName]; + if (rangeSubnets[0] && !(rangeSubnets[0] instanceof Array)) { + rangeSubnets = [rangeSubnets]; + } + for (k = 0, len = rangeSubnets.length; k < len; k++) { + subnet = rangeSubnets[k]; + if (address.kind() === subnet[0].kind()) { + if (address.match.apply(address, subnet)) { + return rangeName; + } + } + } + } + return defaultName; + }; + ipaddr.IPv4 = function() { + function IPv4(octets) { + var k, len, octet; + if (octets.length !== 4) { + throw new Error("ipaddr: ipv4 octet count should be 4"); + } + for (k = 0, len = octets.length; k < len; k++) { + octet = octets[k]; + if (!(0 <= octet && octet <= 255)) { + throw new Error("ipaddr: ipv4 octet should fit in 8 bits"); + } + } + this.octets = octets; + } + IPv4.prototype.kind = function() { + return "ipv4"; + }; + IPv4.prototype.toString = function() { + return this.octets.join("."); + }; + IPv4.prototype.toNormalizedString = function() { + return this.toString(); + }; + IPv4.prototype.toByteArray = function() { + return this.octets.slice(0); + }; + IPv4.prototype.match = function(other, cidrRange) { + var ref; + if (cidrRange === void 0) { + ref = other, other = ref[0], cidrRange = ref[1]; + } + if (other.kind() !== "ipv4") { + throw new Error("ipaddr: cannot match ipv4 address with non-ipv4 one"); + } + return matchCIDR(this.octets, other.octets, 8, cidrRange); + }; + IPv4.prototype.SpecialRanges = { + unspecified: [[new IPv4([0, 0, 0, 0]), 8]], + broadcast: [[new IPv4([255, 255, 255, 255]), 32]], + multicast: [[new IPv4([224, 0, 0, 0]), 4]], + linkLocal: [[new IPv4([169, 254, 0, 0]), 16]], + loopback: [[new IPv4([127, 0, 0, 0]), 8]], + carrierGradeNat: [[new IPv4([100, 64, 0, 0]), 10]], + "private": [[new IPv4([10, 0, 0, 0]), 8], [new IPv4([172, 16, 0, 0]), 12], [new IPv4([192, 168, 0, 0]), 16]], + reserved: [[new IPv4([192, 0, 0, 0]), 24], [new IPv4([192, 0, 2, 0]), 24], [new IPv4([192, 88, 99, 0]), 24], [new IPv4([198, 51, 100, 0]), 24], [new IPv4([203, 0, 113, 0]), 24], [new IPv4([240, 0, 0, 0]), 4]] + }; + IPv4.prototype.range = function() { + return ipaddr.subnetMatch(this, this.SpecialRanges); + }; + IPv4.prototype.toIPv4MappedAddress = function() { + return ipaddr.IPv6.parse("::ffff:" + this.toString()); + }; + IPv4.prototype.prefixLengthFromSubnetMask = function() { + var cidr, i, k, octet, stop, zeros, zerotable; + zerotable = { + 0: 8, + 128: 7, + 192: 6, + 224: 5, + 240: 4, + 248: 3, + 252: 2, + 254: 1, + 255: 0 + }; + cidr = 0; + stop = false; + for (i = k = 3; k >= 0; i = k += -1) { + octet = this.octets[i]; + if (octet in zerotable) { + zeros = zerotable[octet]; + if (stop && zeros !== 0) { + return null; + } + if (zeros !== 8) { + stop = true; + } + cidr += zeros; + } else { + return null; + } + } + return 32 - cidr; + }; + return IPv4; + }(); + ipv4Part = "(0?\\d+|0x[a-f0-9]+)"; + ipv4Regexes = { + fourOctet: new RegExp("^" + ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part + "$", "i"), + longValue: new RegExp("^" + ipv4Part + "$", "i") + }; + ipaddr.IPv4.parser = function(string) { + var match, parseIntAuto, part, shift, value; + parseIntAuto = function(string2) { + if (string2[0] === "0" && string2[1] !== "x") { + return parseInt(string2, 8); + } else { + return parseInt(string2); + } + }; + if (match = string.match(ipv4Regexes.fourOctet)) { + return function() { + var k, len, ref, results; + ref = match.slice(1, 6); + results = []; + for (k = 0, len = ref.length; k < len; k++) { + part = ref[k]; + results.push(parseIntAuto(part)); + } + return results; + }(); + } else if (match = string.match(ipv4Regexes.longValue)) { + value = parseIntAuto(match[1]); + if (value > 4294967295 || value < 0) { + throw new Error("ipaddr: address outside defined range"); + } + return function() { + var k, results; + results = []; + for (shift = k = 0; k <= 24; shift = k += 8) { + results.push(value >> shift & 255); + } + return results; + }().reverse(); + } else { + return null; + } + }; + ipaddr.IPv6 = function() { + function IPv6(parts, zoneId) { + var i, k, l, len, part, ref; + if (parts.length === 16) { + this.parts = []; + for (i = k = 0; k <= 14; i = k += 2) { + this.parts.push(parts[i] << 8 | parts[i + 1]); + } + } else if (parts.length === 8) { + this.parts = parts; + } else { + throw new Error("ipaddr: ipv6 part count should be 8 or 16"); + } + ref = this.parts; + for (l = 0, len = ref.length; l < len; l++) { + part = ref[l]; + if (!(0 <= part && part <= 65535)) { + throw new Error("ipaddr: ipv6 part should fit in 16 bits"); + } + } + if (zoneId) { + this.zoneId = zoneId; + } + } + IPv6.prototype.kind = function() { + return "ipv6"; + }; + IPv6.prototype.toString = function() { + return this.toNormalizedString().replace(/((^|:)(0(:|$))+)/, "::"); + }; + IPv6.prototype.toRFC5952String = function() { + var bestMatchIndex, bestMatchLength, match, regex, string; + regex = /((^|:)(0(:|$)){2,})/g; + string = this.toNormalizedString(); + bestMatchIndex = 0; + bestMatchLength = -1; + while (match = regex.exec(string)) { + if (match[0].length > bestMatchLength) { + bestMatchIndex = match.index; + bestMatchLength = match[0].length; + } + } + if (bestMatchLength < 0) { + return string; + } + return string.substring(0, bestMatchIndex) + "::" + string.substring(bestMatchIndex + bestMatchLength); + }; + IPv6.prototype.toByteArray = function() { + var bytes, k, len, part, ref; + bytes = []; + ref = this.parts; + for (k = 0, len = ref.length; k < len; k++) { + part = ref[k]; + bytes.push(part >> 8); + bytes.push(part & 255); + } + return bytes; + }; + IPv6.prototype.toNormalizedString = function() { + var addr, part, suffix; + addr = function() { + var k, len, ref, results; + ref = this.parts; + results = []; + for (k = 0, len = ref.length; k < len; k++) { + part = ref[k]; + results.push(part.toString(16)); + } + return results; + }.call(this).join(":"); + suffix = ""; + if (this.zoneId) { + suffix = "%" + this.zoneId; + } + return addr + suffix; + }; + IPv6.prototype.toFixedLengthString = function() { + var addr, part, suffix; + addr = function() { + var k, len, ref, results; + ref = this.parts; + results = []; + for (k = 0, len = ref.length; k < len; k++) { + part = ref[k]; + results.push(part.toString(16).padStart(4, "0")); + } + return results; + }.call(this).join(":"); + suffix = ""; + if (this.zoneId) { + suffix = "%" + this.zoneId; + } + return addr + suffix; + }; + IPv6.prototype.match = function(other, cidrRange) { + var ref; + if (cidrRange === void 0) { + ref = other, other = ref[0], cidrRange = ref[1]; + } + if (other.kind() !== "ipv6") { + throw new Error("ipaddr: cannot match ipv6 address with non-ipv6 one"); + } + return matchCIDR(this.parts, other.parts, 16, cidrRange); + }; + IPv6.prototype.SpecialRanges = { + unspecified: [new IPv6([0, 0, 0, 0, 0, 0, 0, 0]), 128], + linkLocal: [new IPv6([65152, 0, 0, 0, 0, 0, 0, 0]), 10], + multicast: [new IPv6([65280, 0, 0, 0, 0, 0, 0, 0]), 8], + loopback: [new IPv6([0, 0, 0, 0, 0, 0, 0, 1]), 128], + uniqueLocal: [new IPv6([64512, 0, 0, 0, 0, 0, 0, 0]), 7], + ipv4Mapped: [new IPv6([0, 0, 0, 0, 0, 65535, 0, 0]), 96], + rfc6145: [new IPv6([0, 0, 0, 0, 65535, 0, 0, 0]), 96], + rfc6052: [new IPv6([100, 65435, 0, 0, 0, 0, 0, 0]), 96], + "6to4": [new IPv6([8194, 0, 0, 0, 0, 0, 0, 0]), 16], + teredo: [new IPv6([8193, 0, 0, 0, 0, 0, 0, 0]), 32], + reserved: [[new IPv6([8193, 3512, 0, 0, 0, 0, 0, 0]), 32]] + }; + IPv6.prototype.range = function() { + return ipaddr.subnetMatch(this, this.SpecialRanges); + }; + IPv6.prototype.isIPv4MappedAddress = function() { + return this.range() === "ipv4Mapped"; + }; + IPv6.prototype.toIPv4Address = function() { + var high, low, ref; + if (!this.isIPv4MappedAddress()) { + throw new Error("ipaddr: trying to convert a generic ipv6 address to ipv4"); + } + ref = this.parts.slice(-2), high = ref[0], low = ref[1]; + return new ipaddr.IPv4([high >> 8, high & 255, low >> 8, low & 255]); + }; + IPv6.prototype.prefixLengthFromSubnetMask = function() { + var cidr, i, k, part, stop, zeros, zerotable; + zerotable = { + 0: 16, + 32768: 15, + 49152: 14, + 57344: 13, + 61440: 12, + 63488: 11, + 64512: 10, + 65024: 9, + 65280: 8, + 65408: 7, + 65472: 6, + 65504: 5, + 65520: 4, + 65528: 3, + 65532: 2, + 65534: 1, + 65535: 0 + }; + cidr = 0; + stop = false; + for (i = k = 7; k >= 0; i = k += -1) { + part = this.parts[i]; + if (part in zerotable) { + zeros = zerotable[part]; + if (stop && zeros !== 0) { + return null; + } + if (zeros !== 16) { + stop = true; + } + cidr += zeros; + } else { + return null; + } + } + return 128 - cidr; + }; + return IPv6; + }(); + ipv6Part = "(?:[0-9a-f]+::?)+"; + zoneIndex = "%[0-9a-z]{1,}"; + ipv6Regexes = { + zoneIndex: new RegExp(zoneIndex, "i"), + "native": new RegExp("^(::)?(" + ipv6Part + ")?([0-9a-f]+)?(::)?(" + zoneIndex + ")?$", "i"), + transitional: new RegExp("^((?:" + ipv6Part + ")|(?:::)(?:" + ipv6Part + ")?)" + (ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part) + ("(" + zoneIndex + ")?$"), "i") + }; + expandIPv6 = function(string, parts) { + var colonCount, lastColon, part, replacement, replacementCount, zoneId; + if (string.indexOf("::") !== string.lastIndexOf("::")) { + return null; + } + zoneId = (string.match(ipv6Regexes["zoneIndex"]) || [])[0]; + if (zoneId) { + zoneId = zoneId.substring(1); + string = string.replace(/%.+$/, ""); + } + colonCount = 0; + lastColon = -1; + while ((lastColon = string.indexOf(":", lastColon + 1)) >= 0) { + colonCount++; + } + if (string.substr(0, 2) === "::") { + colonCount--; + } + if (string.substr(-2, 2) === "::") { + colonCount--; + } + if (colonCount > parts) { + return null; + } + replacementCount = parts - colonCount; + replacement = ":"; + while (replacementCount--) { + replacement += "0:"; + } + string = string.replace("::", replacement); + if (string[0] === ":") { + string = string.slice(1); + } + if (string[string.length - 1] === ":") { + string = string.slice(0, -1); + } + parts = function() { + var k, len, ref, results; + ref = string.split(":"); + results = []; + for (k = 0, len = ref.length; k < len; k++) { + part = ref[k]; + results.push(parseInt(part, 16)); + } + return results; + }(); + return { + parts, + zoneId + }; + }; + ipaddr.IPv6.parser = function(string) { + var addr, k, len, match, octet, octets, zoneId; + if (ipv6Regexes["native"].test(string)) { + return expandIPv6(string, 8); + } else if (match = string.match(ipv6Regexes["transitional"])) { + zoneId = match[6] || ""; + addr = expandIPv6(match[1].slice(0, -1) + zoneId, 6); + if (addr.parts) { + octets = [parseInt(match[2]), parseInt(match[3]), parseInt(match[4]), parseInt(match[5])]; + for (k = 0, len = octets.length; k < len; k++) { + octet = octets[k]; + if (!(0 <= octet && octet <= 255)) { + return null; + } + } + addr.parts.push(octets[0] << 8 | octets[1]); + addr.parts.push(octets[2] << 8 | octets[3]); + return { + parts: addr.parts, + zoneId: addr.zoneId + }; + } + } + return null; + }; + ipaddr.IPv4.isIPv4 = ipaddr.IPv6.isIPv6 = function(string) { + return this.parser(string) !== null; + }; + ipaddr.IPv4.isValid = function(string) { + var e; + try { + new this(this.parser(string)); + return true; + } catch (error1) { + e = error1; + return false; + } + }; + ipaddr.IPv4.isValidFourPartDecimal = function(string) { + if (ipaddr.IPv4.isValid(string) && string.match(/^(0|[1-9]\d*)(\.(0|[1-9]\d*)){3}$/)) { + return true; + } else { + return false; + } + }; + ipaddr.IPv6.isValid = function(string) { + var addr, e; + if (typeof string === "string" && string.indexOf(":") === -1) { + return false; + } + try { + addr = this.parser(string); + new this(addr.parts, addr.zoneId); + return true; + } catch (error1) { + e = error1; + return false; + } + }; + ipaddr.IPv4.parse = function(string) { + var parts; + parts = this.parser(string); + if (parts === null) { + throw new Error("ipaddr: string is not formatted like ip address"); + } + return new this(parts); + }; + ipaddr.IPv6.parse = function(string) { + var addr; + addr = this.parser(string); + if (addr.parts === null) { + throw new Error("ipaddr: string is not formatted like ip address"); + } + return new this(addr.parts, addr.zoneId); + }; + ipaddr.IPv4.parseCIDR = function(string) { + var maskLength, match, parsed; + if (match = string.match(/^(.+)\/(\d+)$/)) { + maskLength = parseInt(match[2]); + if (maskLength >= 0 && maskLength <= 32) { + parsed = [this.parse(match[1]), maskLength]; + Object.defineProperty(parsed, "toString", { + value: function() { + return this.join("/"); + } + }); + return parsed; + } + } + throw new Error("ipaddr: string is not formatted like an IPv4 CIDR range"); + }; + ipaddr.IPv4.subnetMaskFromPrefixLength = function(prefix) { + var filledOctetCount, j, octets; + prefix = parseInt(prefix); + if (prefix < 0 || prefix > 32) { + throw new Error("ipaddr: invalid IPv4 prefix length"); + } + octets = [0, 0, 0, 0]; + j = 0; + filledOctetCount = Math.floor(prefix / 8); + while (j < filledOctetCount) { + octets[j] = 255; + j++; + } + if (filledOctetCount < 4) { + octets[filledOctetCount] = Math.pow(2, prefix % 8) - 1 << 8 - prefix % 8; + } + return new this(octets); + }; + ipaddr.IPv4.broadcastAddressFromCIDR = function(string) { + var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets; + try { + cidr = this.parseCIDR(string); + ipInterfaceOctets = cidr[0].toByteArray(); + subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray(); + octets = []; + i = 0; + while (i < 4) { + octets.push(parseInt(ipInterfaceOctets[i], 10) | parseInt(subnetMaskOctets[i], 10) ^ 255); + i++; + } + return new this(octets); + } catch (error1) { + error = error1; + throw new Error("ipaddr: the address does not have IPv4 CIDR format"); + } + }; + ipaddr.IPv4.networkAddressFromCIDR = function(string) { + var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets; + try { + cidr = this.parseCIDR(string); + ipInterfaceOctets = cidr[0].toByteArray(); + subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray(); + octets = []; + i = 0; + while (i < 4) { + octets.push(parseInt(ipInterfaceOctets[i], 10) & parseInt(subnetMaskOctets[i], 10)); + i++; + } + return new this(octets); + } catch (error1) { + error = error1; + throw new Error("ipaddr: the address does not have IPv4 CIDR format"); + } + }; + ipaddr.IPv6.parseCIDR = function(string) { + var maskLength, match, parsed; + if (match = string.match(/^(.+)\/(\d+)$/)) { + maskLength = parseInt(match[2]); + if (maskLength >= 0 && maskLength <= 128) { + parsed = [this.parse(match[1]), maskLength]; + Object.defineProperty(parsed, "toString", { + value: function() { + return this.join("/"); + } + }); + return parsed; + } + } + throw new Error("ipaddr: string is not formatted like an IPv6 CIDR range"); + }; + ipaddr.isValid = function(string) { + return ipaddr.IPv6.isValid(string) || ipaddr.IPv4.isValid(string); + }; + ipaddr.parse = function(string) { + if (ipaddr.IPv6.isValid(string)) { + return ipaddr.IPv6.parse(string); + } else if (ipaddr.IPv4.isValid(string)) { + return ipaddr.IPv4.parse(string); + } else { + throw new Error("ipaddr: the address has neither IPv6 nor IPv4 format"); + } + }; + ipaddr.parseCIDR = function(string) { + var e; + try { + return ipaddr.IPv6.parseCIDR(string); + } catch (error1) { + e = error1; + try { + return ipaddr.IPv4.parseCIDR(string); + } catch (error12) { + e = error12; + throw new Error("ipaddr: the address has neither IPv6 nor IPv4 CIDR format"); + } + } + }; + ipaddr.fromByteArray = function(bytes) { + var length; + length = bytes.length; + if (length === 4) { + return new ipaddr.IPv4(bytes); + } else if (length === 16) { + return new ipaddr.IPv6(bytes); + } else { + throw new Error("ipaddr: the binary input is neither an IPv6 nor IPv4 address"); + } + }; + ipaddr.process = function(string) { + var addr; + addr = this.parse(string); + if (addr.kind() === "ipv6" && addr.isIPv4MappedAddress()) { + return addr.toIPv4Address(); + } else { + return addr; + } + }; + }).call(exports2); + } +}); + +// node_modules/proxy-addr/index.js +var require_proxy_addr = __commonJS({ + "node_modules/proxy-addr/index.js"(exports2, module2) { + "use strict"; + module2.exports = proxyaddr; + module2.exports.all = alladdrs; + module2.exports.compile = compile; + var forwarded = require_forwarded(); + var ipaddr = require_ipaddr(); + var DIGIT_REGEXP = /^[0-9]+$/; + var isip = ipaddr.isValid; + var parseip = ipaddr.parse; + var IP_RANGES = { + linklocal: ["169.254.0.0/16", "fe80::/10"], + loopback: ["127.0.0.1/8", "::1/128"], + uniquelocal: ["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16", "fc00::/7"] + }; + function alladdrs(req, trust) { + var addrs = forwarded(req); + if (!trust) { + return addrs; + } + if (typeof trust !== "function") { + trust = compile(trust); + } + for (var i = 0; i < addrs.length - 1; i++) { + if (trust(addrs[i], i)) + continue; + addrs.length = i + 1; + } + return addrs; + } + function compile(val) { + if (!val) { + throw new TypeError("argument is required"); + } + var trust; + if (typeof val === "string") { + trust = [val]; + } else if (Array.isArray(val)) { + trust = val.slice(); + } else { + throw new TypeError("unsupported trust argument"); + } + for (var i = 0; i < trust.length; i++) { + val = trust[i]; + if (!Object.prototype.hasOwnProperty.call(IP_RANGES, val)) { + continue; + } + val = IP_RANGES[val]; + trust.splice.apply(trust, [i, 1].concat(val)); + i += val.length - 1; + } + return compileTrust(compileRangeSubnets(trust)); + } + function compileRangeSubnets(arr) { + var rangeSubnets = new Array(arr.length); + for (var i = 0; i < arr.length; i++) { + rangeSubnets[i] = parseipNotation(arr[i]); + } + return rangeSubnets; + } + function compileTrust(rangeSubnets) { + var len = rangeSubnets.length; + return len === 0 ? trustNone : len === 1 ? trustSingle(rangeSubnets[0]) : trustMulti(rangeSubnets); + } + function parseipNotation(note) { + var pos = note.lastIndexOf("/"); + var str = pos !== -1 ? note.substring(0, pos) : note; + if (!isip(str)) { + throw new TypeError("invalid IP address: " + str); + } + var ip = parseip(str); + if (pos === -1 && ip.kind() === "ipv6" && ip.isIPv4MappedAddress()) { + ip = ip.toIPv4Address(); + } + var max = ip.kind() === "ipv6" ? 128 : 32; + var range = pos !== -1 ? note.substring(pos + 1, note.length) : null; + if (range === null) { + range = max; + } else if (DIGIT_REGEXP.test(range)) { + range = parseInt(range, 10); + } else if (ip.kind() === "ipv4" && isip(range)) { + range = parseNetmask(range); + } else { + range = null; + } + if (range <= 0 || range > max) { + throw new TypeError("invalid range on address: " + note); + } + return [ip, range]; + } + function parseNetmask(netmask) { + var ip = parseip(netmask); + var kind = ip.kind(); + return kind === "ipv4" ? ip.prefixLengthFromSubnetMask() : null; + } + function proxyaddr(req, trust) { + if (!req) { + throw new TypeError("req argument is required"); + } + if (!trust) { + throw new TypeError("trust argument is required"); + } + var addrs = alladdrs(req, trust); + var addr = addrs[addrs.length - 1]; + return addr; + } + function trustNone() { + return false; + } + function trustMulti(subnets) { + return function trust(addr) { + if (!isip(addr)) + return false; + var ip = parseip(addr); + var ipconv; + var kind = ip.kind(); + for (var i = 0; i < subnets.length; i++) { + var subnet = subnets[i]; + var subnetip = subnet[0]; + var subnetkind = subnetip.kind(); + var subnetrange = subnet[1]; + var trusted = ip; + if (kind !== subnetkind) { + if (subnetkind === "ipv4" && !ip.isIPv4MappedAddress()) { + continue; + } + if (!ipconv) { + ipconv = subnetkind === "ipv4" ? ip.toIPv4Address() : ip.toIPv4MappedAddress(); + } + trusted = ipconv; + } + if (trusted.match(subnetip, subnetrange)) { + return true; + } + } + return false; + }; + } + function trustSingle(subnet) { + var subnetip = subnet[0]; + var subnetkind = subnetip.kind(); + var subnetisipv4 = subnetkind === "ipv4"; + var subnetrange = subnet[1]; + return function trust(addr) { + if (!isip(addr)) + return false; + var ip = parseip(addr); + var kind = ip.kind(); + if (kind !== subnetkind) { + if (subnetisipv4 && !ip.isIPv4MappedAddress()) { + return false; + } + ip = subnetisipv4 ? ip.toIPv4Address() : ip.toIPv4MappedAddress(); + } + return ip.match(subnetip, subnetrange); + }; + } + } +}); + +// node_modules/express/lib/utils.js +var require_utils2 = __commonJS({ + "node_modules/express/lib/utils.js"(exports2) { + "use strict"; + var Buffer2 = require_safe_buffer().Buffer; + var contentType = require_content_type(); + var etag = require_etag(); + var mime2 = require_mime_types(); + var proxyaddr = require_proxy_addr(); + var qs = require_lib4(); + var querystring = require("querystring"); + exports2.etag = createETagGenerator({ weak: false }); + exports2.wetag = createETagGenerator({ weak: true }); + exports2.normalizeType = function(type) { + return ~type.indexOf("/") ? acceptParams(type) : { value: mime2.lookup(type) || "application/octet-stream", params: {} }; + }; + exports2.normalizeTypes = function(types) { + var ret = []; + for (var i = 0; i < types.length; ++i) { + ret.push(exports2.normalizeType(types[i])); + } + return ret; + }; + function acceptParams(str, index) { + var parts = str.split(/ *; */); + var ret = { value: parts[0], quality: 1, params: {}, originalIndex: index }; + for (var i = 1; i < parts.length; ++i) { + var pms = parts[i].split(/ *= */); + if (pms[0] === "q") { + ret.quality = parseFloat(pms[1]); + } else { + ret.params[pms[0]] = pms[1]; + } + } + return ret; + } + exports2.compileETag = function(val) { + var fn2; + if (typeof val === "function") { + return val; + } + switch (val) { + case true: + case "weak": + fn2 = exports2.wetag; + break; + case false: + break; + case "strong": + fn2 = exports2.etag; + break; + default: + throw new TypeError("unknown value for etag function: " + val); + } + return fn2; + }; + exports2.compileQueryParser = function compileQueryParser(val) { + var fn2; + if (typeof val === "function") { + return val; + } + switch (val) { + case true: + case "simple": + fn2 = querystring.parse; + break; + case false: + break; + case "extended": + fn2 = parseExtendedQueryString; + break; + default: + throw new TypeError("unknown value for query parser function: " + val); + } + return fn2; + }; + exports2.compileTrust = function(val) { + if (typeof val === "function") + return val; + if (val === true) { + return function() { + return true; + }; + } + if (typeof val === "number") { + return function(a, i) { + return i < val; + }; + } + if (typeof val === "string") { + val = val.split(/ *, */); + } + return proxyaddr.compile(val || []); + }; + exports2.setCharset = function setCharset(type, charset) { + if (!type || !charset) { + return type; + } + var parsed = contentType.parse(type); + parsed.parameters.charset = charset; + return contentType.format(parsed); + }; + function createETagGenerator(options) { + return function generateETag(body, encoding) { + var buf = !Buffer2.isBuffer(body) ? Buffer2.from(body, encoding) : body; + return etag(buf, options); + }; + } + function parseExtendedQueryString(str) { + return qs.parse(str, { + allowPrototypes: true + }); + } + } +}); + +// node_modules/array-flatten/dist/index.js +var require_dist = __commonJS({ + "node_modules/array-flatten/dist/index.js"(exports2) { + "use strict"; + Object.defineProperty(exports2, "__esModule", { value: true }); + function flatten(array) { + var result = []; + $flatten(array, result); + return result; + } + exports2.flatten = flatten; + function $flatten(array, result) { + for (var i = 0; i < array.length; i++) { + var value = array[i]; + if (Array.isArray(value)) { + $flatten(value, result); + } else { + result.push(value); + } + } + } + } +}); + +// node_modules/utils-merge/index.js +var require_utils_merge = __commonJS({ + "node_modules/utils-merge/index.js"(exports2, module2) { + exports2 = module2.exports = function(a, b) { + if (a && b) { + for (var key in b) { + a[key] = b[key]; + } + } + return a; + }; + } +}); + +// node_modules/path-to-regexp/index.js +var require_path_to_regexp = __commonJS({ + "node_modules/path-to-regexp/index.js"(exports2, module2) { + module2.exports = pathToRegexp; + module2.exports.match = match; + module2.exports.regexpToFunction = regexpToFunction; + module2.exports.parse = parse; + module2.exports.compile = compile; + module2.exports.tokensToFunction = tokensToFunction; + module2.exports.tokensToRegExp = tokensToRegExp; + var DEFAULT_DELIMITER = "/"; + var PATH_REGEXP = new RegExp([ + "(\\\\.)", + "(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?" + ].join("|"), "g"); + function parse(str, options) { + var tokens = []; + var key = 0; + var index = 0; + var path2 = ""; + var defaultDelimiter = options && options.delimiter || DEFAULT_DELIMITER; + var whitelist = options && options.whitelist || void 0; + var pathEscaped = false; + var res; + while ((res = PATH_REGEXP.exec(str)) !== null) { + var m = res[0]; + var escaped = res[1]; + var offset = res.index; + path2 += str.slice(index, offset); + index = offset + m.length; + if (escaped) { + path2 += escaped[1]; + pathEscaped = true; + continue; + } + var prev = ""; + var name = res[2]; + var capture = res[3]; + var group = res[4]; + var modifier = res[5]; + if (!pathEscaped && path2.length) { + var k = path2.length - 1; + var c = path2[k]; + var matches = whitelist ? whitelist.indexOf(c) > -1 : true; + if (matches) { + prev = c; + path2 = path2.slice(0, k); + } + } + if (path2) { + tokens.push(path2); + path2 = ""; + pathEscaped = false; + } + var repeat = modifier === "+" || modifier === "*"; + var optional = modifier === "?" || modifier === "*"; + var pattern = capture || group; + var delimiter = prev || defaultDelimiter; + tokens.push({ + name: name || key++, + prefix: prev, + delimiter, + optional, + repeat, + pattern: pattern ? escapeGroup(pattern) : "[^" + escapeString(delimiter === defaultDelimiter ? delimiter : delimiter + defaultDelimiter) + "]+?" + }); + } + if (path2 || index < str.length) { + tokens.push(path2 + str.substr(index)); + } + return tokens; + } + function compile(str, options) { + return tokensToFunction(parse(str, options), options); + } + function match(str, options) { + var keys = []; + var re = pathToRegexp(str, keys, options); + return regexpToFunction(re, keys); + } + function regexpToFunction(re, keys) { + return function(pathname, options) { + var m = re.exec(pathname); + if (!m) + return false; + var path2 = m[0]; + var index = m.index; + var params = {}; + var decode = options && options.decode || decodeURIComponent; + for (var i = 1; i < m.length; i++) { + if (m[i] === void 0) + continue; + var key = keys[i - 1]; + if (key.repeat) { + params[key.name] = m[i].split(key.delimiter).map(function(value) { + return decode(value, key); + }); + } else { + params[key.name] = decode(m[i], key); + } + } + return { path: path2, index, params }; + }; + } + function tokensToFunction(tokens, options) { + var matches = new Array(tokens.length); + for (var i = 0; i < tokens.length; i++) { + if (typeof tokens[i] === "object") { + matches[i] = new RegExp("^(?:" + tokens[i].pattern + ")$", flags(options)); + } + } + return function(data, options2) { + var path2 = ""; + var encode = options2 && options2.encode || encodeURIComponent; + var validate = options2 ? options2.validate !== false : true; + for (var i2 = 0; i2 < tokens.length; i2++) { + var token = tokens[i2]; + if (typeof token === "string") { + path2 += token; + continue; + } + var value = data ? data[token.name] : void 0; + var segment; + if (Array.isArray(value)) { + if (!token.repeat) { + throw new TypeError('Expected "' + token.name + '" to not repeat, but got array'); + } + if (value.length === 0) { + if (token.optional) + continue; + throw new TypeError('Expected "' + token.name + '" to not be empty'); + } + for (var j = 0; j < value.length; j++) { + segment = encode(value[j], token); + if (validate && !matches[i2].test(segment)) { + throw new TypeError('Expected all "' + token.name + '" to match "' + token.pattern + '"'); + } + path2 += (j === 0 ? token.prefix : token.delimiter) + segment; + } + continue; + } + if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") { + segment = encode(String(value), token); + if (validate && !matches[i2].test(segment)) { + throw new TypeError('Expected "' + token.name + '" to match "' + token.pattern + '", but got "' + segment + '"'); + } + path2 += token.prefix + segment; + continue; + } + if (token.optional) + continue; + throw new TypeError('Expected "' + token.name + '" to be ' + (token.repeat ? "an array" : "a string")); + } + return path2; + }; + } + function escapeString(str) { + return str.replace(/([.+*?=^!:${}()[\]|/\\])/g, "\\$1"); + } + function escapeGroup(group) { + return group.replace(/([=!:$/()])/g, "\\$1"); + } + function flags(options) { + return options && options.sensitive ? "" : "i"; + } + function regexpToRegexp(path2, keys) { + if (!keys) + return path2; + var groups = path2.source.match(/\((?!\?)/g); + if (groups) { + for (var i = 0; i < groups.length; i++) { + keys.push({ + name: i, + prefix: null, + delimiter: null, + optional: false, + repeat: false, + pattern: null + }); + } + } + return path2; + } + function arrayToRegexp(path2, keys, options) { + var parts = []; + for (var i = 0; i < path2.length; i++) { + parts.push(pathToRegexp(path2[i], keys, options).source); + } + return new RegExp("(?:" + parts.join("|") + ")", flags(options)); + } + function stringToRegexp(path2, keys, options) { + return tokensToRegExp(parse(path2, options), keys, options); + } + function tokensToRegExp(tokens, keys, options) { + options = options || {}; + var strict = options.strict; + var start = options.start !== false; + var end = options.end !== false; + var delimiter = options.delimiter || DEFAULT_DELIMITER; + var endsWith = [].concat(options.endsWith || []).map(escapeString).concat("$").join("|"); + var route = start ? "^" : ""; + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i]; + if (typeof token === "string") { + route += escapeString(token); + } else { + var capture = token.repeat ? "(?:" + token.pattern + ")(?:" + escapeString(token.delimiter) + "(?:" + token.pattern + "))*" : token.pattern; + if (keys) + keys.push(token); + if (token.optional) { + if (!token.prefix) { + route += "(" + capture + ")?"; + } else { + route += "(?:" + escapeString(token.prefix) + "(" + capture + "))?"; + } + } else { + route += escapeString(token.prefix) + "(" + capture + ")"; + } + } + } + if (end) { + if (!strict) + route += "(?:" + escapeString(delimiter) + ")?"; + route += endsWith === "$" ? "$" : "(?=" + endsWith + ")"; + } else { + var endToken = tokens[tokens.length - 1]; + var isEndDelimited = typeof endToken === "string" ? endToken[endToken.length - 1] === delimiter : endToken === void 0; + if (!strict) + route += "(?:" + escapeString(delimiter) + "(?=" + endsWith + "))?"; + if (!isEndDelimited) + route += "(?=" + escapeString(delimiter) + "|" + endsWith + ")"; + } + return new RegExp(route, flags(options)); + } + function pathToRegexp(path2, keys, options) { + if (path2 instanceof RegExp) { + return regexpToRegexp(path2, keys); + } + if (Array.isArray(path2)) { + return arrayToRegexp(path2, keys, options); + } + return stringToRegexp(path2, keys, options); + } + } +}); + +// node_modules/router/lib/layer.js +var require_layer = __commonJS({ + "node_modules/router/lib/layer.js"(exports2, module2) { + "use strict"; + var pathRegexp = require_path_to_regexp(); + var hasOwnProperty = Object.prototype.hasOwnProperty; + var TRAILING_SLASH_REGEXP = /\/+$/; + module2.exports = Layer; + function Layer(path2, options, fn2) { + if (!(this instanceof Layer)) { + return new Layer(path2, options, fn2); + } + var opts = options || {}; + this.handle = fn2; + this.keys = []; + this.name = fn2.name || ""; + this.params = void 0; + this.path = void 0; + this.regexp = pathRegexp(opts.strict ? path2 : loosen(path2), this.keys, opts); + this.regexp._slash = path2 === "/" && opts.end === false; + } + Layer.prototype.handleError = function handleError(error, req, res, next) { + var fn2 = this.handle; + if (fn2.length !== 4) { + return next(error); + } + try { + var ret = fn2(error, req, res, next); + if (isPromise(ret)) { + ret.then(null, function(error2) { + next(error2 || new Error("Rejected promise")); + }); + } + } catch (err) { + next(err); + } + }; + Layer.prototype.handleRequest = function handleRequest(req, res, next) { + var fn2 = this.handle; + if (fn2.length > 3) { + return next(); + } + try { + var ret = fn2(req, res, next); + if (isPromise(ret)) { + ret.then(null, function(error) { + next(error || new Error("Rejected promise")); + }); + } + } catch (err) { + next(err); + } + }; + Layer.prototype.match = function match(path2) { + var match2; + if (path2 != null) { + if (this.regexp._slash) { + this.params = {}; + this.path = ""; + return true; + } + match2 = this.regexp.exec(path2); + } + if (!match2) { + this.params = void 0; + this.path = void 0; + return false; + } + this.params = {}; + this.path = match2[0]; + var keys = this.keys; + var params = this.params; + for (var i = 1; i < match2.length; i++) { + var key = keys[i - 1]; + var prop = key.name; + var val = decodeParam(match2[i]); + if (val !== void 0 || !hasOwnProperty.call(params, prop)) { + params[prop] = val; + } + } + return true; + }; + function decodeParam(val) { + if (typeof val !== "string" || val.length === 0) { + return val; + } + try { + return decodeURIComponent(val); + } catch (err) { + if (err instanceof URIError) { + err.message = "Failed to decode param '" + val + "'"; + err.status = 400; + } + throw err; + } + } + function isPromise(val) { + return val && typeof val === "object" && typeof val.then === "function"; + } + function loosen(path2) { + if (path2 instanceof RegExp) { + return path2; + } + return Array.isArray(path2) ? path2.map(function(p) { + return loosen(p); + }) : String(path2).replace(TRAILING_SLASH_REGEXP, ""); + } + } +}); + +// node_modules/router/lib/route.js +var require_route = __commonJS({ + "node_modules/router/lib/route.js"(exports2, module2) { + "use strict"; + var flatten = require_dist().flatten; + var Layer = require_layer(); + var methods = require_methods(); + var slice = Array.prototype.slice; + module2.exports = Route; + function Route(path2) { + this.path = path2; + this.stack = []; + this.methods = Object.create(null); + } + Route.prototype._handlesMethod = function _handlesMethod(method) { + if (this.methods._all) { + return true; + } + var name = method.toLowerCase(); + if (name === "head" && !this.methods.head) { + name = "get"; + } + return Boolean(this.methods[name]); + }; + Route.prototype._methods = function _methods() { + var methods2 = Object.keys(this.methods); + if (this.methods.get && !this.methods.head) { + methods2.push("head"); + } + for (var i = 0; i < methods2.length; i++) { + methods2[i] = methods2[i].toUpperCase(); + } + return methods2; + }; + Route.prototype.dispatch = function dispatch(req, res, done) { + var idx = 0; + var stack2 = this.stack; + if (stack2.length === 0) { + return done(); + } + var method = req.method.toLowerCase(); + if (method === "head" && !this.methods.head) { + method = "get"; + } + req.route = this; + next(); + function next(err) { + if (err && err === "route") { + return done(); + } + if (err && err === "router") { + return done(err); + } + if (idx >= stack2.length) { + return done(err); + } + var layer; + var match; + while (match !== true && idx < stack2.length) { + layer = stack2[idx++]; + match = !layer.method || layer.method === method; + } + if (match !== true) { + return done(err); + } + if (err) { + layer.handleError(err, req, res, next); + } else { + layer.handleRequest(req, res, next); + } + } + }; + Route.prototype.all = function all(handler) { + var callbacks = flatten(slice.call(arguments)); + if (callbacks.length === 0) { + throw new TypeError("argument handler is required"); + } + for (var i = 0; i < callbacks.length; i++) { + var fn2 = callbacks[i]; + if (typeof fn2 !== "function") { + throw new TypeError("argument handler must be a function"); + } + var layer = Layer("/", {}, fn2); + layer.method = void 0; + this.methods._all = true; + this.stack.push(layer); + } + return this; + }; + methods.forEach(function(method) { + Route.prototype[method] = function(handler) { + var callbacks = flatten(slice.call(arguments)); + if (callbacks.length === 0) { + throw new TypeError("argument handler is required"); + } + for (var i = 0; i < callbacks.length; i++) { + var fn2 = callbacks[i]; + if (typeof fn2 !== "function") { + throw new TypeError("argument handler must be a function"); + } + var layer = Layer("/", {}, fn2); + layer.method = method; + this.methods[method] = true; + this.stack.push(layer); + } + return this; + }; + }); + } +}); + +// node_modules/router/index.js +var require_router = __commonJS({ + "node_modules/router/index.js"(exports2, module2) { + "use strict"; + var flatten = require_dist().flatten; + var Layer = require_layer(); + var methods = require_methods(); + var mixin = require_utils_merge(); + var parseUrl = require_parseurl(); + var Route = require_route(); + var setPrototypeOf = require_setprototypeof(); + var slice = Array.prototype.slice; + module2.exports = Router; + module2.exports.Route = Route; + function Router(options) { + if (!(this instanceof Router)) { + return new Router(options); + } + var opts = options || {}; + function router(req, res, next) { + router.handle(req, res, next); + } + setPrototypeOf(router, this); + router.caseSensitive = opts.caseSensitive; + router.mergeParams = opts.mergeParams; + router.params = {}; + router.strict = opts.strict; + router.stack = []; + return router; + } + Router.prototype = function() { + }; + Router.prototype.param = function param(name, fn2) { + if (!name) { + throw new TypeError("argument name is required"); + } + if (typeof name !== "string") { + throw new TypeError("argument name must be a string"); + } + if (!fn2) { + throw new TypeError("argument fn is required"); + } + if (typeof fn2 !== "function") { + throw new TypeError("argument fn must be a function"); + } + var params = this.params[name]; + if (!params) { + params = this.params[name] = []; + } + params.push(fn2); + return this; + }; + Router.prototype.handle = function handle(req, res, callback) { + if (!callback) { + throw new TypeError("argument callback is required"); + } + var idx = 0; + var methods2; + var protohost = getProtohost(req.url) || ""; + var removed = ""; + var self2 = this; + var slashAdded = false; + var paramcalled = {}; + var stack2 = this.stack; + var parentParams = req.params; + var parentUrl = req.baseUrl || ""; + var done = restore(callback, req, "baseUrl", "next", "params"); + req.next = next; + if (req.method === "OPTIONS") { + methods2 = []; + done = wrap(done, generateOptionsResponder(res, methods2)); + } + req.baseUrl = parentUrl; + req.originalUrl = req.originalUrl || req.url; + next(); + function next(err) { + var layerError = err === "route" ? null : err; + if (slashAdded) { + req.url = req.url.substr(1); + slashAdded = false; + } + if (removed.length !== 0) { + req.baseUrl = parentUrl; + req.url = protohost + removed + req.url.substr(protohost.length); + removed = ""; + } + if (layerError === "router") { + setImmediate(done, null); + return; + } + if (idx >= stack2.length) { + setImmediate(done, layerError); + return; + } + var path2 = getPathname(req); + if (path2 == null) { + return done(layerError); + } + var layer; + var match; + var route; + while (match !== true && idx < stack2.length) { + layer = stack2[idx++]; + match = matchLayer(layer, path2); + route = layer.route; + if (typeof match !== "boolean") { + layerError = layerError || match; + } + if (match !== true) { + continue; + } + if (!route) { + continue; + } + if (layerError) { + match = false; + continue; + } + var method = req.method; + var hasMethod = route._handlesMethod(method); + if (!hasMethod && method === "OPTIONS" && methods2) { + methods2.push.apply(methods2, route._methods()); + } + if (!hasMethod && method !== "HEAD") { + match = false; + continue; + } + } + if (match !== true) { + return done(layerError); + } + if (route) { + req.route = route; + } + req.params = self2.mergeParams ? mergeParams(layer.params, parentParams) : layer.params; + var layerPath = layer.path; + processParams(self2.params, layer, paramcalled, req, res, function(err2) { + if (err2) { + return next(layerError || err2); + } + if (route) { + return layer.handleRequest(req, res, next); + } + trimPrefix(layer, layerError, layerPath, path2); + }); + } + function trimPrefix(layer, layerError, layerPath, path2) { + if (layerPath.length !== 0) { + if (layerPath !== path2.substr(0, layerPath.length)) { + next(layerError); + return; + } + var c = path2[layerPath.length]; + if (c && c !== "/") { + next(layerError); + return; + } + removed = layerPath; + req.url = protohost + req.url.substr(protohost.length + removed.length); + if (!protohost && req.url[0] !== "/") { + req.url = "/" + req.url; + slashAdded = true; + } + req.baseUrl = parentUrl + (removed[removed.length - 1] === "/" ? removed.substring(0, removed.length - 1) : removed); + } + if (layerError) { + layer.handleError(layerError, req, res, next); + } else { + layer.handleRequest(req, res, next); + } + } + }; + Router.prototype.use = function use(handler) { + var offset = 0; + var path2 = "/"; + if (typeof handler !== "function") { + var arg = handler; + while (Array.isArray(arg) && arg.length !== 0) { + arg = arg[0]; + } + if (typeof arg !== "function") { + offset = 1; + path2 = handler; + } + } + var callbacks = flatten(slice.call(arguments, offset)); + if (callbacks.length === 0) { + throw new TypeError("argument handler is required"); + } + for (var i = 0; i < callbacks.length; i++) { + var fn2 = callbacks[i]; + if (typeof fn2 !== "function") { + throw new TypeError("argument handler must be a function"); + } + var layer = new Layer(path2, { + sensitive: this.caseSensitive, + strict: false, + end: false + }, fn2); + layer.route = void 0; + this.stack.push(layer); + } + return this; + }; + Router.prototype.route = function route(path2) { + var route2 = new Route(path2); + var layer = new Layer(path2, { + sensitive: this.caseSensitive, + strict: this.strict, + end: true + }, handle); + function handle(req, res, next) { + route2.dispatch(req, res, next); + } + layer.route = route2; + this.stack.push(layer); + return route2; + }; + methods.concat("all").forEach(function(method) { + Router.prototype[method] = function(path2) { + var route = this.route(path2); + route[method].apply(route, slice.call(arguments, 1)); + return this; + }; + }); + function generateOptionsResponder(res, methods2) { + return function onDone(fn2, err) { + if (err || methods2.length === 0) { + return fn2(err); + } + trySendOptionsResponse(res, methods2, fn2); + }; + } + function getPathname(req) { + try { + return parseUrl(req).pathname; + } catch (err) { + return void 0; + } + } + function getProtohost(url) { + if (typeof url !== "string" || url.length === 0 || url[0] === "/") { + return void 0; + } + var searchIndex = url.indexOf("?"); + var pathLength = searchIndex !== -1 ? searchIndex : url.length; + var fqdnIndex = url.substr(0, pathLength).indexOf("://"); + return fqdnIndex !== -1 ? url.substr(0, url.indexOf("/", 3 + fqdnIndex)) : void 0; + } + function matchLayer(layer, path2) { + try { + return layer.match(path2); + } catch (err) { + return err; + } + } + function mergeParams(params, parent) { + if (typeof parent !== "object" || !parent) { + return params; + } + var obj = mixin({}, parent); + if (!(0 in params) || !(0 in parent)) { + return mixin(obj, params); + } + var i = 0; + var o = 0; + while (i in params) { + i++; + } + while (o in parent) { + o++; + } + for (i--; i >= 0; i--) { + params[i + o] = params[i]; + if (i < o) { + delete params[i]; + } + } + return mixin(obj, params); + } + function processParams(params, layer, called, req, res, done) { + var keys = layer.keys; + if (!keys || keys.length === 0) { + return done(); + } + var i = 0; + var name; + var paramIndex = 0; + var key; + var paramVal; + var paramCallbacks; + var paramCalled; + function param(err) { + if (err) { + return done(err); + } + if (i >= keys.length) { + return done(); + } + paramIndex = 0; + key = keys[i++]; + name = key.name; + paramVal = req.params[name]; + paramCallbacks = params[name]; + paramCalled = called[name]; + if (paramVal === void 0 || !paramCallbacks) { + return param(); + } + if (paramCalled && (paramCalled.match === paramVal || paramCalled.error && paramCalled.error !== "route")) { + req.params[name] = paramCalled.value; + return param(paramCalled.error); + } + called[name] = paramCalled = { + error: null, + match: paramVal, + value: paramVal + }; + paramCallback(); + } + function paramCallback(err) { + var fn2 = paramCallbacks[paramIndex++]; + paramCalled.value = req.params[key.name]; + if (err) { + paramCalled.error = err; + param(err); + return; + } + if (!fn2) + return param(); + try { + fn2(req, res, paramCallback, paramVal, key.name); + } catch (e) { + paramCallback(e); + } + } + param(); + } + function restore(fn2, obj) { + var props = new Array(arguments.length - 2); + var vals = new Array(arguments.length - 2); + for (var i = 0; i < props.length; i++) { + props[i] = arguments[i + 2]; + vals[i] = obj[props[i]]; + } + return function() { + for (var i2 = 0; i2 < props.length; i2++) { + obj[props[i2]] = vals[i2]; + } + return fn2.apply(this, arguments); + }; + } + function sendOptionsResponse(res, methods2) { + var options = Object.create(null); + for (var i = 0; i < methods2.length; i++) { + options[methods2[i]] = true; + } + var allow = Object.keys(options).sort().join(", "); + res.setHeader("Allow", allow); + res.setHeader("Content-Length", Buffer.byteLength(allow)); + res.setHeader("Content-Type", "text/plain"); + res.setHeader("X-Content-Type-Options", "nosniff"); + res.end(allow); + } + function trySendOptionsResponse(res, methods2, next) { + try { + sendOptionsResponse(res, methods2); + } catch (err) { + next(err); + } + } + function wrap(old, fn2) { + return function proxy() { + var args2 = new Array(arguments.length + 1); + args2[0] = old; + for (var i = 0, len = arguments.length; i < len; i++) { + args2[i + 1] = arguments[i]; + } + fn2.apply(this, args2); + }; + } + } +}); + +// node_modules/express/lib/application.js +var require_application = __commonJS({ + "node_modules/express/lib/application.js"(exports2, module2) { + "use strict"; + var finalhandler = require_finalhandler(); + var methods = require_methods(); + var debug = require_src3()("express:application"); + var View = require_view(); + var http3 = require("http"); + var compileETag = require_utils2().compileETag; + var compileQueryParser = require_utils2().compileQueryParser; + var compileTrust = require_utils2().compileTrust; + var flatten = require_dist().flatten; + var merge = require_utils_merge(); + var resolve = require("path").resolve; + var Router = require_router(); + var setPrototypeOf = require_setprototypeof(); + var slice = Array.prototype.slice; + var app = exports2 = module2.exports = {}; + var trustProxyDefaultSymbol = "@@symbol:trust_proxy_default"; + app.init = function init() { + var router = null; + this.cache = {}; + this.engines = {}; + this.settings = {}; + this.defaultConfiguration(); + Object.defineProperty(this, "router", { + configurable: true, + enumerable: true, + get: function getrouter() { + if (router === null) { + router = new Router({ + caseSensitive: this.enabled("case sensitive routing"), + strict: this.enabled("strict routing") + }); + } + return router; + } + }); + }; + app.defaultConfiguration = function defaultConfiguration() { + var env = process.env.NODE_ENV || "development"; + this.enable("x-powered-by"); + this.set("etag", "weak"); + this.set("env", env); + this.set("query parser", "simple"); + this.set("subdomain offset", 2); + this.set("trust proxy", false); + Object.defineProperty(this.settings, trustProxyDefaultSymbol, { + configurable: true, + value: true + }); + debug("booting in %s mode", env); + this.on("mount", function onmount(parent) { + if (this.settings[trustProxyDefaultSymbol] === true && typeof parent.settings["trust proxy fn"] === "function") { + delete this.settings["trust proxy"]; + delete this.settings["trust proxy fn"]; + } + setPrototypeOf(this.request, parent.request); + setPrototypeOf(this.response, parent.response); + setPrototypeOf(this.engines, parent.engines); + setPrototypeOf(this.settings, parent.settings); + }); + this.locals = Object.create(null); + this.mountpath = "/"; + this.locals.settings = this.settings; + this.set("view", View); + this.set("views", resolve("views")); + this.set("jsonp callback name", "callback"); + if (env === "production") { + this.enable("view cache"); + } + }; + app.handle = function handle(req, res, callback) { + var done = callback || finalhandler(req, res, { + env: this.get("env"), + onerror: logerror.bind(this) + }); + if (this.enabled("x-powered-by")) { + res.setHeader("X-Powered-By", "Express"); + } + req.res = res; + res.req = req; + setPrototypeOf(req, this.request); + setPrototypeOf(res, this.response); + if (!res.locals) { + res.locals = Object.create(null); + } + this.router.handle(req, res, done); + }; + app.use = function use(fn2) { + var offset = 0; + var path2 = "/"; + if (typeof fn2 !== "function") { + var arg = fn2; + while (Array.isArray(arg) && arg.length !== 0) { + arg = arg[0]; + } + if (typeof arg !== "function") { + offset = 1; + path2 = fn2; + } + } + var fns = flatten(slice.call(arguments, offset)); + if (fns.length === 0) { + throw new TypeError("app.use() requires a middleware function"); + } + var router = this.router; + fns.forEach(function(fn3) { + if (!fn3 || !fn3.handle || !fn3.set) { + return router.use(path2, fn3); + } + debug(".use app under %s", path2); + fn3.mountpath = path2; + fn3.parent = this; + router.use(path2, function mounted_app(req, res, next) { + var orig = req.app; + fn3.handle(req, res, function(err) { + setPrototypeOf(req, orig.request); + setPrototypeOf(res, orig.response); + next(err); + }); + }); + fn3.emit("mount", this); + }, this); + return this; + }; + app.route = function route(path2) { + return this.router.route(path2); + }; + app.engine = function engine(ext, fn2) { + if (typeof fn2 !== "function") { + throw new Error("callback function required"); + } + var extension = ext[0] !== "." ? "." + ext : ext; + this.engines[extension] = fn2; + return this; + }; + app.param = function param(name, fn2) { + if (Array.isArray(name)) { + for (var i = 0; i < name.length; i++) { + this.param(name[i], fn2); + } + return this; + } + this.router.param(name, fn2); + return this; + }; + app.set = function set(setting, val) { + if (arguments.length === 1) { + return this.settings[setting]; + } + debug('set "%s" to %o', setting, val); + this.settings[setting] = val; + switch (setting) { + case "etag": + this.set("etag fn", compileETag(val)); + break; + case "query parser": + this.set("query parser fn", compileQueryParser(val)); + break; + case "trust proxy": + this.set("trust proxy fn", compileTrust(val)); + Object.defineProperty(this.settings, trustProxyDefaultSymbol, { + configurable: true, + value: false + }); + break; + } + return this; + }; + app.path = function path2() { + return this.parent ? this.parent.path() + this.mountpath : ""; + }; + app.enabled = function enabled(setting) { + return Boolean(this.set(setting)); + }; + app.disabled = function disabled(setting) { + return !this.set(setting); + }; + app.enable = function enable(setting) { + return this.set(setting, true); + }; + app.disable = function disable(setting) { + return this.set(setting, false); + }; + methods.forEach(function(method) { + app[method] = function(path2) { + if (method === "get" && arguments.length === 1) { + return this.set(path2); + } + var route = this.route(path2); + route[method].apply(route, slice.call(arguments, 1)); + return this; + }; + }); + app.all = function all(path2) { + var route = this.route(path2); + var args2 = slice.call(arguments, 1); + for (var i = 0; i < methods.length; i++) { + route[methods[i]].apply(route, args2); + } + return this; + }; + app.render = function render(name, options, callback) { + var cache = this.cache; + var done = callback; + var engines = this.engines; + var opts = options; + var renderOptions = {}; + var view; + if (typeof options === "function") { + done = options; + opts = {}; + } + merge(renderOptions, this.locals); + if (opts._locals) { + merge(renderOptions, opts._locals); + } + merge(renderOptions, opts); + if (renderOptions.cache == null) { + renderOptions.cache = this.enabled("view cache"); + } + if (renderOptions.cache) { + view = cache[name]; + } + if (!view) { + var View2 = this.get("view"); + view = new View2(name, { + defaultEngine: this.get("view engine"), + root: this.get("views"), + engines + }); + if (!view.path) { + var dirs = Array.isArray(view.root) && view.root.length > 1 ? 'directories "' + view.root.slice(0, -1).join('", "') + '" or "' + view.root[view.root.length - 1] + '"' : 'directory "' + view.root + '"'; + var err = new Error('Failed to lookup view "' + name + '" in views ' + dirs); + err.view = view; + return done(err); + } + if (renderOptions.cache) { + cache[name] = view; + } + } + tryRender(view, renderOptions, done); + }; + app.listen = function listen() { + var server = http3.createServer(this); + return server.listen.apply(server, arguments); + }; + function logerror(err) { + if (this.get("env") !== "test") + console.error(err.stack || err.toString()); + } + function tryRender(view, options, callback) { + try { + view.render(options, callback); + } catch (err) { + callback(err); + } + } + } +}); + +// node_modules/negotiator/lib/charset.js +var require_charset = __commonJS({ + "node_modules/negotiator/lib/charset.js"(exports2, module2) { + "use strict"; + module2.exports = preferredCharsets; + module2.exports.preferredCharsets = preferredCharsets; + var simpleCharsetRegExp = /^\s*([^\s;]+)\s*(?:;(.*))?$/; + function parseAcceptCharset(accept) { + var accepts = accept.split(","); + for (var i = 0, j = 0; i < accepts.length; i++) { + var charset = parseCharset(accepts[i].trim(), i); + if (charset) { + accepts[j++] = charset; + } + } + accepts.length = j; + return accepts; + } + function parseCharset(str, i) { + var match = simpleCharsetRegExp.exec(str); + if (!match) + return null; + var charset = match[1]; + var q = 1; + if (match[2]) { + var params = match[2].split(";"); + for (var j = 0; j < params.length; j++) { + var p = params[j].trim().split("="); + if (p[0] === "q") { + q = parseFloat(p[1]); + break; + } + } + } + return { + charset, + q, + i + }; + } + function getCharsetPriority(charset, accepted, index) { + var priority = { o: -1, q: 0, s: 0 }; + for (var i = 0; i < accepted.length; i++) { + var spec = specify(charset, accepted[i], index); + if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) { + priority = spec; + } + } + return priority; + } + function specify(charset, spec, index) { + var s = 0; + if (spec.charset.toLowerCase() === charset.toLowerCase()) { + s |= 1; + } else if (spec.charset !== "*") { + return null; + } + return { + i: index, + o: spec.i, + q: spec.q, + s + }; + } + function preferredCharsets(accept, provided) { + var accepts = parseAcceptCharset(accept === void 0 ? "*" : accept || ""); + if (!provided) { + return accepts.filter(isQuality).sort(compareSpecs).map(getFullCharset); + } + var priorities = provided.map(function getPriority(type, index) { + return getCharsetPriority(type, accepts, index); + }); + return priorities.filter(isQuality).sort(compareSpecs).map(function getCharset(priority) { + return provided[priorities.indexOf(priority)]; + }); + } + function compareSpecs(a, b) { + return b.q - a.q || b.s - a.s || a.o - b.o || a.i - b.i || 0; + } + function getFullCharset(spec) { + return spec.charset; + } + function isQuality(spec) { + return spec.q > 0; + } + } +}); + +// node_modules/negotiator/lib/encoding.js +var require_encoding = __commonJS({ + "node_modules/negotiator/lib/encoding.js"(exports2, module2) { + "use strict"; + module2.exports = preferredEncodings; + module2.exports.preferredEncodings = preferredEncodings; + var simpleEncodingRegExp = /^\s*([^\s;]+)\s*(?:;(.*))?$/; + function parseAcceptEncoding(accept) { + var accepts = accept.split(","); + var hasIdentity = false; + var minQuality = 1; + for (var i = 0, j = 0; i < accepts.length; i++) { + var encoding = parseEncoding(accepts[i].trim(), i); + if (encoding) { + accepts[j++] = encoding; + hasIdentity = hasIdentity || specify("identity", encoding); + minQuality = Math.min(minQuality, encoding.q || 1); + } + } + if (!hasIdentity) { + accepts[j++] = { + encoding: "identity", + q: minQuality, + i + }; + } + accepts.length = j; + return accepts; + } + function parseEncoding(str, i) { + var match = simpleEncodingRegExp.exec(str); + if (!match) + return null; + var encoding = match[1]; + var q = 1; + if (match[2]) { + var params = match[2].split(";"); + for (var j = 0; j < params.length; j++) { + var p = params[j].trim().split("="); + if (p[0] === "q") { + q = parseFloat(p[1]); + break; + } + } + } + return { + encoding, + q, + i + }; + } + function getEncodingPriority(encoding, accepted, index) { + var priority = { o: -1, q: 0, s: 0 }; + for (var i = 0; i < accepted.length; i++) { + var spec = specify(encoding, accepted[i], index); + if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) { + priority = spec; + } + } + return priority; + } + function specify(encoding, spec, index) { + var s = 0; + if (spec.encoding.toLowerCase() === encoding.toLowerCase()) { + s |= 1; + } else if (spec.encoding !== "*") { + return null; + } + return { + i: index, + o: spec.i, + q: spec.q, + s + }; + } + function preferredEncodings(accept, provided) { + var accepts = parseAcceptEncoding(accept || ""); + if (!provided) { + return accepts.filter(isQuality).sort(compareSpecs).map(getFullEncoding); + } + var priorities = provided.map(function getPriority(type, index) { + return getEncodingPriority(type, accepts, index); + }); + return priorities.filter(isQuality).sort(compareSpecs).map(function getEncoding(priority) { + return provided[priorities.indexOf(priority)]; + }); + } + function compareSpecs(a, b) { + return b.q - a.q || b.s - a.s || a.o - b.o || a.i - b.i || 0; + } + function getFullEncoding(spec) { + return spec.encoding; + } + function isQuality(spec) { + return spec.q > 0; + } + } +}); + +// node_modules/negotiator/lib/language.js +var require_language = __commonJS({ + "node_modules/negotiator/lib/language.js"(exports2, module2) { + "use strict"; + module2.exports = preferredLanguages; + module2.exports.preferredLanguages = preferredLanguages; + var simpleLanguageRegExp = /^\s*([^\s\-;]+)(?:-([^\s;]+))?\s*(?:;(.*))?$/; + function parseAcceptLanguage(accept) { + var accepts = accept.split(","); + for (var i = 0, j = 0; i < accepts.length; i++) { + var language = parseLanguage(accepts[i].trim(), i); + if (language) { + accepts[j++] = language; + } + } + accepts.length = j; + return accepts; + } + function parseLanguage(str, i) { + var match = simpleLanguageRegExp.exec(str); + if (!match) + return null; + var prefix = match[1]; + var suffix = match[2]; + var full = prefix; + if (suffix) + full += "-" + suffix; + var q = 1; + if (match[3]) { + var params = match[3].split(";"); + for (var j = 0; j < params.length; j++) { + var p = params[j].split("="); + if (p[0] === "q") + q = parseFloat(p[1]); + } + } + return { + prefix, + suffix, + q, + i, + full + }; + } + function getLanguagePriority(language, accepted, index) { + var priority = { o: -1, q: 0, s: 0 }; + for (var i = 0; i < accepted.length; i++) { + var spec = specify(language, accepted[i], index); + if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) { + priority = spec; + } + } + return priority; + } + function specify(language, spec, index) { + var p = parseLanguage(language); + if (!p) + return null; + var s = 0; + if (spec.full.toLowerCase() === p.full.toLowerCase()) { + s |= 4; + } else if (spec.prefix.toLowerCase() === p.full.toLowerCase()) { + s |= 2; + } else if (spec.full.toLowerCase() === p.prefix.toLowerCase()) { + s |= 1; + } else if (spec.full !== "*") { + return null; + } + return { + i: index, + o: spec.i, + q: spec.q, + s + }; + } + function preferredLanguages(accept, provided) { + var accepts = parseAcceptLanguage(accept === void 0 ? "*" : accept || ""); + if (!provided) { + return accepts.filter(isQuality).sort(compareSpecs).map(getFullLanguage); + } + var priorities = provided.map(function getPriority(type, index) { + return getLanguagePriority(type, accepts, index); + }); + return priorities.filter(isQuality).sort(compareSpecs).map(function getLanguage(priority) { + return provided[priorities.indexOf(priority)]; + }); + } + function compareSpecs(a, b) { + return b.q - a.q || b.s - a.s || a.o - b.o || a.i - b.i || 0; + } + function getFullLanguage(spec) { + return spec.full; + } + function isQuality(spec) { + return spec.q > 0; + } + } +}); + +// node_modules/negotiator/lib/mediaType.js +var require_mediaType = __commonJS({ + "node_modules/negotiator/lib/mediaType.js"(exports2, module2) { + "use strict"; + module2.exports = preferredMediaTypes; + module2.exports.preferredMediaTypes = preferredMediaTypes; + var simpleMediaTypeRegExp = /^\s*([^\s\/;]+)\/([^;\s]+)\s*(?:;(.*))?$/; + function parseAccept(accept) { + var accepts = splitMediaTypes(accept); + for (var i = 0, j = 0; i < accepts.length; i++) { + var mediaType = parseMediaType(accepts[i].trim(), i); + if (mediaType) { + accepts[j++] = mediaType; + } + } + accepts.length = j; + return accepts; + } + function parseMediaType(str, i) { + var match = simpleMediaTypeRegExp.exec(str); + if (!match) + return null; + var params = Object.create(null); + var q = 1; + var subtype = match[2]; + var type = match[1]; + if (match[3]) { + var kvps = splitParameters(match[3]).map(splitKeyValuePair); + for (var j = 0; j < kvps.length; j++) { + var pair = kvps[j]; + var key = pair[0].toLowerCase(); + var val = pair[1]; + var value = val && val[0] === '"' && val[val.length - 1] === '"' ? val.substr(1, val.length - 2) : val; + if (key === "q") { + q = parseFloat(value); + break; + } + params[key] = value; + } + } + return { + type, + subtype, + params, + q, + i + }; + } + function getMediaTypePriority(type, accepted, index) { + var priority = { o: -1, q: 0, s: 0 }; + for (var i = 0; i < accepted.length; i++) { + var spec = specify(type, accepted[i], index); + if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) { + priority = spec; + } + } + return priority; + } + function specify(type, spec, index) { + var p = parseMediaType(type); + var s = 0; + if (!p) { + return null; + } + if (spec.type.toLowerCase() == p.type.toLowerCase()) { + s |= 4; + } else if (spec.type != "*") { + return null; + } + if (spec.subtype.toLowerCase() == p.subtype.toLowerCase()) { + s |= 2; + } else if (spec.subtype != "*") { + return null; + } + var keys = Object.keys(spec.params); + if (keys.length > 0) { + if (keys.every(function(k) { + return spec.params[k] == "*" || (spec.params[k] || "").toLowerCase() == (p.params[k] || "").toLowerCase(); + })) { + s |= 1; + } else { + return null; + } + } + return { + i: index, + o: spec.i, + q: spec.q, + s + }; + } + function preferredMediaTypes(accept, provided) { + var accepts = parseAccept(accept === void 0 ? "*/*" : accept || ""); + if (!provided) { + return accepts.filter(isQuality).sort(compareSpecs).map(getFullType); + } + var priorities = provided.map(function getPriority(type, index) { + return getMediaTypePriority(type, accepts, index); + }); + return priorities.filter(isQuality).sort(compareSpecs).map(function getType(priority) { + return provided[priorities.indexOf(priority)]; + }); + } + function compareSpecs(a, b) { + return b.q - a.q || b.s - a.s || a.o - b.o || a.i - b.i || 0; + } + function getFullType(spec) { + return spec.type + "/" + spec.subtype; + } + function isQuality(spec) { + return spec.q > 0; + } + function quoteCount(string) { + var count = 0; + var index = 0; + while ((index = string.indexOf('"', index)) !== -1) { + count++; + index++; + } + return count; + } + function splitKeyValuePair(str) { + var index = str.indexOf("="); + var key; + var val; + if (index === -1) { + key = str; + } else { + key = str.substr(0, index); + val = str.substr(index + 1); + } + return [key, val]; + } + function splitMediaTypes(accept) { + var accepts = accept.split(","); + for (var i = 1, j = 0; i < accepts.length; i++) { + if (quoteCount(accepts[j]) % 2 == 0) { + accepts[++j] = accepts[i]; + } else { + accepts[j] += "," + accepts[i]; + } + } + accepts.length = j + 1; + return accepts; + } + function splitParameters(str) { + var parameters = str.split(";"); + for (var i = 1, j = 0; i < parameters.length; i++) { + if (quoteCount(parameters[j]) % 2 == 0) { + parameters[++j] = parameters[i]; + } else { + parameters[j] += ";" + parameters[i]; + } + } + parameters.length = j + 1; + for (var i = 0; i < parameters.length; i++) { + parameters[i] = parameters[i].trim(); + } + return parameters; + } + } +}); + +// node_modules/negotiator/index.js +var require_negotiator = __commonJS({ + "node_modules/negotiator/index.js"(exports2, module2) { + "use strict"; + var preferredCharsets = require_charset(); + var preferredEncodings = require_encoding(); + var preferredLanguages = require_language(); + var preferredMediaTypes = require_mediaType(); + module2.exports = Negotiator; + module2.exports.Negotiator = Negotiator; + function Negotiator(request) { + if (!(this instanceof Negotiator)) { + return new Negotiator(request); + } + this.request = request; + } + Negotiator.prototype.charset = function charset(available) { + var set = this.charsets(available); + return set && set[0]; + }; + Negotiator.prototype.charsets = function charsets(available) { + return preferredCharsets(this.request.headers["accept-charset"], available); + }; + Negotiator.prototype.encoding = function encoding(available) { + var set = this.encodings(available); + return set && set[0]; + }; + Negotiator.prototype.encodings = function encodings(available) { + return preferredEncodings(this.request.headers["accept-encoding"], available); + }; + Negotiator.prototype.language = function language(available) { + var set = this.languages(available); + return set && set[0]; + }; + Negotiator.prototype.languages = function languages(available) { + return preferredLanguages(this.request.headers["accept-language"], available); + }; + Negotiator.prototype.mediaType = function mediaType(available) { + var set = this.mediaTypes(available); + return set && set[0]; + }; + Negotiator.prototype.mediaTypes = function mediaTypes(available) { + return preferredMediaTypes(this.request.headers.accept, available); + }; + Negotiator.prototype.preferredCharset = Negotiator.prototype.charset; + Negotiator.prototype.preferredCharsets = Negotiator.prototype.charsets; + Negotiator.prototype.preferredEncoding = Negotiator.prototype.encoding; + Negotiator.prototype.preferredEncodings = Negotiator.prototype.encodings; + Negotiator.prototype.preferredLanguage = Negotiator.prototype.language; + Negotiator.prototype.preferredLanguages = Negotiator.prototype.languages; + Negotiator.prototype.preferredMediaType = Negotiator.prototype.mediaType; + Negotiator.prototype.preferredMediaTypes = Negotiator.prototype.mediaTypes; + } +}); + +// node_modules/accepts/index.js +var require_accepts = __commonJS({ + "node_modules/accepts/index.js"(exports2, module2) { + "use strict"; + var Negotiator = require_negotiator(); + var mime2 = require_mime_types(); + module2.exports = Accepts; + function Accepts(req) { + if (!(this instanceof Accepts)) { + return new Accepts(req); + } + this.headers = req.headers; + this.negotiator = new Negotiator(req); + } + Accepts.prototype.type = Accepts.prototype.types = function(types_) { + var types = types_; + if (types && !Array.isArray(types)) { + types = new Array(arguments.length); + for (var i = 0; i < types.length; i++) { + types[i] = arguments[i]; + } + } + if (!types || types.length === 0) { + return this.negotiator.mediaTypes(); + } + if (!this.headers.accept) { + return types[0]; + } + var mimes = types.map(extToMime); + var accepts = this.negotiator.mediaTypes(mimes.filter(validMime)); + var first = accepts[0]; + return first ? types[mimes.indexOf(first)] : false; + }; + Accepts.prototype.encoding = Accepts.prototype.encodings = function(encodings_) { + var encodings = encodings_; + if (encodings && !Array.isArray(encodings)) { + encodings = new Array(arguments.length); + for (var i = 0; i < encodings.length; i++) { + encodings[i] = arguments[i]; + } + } + if (!encodings || encodings.length === 0) { + return this.negotiator.encodings(); + } + return this.negotiator.encodings(encodings)[0] || false; + }; + Accepts.prototype.charset = Accepts.prototype.charsets = function(charsets_) { + var charsets = charsets_; + if (charsets && !Array.isArray(charsets)) { + charsets = new Array(arguments.length); + for (var i = 0; i < charsets.length; i++) { + charsets[i] = arguments[i]; + } + } + if (!charsets || charsets.length === 0) { + return this.negotiator.charsets(); + } + return this.negotiator.charsets(charsets)[0] || false; + }; + Accepts.prototype.lang = Accepts.prototype.langs = Accepts.prototype.language = Accepts.prototype.languages = function(languages_) { + var languages = languages_; + if (languages && !Array.isArray(languages)) { + languages = new Array(arguments.length); + for (var i = 0; i < languages.length; i++) { + languages[i] = arguments[i]; + } + } + if (!languages || languages.length === 0) { + return this.negotiator.languages(); + } + return this.negotiator.languages(languages)[0] || false; + }; + function extToMime(type) { + return type.indexOf("/") === -1 ? mime2.lookup(type) : type; + } + function validMime(type) { + return typeof type === "string"; + } + } +}); + +// node_modules/fresh/index.js +var require_fresh = __commonJS({ + "node_modules/fresh/index.js"(exports2, module2) { + "use strict"; + var CACHE_CONTROL_NO_CACHE_REGEXP = /(?:^|,)\s*?no-cache\s*?(?:,|$)/; + module2.exports = fresh; + function fresh(reqHeaders, resHeaders) { + var modifiedSince = reqHeaders["if-modified-since"]; + var noneMatch = reqHeaders["if-none-match"]; + if (!modifiedSince && !noneMatch) { + return false; + } + var cacheControl = reqHeaders["cache-control"]; + if (cacheControl && CACHE_CONTROL_NO_CACHE_REGEXP.test(cacheControl)) { + return false; + } + if (noneMatch && noneMatch !== "*") { + var etag = resHeaders["etag"]; + if (!etag) { + return false; + } + var etagStale = true; + var matches = parseTokenList(noneMatch); + for (var i = 0; i < matches.length; i++) { + var match = matches[i]; + if (match === etag || match === "W/" + etag || "W/" + match === etag) { + etagStale = false; + break; + } + } + if (etagStale) { + return false; + } + } + if (modifiedSince) { + var lastModified = resHeaders["last-modified"]; + var modifiedStale = !lastModified || !(parseHttpDate(lastModified) <= parseHttpDate(modifiedSince)); + if (modifiedStale) { + return false; + } + } + return true; + } + function parseHttpDate(date) { + var timestamp = date && Date.parse(date); + return typeof timestamp === "number" ? timestamp : NaN; + } + function parseTokenList(str) { + var end = 0; + var list = []; + var start = 0; + for (var i = 0, len = str.length; i < len; i++) { + switch (str.charCodeAt(i)) { + case 32: + if (start === end) { + start = end = i + 1; + } + break; + case 44: + list.push(str.substring(start, end)); + start = end = i + 1; + break; + default: + end = i + 1; + break; + } + } + list.push(str.substring(start, end)); + return list; + } + } +}); + +// node_modules/range-parser/index.js +var require_range_parser = __commonJS({ + "node_modules/range-parser/index.js"(exports2, module2) { + "use strict"; + module2.exports = rangeParser; + function rangeParser(size, str, options) { + if (typeof str !== "string") { + throw new TypeError("argument str must be a string"); + } + var index = str.indexOf("="); + if (index === -1) { + return -2; + } + var arr = str.slice(index + 1).split(","); + var ranges = []; + ranges.type = str.slice(0, index); + for (var i = 0; i < arr.length; i++) { + var range = arr[i].split("-"); + var start = parseInt(range[0], 10); + var end = parseInt(range[1], 10); + if (isNaN(start)) { + start = size - end; + end = size - 1; + } else if (isNaN(end)) { + end = size - 1; + } + if (end > size - 1) { + end = size - 1; + } + if (isNaN(start) || isNaN(end) || start > end || start < 0) { + continue; + } + ranges.push({ + start, + end + }); + } + if (ranges.length < 1) { + return -1; + } + return options && options.combine ? combineRanges(ranges) : ranges; + } + function combineRanges(ranges) { + var ordered = ranges.map(mapWithIndex).sort(sortByRangeStart); + for (var j = 0, i = 1; i < ordered.length; i++) { + var range = ordered[i]; + var current = ordered[j]; + if (range.start > current.end + 1) { + ordered[++j] = range; + } else if (range.end > current.end) { + current.end = range.end; + current.index = Math.min(current.index, range.index); + } + } + ordered.length = j + 1; + var combined = ordered.sort(sortByRangeIndex).map(mapWithoutIndex); + combined.type = ranges.type; + return combined; + } + function mapWithIndex(range, index) { + return { + start: range.start, + end: range.end, + index + }; + } + function mapWithoutIndex(range) { + return { + start: range.start, + end: range.end + }; + } + function sortByRangeIndex(a, b) { + return a.index - b.index; + } + function sortByRangeStart(a, b) { + return a.start - b.start; + } + } +}); + +// node_modules/express/lib/request.js +var require_request = __commonJS({ + "node_modules/express/lib/request.js"(exports2, module2) { + "use strict"; + var accepts = require_accepts(); + var isIP = require("net").isIP; + var typeis = require_type_is(); + var http3 = require("http"); + var fresh = require_fresh(); + var parseRange = require_range_parser(); + var parse = require_parseurl(); + var proxyaddr = require_proxy_addr(); + var req = Object.create(http3.IncomingMessage.prototype); + module2.exports = req; + req.get = req.header = function header(name) { + if (!name) { + throw new TypeError("name argument is required to req.get"); + } + if (typeof name !== "string") { + throw new TypeError("name must be a string to req.get"); + } + var lc = name.toLowerCase(); + switch (lc) { + case "referer": + case "referrer": + return this.headers.referrer || this.headers.referer; + default: + return this.headers[lc]; + } + }; + req.accepts = function() { + var accept = accepts(this); + return accept.types.apply(accept, arguments); + }; + req.acceptsEncodings = function() { + var accept = accepts(this); + return accept.encodings.apply(accept, arguments); + }; + req.acceptsCharsets = function() { + var accept = accepts(this); + return accept.charsets.apply(accept, arguments); + }; + req.acceptsLanguages = function() { + var accept = accepts(this); + return accept.languages.apply(accept, arguments); + }; + req.range = function range(size, options) { + var range2 = this.get("Range"); + if (!range2) + return; + return parseRange(size, range2, options); + }; + defineGetter(req, "query", function query() { + var queryparse = this.app.get("query parser fn"); + if (!queryparse) { + return Object.create(null); + } + var querystring = parse(this).query; + return queryparse(querystring); + }); + req.is = function is(types) { + var arr = types; + if (!Array.isArray(types)) { + arr = new Array(arguments.length); + for (var i = 0; i < arr.length; i++) { + arr[i] = arguments[i]; + } + } + return typeis(this, arr); + }; + defineGetter(req, "protocol", function protocol() { + var proto = this.connection.encrypted ? "https" : "http"; + var trust = this.app.get("trust proxy fn"); + if (!trust(this.connection.remoteAddress, 0)) { + return proto; + } + var header = this.get("X-Forwarded-Proto") || proto; + var index = header.indexOf(","); + return index !== -1 ? header.substring(0, index).trim() : header.trim(); + }); + defineGetter(req, "secure", function secure() { + return this.protocol === "https"; + }); + defineGetter(req, "ip", function ip() { + var trust = this.app.get("trust proxy fn"); + return proxyaddr(this, trust); + }); + defineGetter(req, "ips", function ips() { + var trust = this.app.get("trust proxy fn"); + var addrs = proxyaddr.all(this, trust); + addrs.reverse().pop(); + return addrs; + }); + defineGetter(req, "subdomains", function subdomains() { + var hostname = this.hostname; + if (!hostname) + return []; + var offset = this.app.get("subdomain offset"); + var subdomains2 = !isIP(hostname) ? hostname.split(".").reverse() : [hostname]; + return subdomains2.slice(offset); + }); + defineGetter(req, "path", function path2() { + return parse(this).pathname; + }); + defineGetter(req, "host", function host() { + var trust = this.app.get("trust proxy fn"); + var val = this.get("X-Forwarded-Host"); + if (!val || !trust(this.connection.remoteAddress, 0)) { + val = this.get("Host"); + } else if (val.indexOf(",") !== -1) { + val = val.substring(0, val.indexOf(",")).trimRight(); + } + return val || void 0; + }); + defineGetter(req, "hostname", function hostname() { + var host = this.host; + if (!host) + return; + var offset = host[0] === "[" ? host.indexOf("]") + 1 : 0; + var index = host.indexOf(":", offset); + return index !== -1 ? host.substring(0, index) : host; + }); + defineGetter(req, "fresh", function() { + var method = this.method; + var res = this.res; + var status = res.statusCode; + if (method !== "GET" && method !== "HEAD") + return false; + if (status >= 200 && status < 300 || status === 304) { + return fresh(this.headers, { + "etag": res.get("ETag"), + "last-modified": res.get("Last-Modified") + }); + } + return false; + }); + defineGetter(req, "stale", function stale() { + return !this.fresh; + }); + defineGetter(req, "xhr", function xhr() { + var val = this.get("X-Requested-With") || ""; + return val.toLowerCase() === "xmlhttprequest"; + }); + function defineGetter(obj, name, getter) { + Object.defineProperty(obj, name, { + configurable: true, + enumerable: true, + get: getter + }); + } + } +}); + +// node_modules/content-disposition/index.js +var require_content_disposition = __commonJS({ + "node_modules/content-disposition/index.js"(exports2, module2) { + "use strict"; + module2.exports = contentDisposition; + module2.exports.parse = parse; + var basename = require("path").basename; + var Buffer2 = require_safe_buffer().Buffer; + var ENCODE_URL_ATTR_CHAR_REGEXP = /[\x00-\x20"'()*,/:;<=>?@[\\\]{}\x7f]/g; + var HEX_ESCAPE_REGEXP = /%[0-9A-Fa-f]{2}/; + var HEX_ESCAPE_REPLACE_REGEXP = /%([0-9A-Fa-f]{2})/g; + var NON_LATIN1_REGEXP = /[^\x20-\x7e\xa0-\xff]/g; + var QESC_REGEXP = /\\([\u0000-\u007f])/g; + var QUOTE_REGEXP = /([\\"])/g; + var PARAM_REGEXP = /;[\x09\x20]*([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*=[\x09\x20]*("(?:[\x20!\x23-\x5b\x5d-\x7e\x80-\xff]|\\[\x20-\x7e])*"|[!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*/g; + var TEXT_REGEXP = /^[\x20-\x7e\x80-\xff]+$/; + var TOKEN_REGEXP = /^[!#$%&'*+.0-9A-Z^_`a-z|~-]+$/; + var EXT_VALUE_REGEXP = /^([A-Za-z0-9!#$%&+\-^_`{}~]+)'(?:[A-Za-z]{2,3}(?:-[A-Za-z]{3}){0,3}|[A-Za-z]{4,8}|)'((?:%[0-9A-Fa-f]{2}|[A-Za-z0-9!#$&+.^_`|~-])+)$/; + var DISPOSITION_TYPE_REGEXP = /^([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*(?:$|;)/; + function contentDisposition(filename, options) { + var opts = options || {}; + var type = opts.type || "attachment"; + var params = createparams(filename, opts.fallback); + return format(new ContentDisposition(type, params)); + } + function createparams(filename, fallback) { + if (filename === void 0) { + return; + } + var params = {}; + if (typeof filename !== "string") { + throw new TypeError("filename must be a string"); + } + if (fallback === void 0) { + fallback = true; + } + if (typeof fallback !== "string" && typeof fallback !== "boolean") { + throw new TypeError("fallback must be a string or boolean"); + } + if (typeof fallback === "string" && NON_LATIN1_REGEXP.test(fallback)) { + throw new TypeError("fallback must be ISO-8859-1 string"); + } + var name = basename(filename); + var isQuotedString = TEXT_REGEXP.test(name); + var fallbackName = typeof fallback !== "string" ? fallback && getlatin1(name) : basename(fallback); + var hasFallback = typeof fallbackName === "string" && fallbackName !== name; + if (hasFallback || !isQuotedString || HEX_ESCAPE_REGEXP.test(name)) { + params["filename*"] = name; + } + if (isQuotedString || hasFallback) { + params.filename = hasFallback ? fallbackName : name; + } + return params; + } + function format(obj) { + var parameters = obj.parameters; + var type = obj.type; + if (!type || typeof type !== "string" || !TOKEN_REGEXP.test(type)) { + throw new TypeError("invalid type"); + } + var string = String(type).toLowerCase(); + if (parameters && typeof parameters === "object") { + var param; + var params = Object.keys(parameters).sort(); + for (var i = 0; i < params.length; i++) { + param = params[i]; + var val = param.substr(-1) === "*" ? ustring(parameters[param]) : qstring(parameters[param]); + string += "; " + param + "=" + val; + } + } + return string; + } + function decodefield(str) { + var match = EXT_VALUE_REGEXP.exec(str); + if (!match) { + throw new TypeError("invalid extended field value"); + } + var charset = match[1].toLowerCase(); + var encoded = match[2]; + var value; + var binary = encoded.replace(HEX_ESCAPE_REPLACE_REGEXP, pdecode); + switch (charset) { + case "iso-8859-1": + value = getlatin1(binary); + break; + case "utf-8": + value = Buffer2.from(binary, "binary").toString("utf8"); + break; + default: + throw new TypeError("unsupported charset in extended field"); + } + return value; + } + function getlatin1(val) { + return String(val).replace(NON_LATIN1_REGEXP, "?"); + } + function parse(string) { + if (!string || typeof string !== "string") { + throw new TypeError("argument string is required"); + } + var match = DISPOSITION_TYPE_REGEXP.exec(string); + if (!match) { + throw new TypeError("invalid type format"); + } + var index = match[0].length; + var type = match[1].toLowerCase(); + var key; + var names = []; + var params = {}; + var value; + index = PARAM_REGEXP.lastIndex = match[0].substr(-1) === ";" ? index - 1 : index; + while (match = PARAM_REGEXP.exec(string)) { + if (match.index !== index) { + throw new TypeError("invalid parameter format"); + } + index += match[0].length; + key = match[1].toLowerCase(); + value = match[2]; + if (names.indexOf(key) !== -1) { + throw new TypeError("invalid duplicate parameter"); + } + names.push(key); + if (key.indexOf("*") + 1 === key.length) { + key = key.slice(0, -1); + value = decodefield(value); + params[key] = value; + continue; + } + if (typeof params[key] === "string") { + continue; + } + if (value[0] === '"') { + value = value.substr(1, value.length - 2).replace(QESC_REGEXP, "$1"); + } + params[key] = value; + } + if (index !== -1 && index !== string.length) { + throw new TypeError("invalid parameter format"); + } + return new ContentDisposition(type, params); + } + function pdecode(str, hex) { + return String.fromCharCode(parseInt(hex, 16)); + } + function pencode(char) { + return "%" + String(char).charCodeAt(0).toString(16).toUpperCase(); + } + function qstring(val) { + var str = String(val); + return '"' + str.replace(QUOTE_REGEXP, "\\$1") + '"'; + } + function ustring(val) { + var str = String(val); + var encoded = encodeURIComponent(str).replace(ENCODE_URL_ATTR_CHAR_REGEXP, pencode); + return "UTF-8''" + encoded; + } + function ContentDisposition(type, parameters) { + this.type = type; + this.parameters = parameters; + } + } +}); + +// node_modules/path-is-absolute/index.js +var require_path_is_absolute = __commonJS({ + "node_modules/path-is-absolute/index.js"(exports2, module2) { + "use strict"; + function posix(path2) { + return path2.charAt(0) === "/"; + } + function win32(path2) { + var splitDeviceRe = /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/; + var result = splitDeviceRe.exec(path2); + var device = result[1] || ""; + var isUnc = Boolean(device && device.charAt(1) !== ":"); + return Boolean(result[2] || isUnc); + } + module2.exports = process.platform === "win32" ? win32 : posix; + module2.exports.posix = posix; + module2.exports.win32 = win32; + } +}); + +// node_modules/cookie-signature/index.js +var require_cookie_signature = __commonJS({ + "node_modules/cookie-signature/index.js"(exports2) { + var crypto = require("crypto"); + exports2.sign = function(val, secret) { + if (typeof val != "string") + throw new TypeError("Cookie value must be provided as a string."); + if (typeof secret != "string") + throw new TypeError("Secret string must be provided."); + return val + "." + crypto.createHmac("sha256", secret).update(val).digest("base64").replace(/\=+$/, ""); + }; + exports2.unsign = function(val, secret) { + if (typeof val != "string") + throw new TypeError("Signed cookie string must be provided."); + if (typeof secret != "string") + throw new TypeError("Secret string must be provided."); + var str = val.slice(0, val.lastIndexOf(".")), mac = exports2.sign(str, secret); + return sha1(mac) == sha1(val) ? str : false; + }; + function sha1(str) { + return crypto.createHash("sha1").update(str).digest("hex"); + } + } +}); + +// node_modules/cookie/index.js +var require_cookie = __commonJS({ + "node_modules/cookie/index.js"(exports2) { + "use strict"; + exports2.parse = parse; + exports2.serialize = serialize; + var decode = decodeURIComponent; + var encode = encodeURIComponent; + var pairSplitRegExp = /; */; + var fieldContentRegExp = /^[\u0009\u0020-\u007e\u0080-\u00ff]+$/; + function parse(str, options) { + if (typeof str !== "string") { + throw new TypeError("argument str must be a string"); + } + var obj = {}; + var opt = options || {}; + var pairs = str.split(pairSplitRegExp); + var dec = opt.decode || decode; + for (var i = 0; i < pairs.length; i++) { + var pair = pairs[i]; + var eq_idx = pair.indexOf("="); + if (eq_idx < 0) { + continue; + } + var key = pair.substr(0, eq_idx).trim(); + var val = pair.substr(++eq_idx, pair.length).trim(); + if (val[0] == '"') { + val = val.slice(1, -1); + } + if (obj[key] == void 0) { + obj[key] = tryDecode(val, dec); + } + } + return obj; + } + function serialize(name, val, options) { + var opt = options || {}; + var enc = opt.encode || encode; + if (typeof enc !== "function") { + throw new TypeError("option encode is invalid"); + } + if (!fieldContentRegExp.test(name)) { + throw new TypeError("argument name is invalid"); + } + var value = enc(val); + if (value && !fieldContentRegExp.test(value)) { + throw new TypeError("argument val is invalid"); + } + var str = name + "=" + value; + if (opt.maxAge != null) { + var maxAge = opt.maxAge - 0; + if (isNaN(maxAge) || !isFinite(maxAge)) { + throw new TypeError("option maxAge is invalid"); + } + str += "; Max-Age=" + Math.floor(maxAge); + } + if (opt.domain) { + if (!fieldContentRegExp.test(opt.domain)) { + throw new TypeError("option domain is invalid"); + } + str += "; Domain=" + opt.domain; + } + if (opt.path) { + if (!fieldContentRegExp.test(opt.path)) { + throw new TypeError("option path is invalid"); + } + str += "; Path=" + opt.path; + } + if (opt.expires) { + if (typeof opt.expires.toUTCString !== "function") { + throw new TypeError("option expires is invalid"); + } + str += "; Expires=" + opt.expires.toUTCString(); + } + if (opt.httpOnly) { + str += "; HttpOnly"; + } + if (opt.secure) { + str += "; Secure"; + } + if (opt.sameSite) { + var sameSite = typeof opt.sameSite === "string" ? opt.sameSite.toLowerCase() : opt.sameSite; + switch (sameSite) { + case true: + str += "; SameSite=Strict"; + break; + case "lax": + str += "; SameSite=Lax"; + break; + case "strict": + str += "; SameSite=Strict"; + break; + case "none": + str += "; SameSite=None"; + break; + default: + throw new TypeError("option sameSite is invalid"); + } + } + return str; + } + function tryDecode(str, decode2) { + try { + return decode2(str); + } catch (e) { + return str; + } + } + } +}); + +// node_modules/send/node_modules/debug/node_modules/ms/index.js +var require_ms4 = __commonJS({ + "node_modules/send/node_modules/debug/node_modules/ms/index.js"(exports2, module2) { + var s = 1e3; + var m = s * 60; + var h = m * 60; + var d = h * 24; + var y = d * 365.25; + module2.exports = function(val, options) { + options = options || {}; + var type = typeof val; + if (type === "string" && val.length > 0) { + return parse(val); + } else if (type === "number" && isNaN(val) === false) { + 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 parse(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|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 "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) { + if (ms >= d) { + return Math.round(ms / d) + "d"; + } + if (ms >= h) { + return Math.round(ms / h) + "h"; + } + if (ms >= m) { + return Math.round(ms / m) + "m"; + } + if (ms >= s) { + return Math.round(ms / s) + "s"; + } + return ms + "ms"; + } + function fmtLong(ms) { + return plural(ms, d, "day") || plural(ms, h, "hour") || plural(ms, m, "minute") || plural(ms, s, "second") || ms + " ms"; + } + function plural(ms, n, name) { + if (ms < n) { + return; + } + if (ms < n * 1.5) { + return Math.floor(ms / n) + " " + name; + } + return Math.ceil(ms / n) + " " + name + "s"; + } + } +}); + +// node_modules/send/node_modules/debug/src/debug.js +var require_debug4 = __commonJS({ + "node_modules/send/node_modules/debug/src/debug.js"(exports2, module2) { + exports2 = module2.exports = createDebug.debug = createDebug["default"] = createDebug; + exports2.coerce = coerce; + exports2.disable = disable; + exports2.enable = enable; + exports2.enabled = enabled; + exports2.humanize = require_ms4(); + exports2.instances = []; + exports2.names = []; + exports2.skips = []; + exports2.formatters = {}; + function selectColor(namespace) { + var hash = 0, i; + for (i in namespace) { + hash = (hash << 5) - hash + namespace.charCodeAt(i); + hash |= 0; + } + return exports2.colors[Math.abs(hash) % exports2.colors.length]; + } + function createDebug(namespace) { + var prevTime; + function debug() { + if (!debug.enabled) + return; + var self2 = debug; + var curr = +new Date(); + var ms = curr - (prevTime || curr); + self2.diff = ms; + self2.prev = prevTime; + self2.curr = curr; + prevTime = curr; + var args2 = new Array(arguments.length); + for (var i = 0; i < args2.length; i++) { + args2[i] = arguments[i]; + } + args2[0] = exports2.coerce(args2[0]); + if (typeof args2[0] !== "string") { + args2.unshift("%O"); + } + var index = 0; + args2[0] = args2[0].replace(/%([a-zA-Z%])/g, function(match, format) { + if (match === "%%") + return match; + index++; + var formatter = exports2.formatters[format]; + if (typeof formatter === "function") { + var val = args2[index]; + match = formatter.call(self2, val); + args2.splice(index, 1); + index--; + } + return match; + }); + exports2.formatArgs.call(self2, args2); + var logFn = debug.log || exports2.log || console.log.bind(console); + logFn.apply(self2, args2); + } + debug.namespace = namespace; + debug.enabled = exports2.enabled(namespace); + debug.useColors = exports2.useColors(); + debug.color = selectColor(namespace); + debug.destroy = destroy; + if (typeof exports2.init === "function") { + exports2.init(debug); + } + exports2.instances.push(debug); + return debug; + } + function destroy() { + var index = exports2.instances.indexOf(this); + if (index !== -1) { + exports2.instances.splice(index, 1); + return true; + } else { + return false; + } + } + function enable(namespaces) { + exports2.save(namespaces); + exports2.names = []; + exports2.skips = []; + var i; + var split = (typeof namespaces === "string" ? namespaces : "").split(/[\s,]+/); + var len = split.length; + for (i = 0; i < len; i++) { + if (!split[i]) + continue; + namespaces = split[i].replace(/\*/g, ".*?"); + if (namespaces[0] === "-") { + exports2.skips.push(new RegExp("^" + namespaces.substr(1) + "$")); + } else { + exports2.names.push(new RegExp("^" + namespaces + "$")); + } + } + for (i = 0; i < exports2.instances.length; i++) { + var instance = exports2.instances[i]; + instance.enabled = exports2.enabled(instance.namespace); + } + } + function disable() { + exports2.enable(""); + } + function enabled(name) { + if (name[name.length - 1] === "*") { + return true; + } + var i, len; + for (i = 0, len = exports2.skips.length; i < len; i++) { + if (exports2.skips[i].test(name)) { + return false; + } + } + for (i = 0, len = exports2.names.length; i < len; i++) { + if (exports2.names[i].test(name)) { + return true; + } + } + return false; + } + function coerce(val) { + if (val instanceof Error) + return val.stack || val.message; + return val; + } + } +}); + +// node_modules/send/node_modules/debug/src/browser.js +var require_browser4 = __commonJS({ + "node_modules/send/node_modules/debug/src/browser.js"(exports2, module2) { + exports2 = module2.exports = require_debug4(); + exports2.log = log2; + exports2.formatArgs = formatArgs; + exports2.save = save; + exports2.load = load; + exports2.useColors = useColors; + exports2.storage = typeof chrome != "undefined" && typeof chrome.storage != "undefined" ? chrome.storage.local : localstorage(); + 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") { + 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 || typeof window !== "undefined" && window.console && (window.console.firebug || window.console.exception && window.console.table) || typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 || typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/); + } + exports2.formatters.j = function(v) { + try { + return JSON.stringify(v); + } catch (err) { + return "[UnexpectedJSONParseError]: " + err.message; + } + }; + function formatArgs(args2) { + var useColors2 = this.useColors; + args2[0] = (useColors2 ? "%c" : "") + this.namespace + (useColors2 ? " %c" : " ") + args2[0] + (useColors2 ? "%c " : " ") + "+" + exports2.humanize(this.diff); + if (!useColors2) + return; + var c = "color: " + this.color; + args2.splice(1, 0, c, "color: inherit"); + var index = 0; + var lastC = 0; + args2[0].replace(/%[a-zA-Z%]/g, function(match) { + if (match === "%%") + return; + index++; + if (match === "%c") { + lastC = index; + } + }); + args2.splice(lastC, 0, c); + } + function log2() { + return typeof console === "object" && console.log && Function.prototype.apply.call(console.log, console, arguments); + } + function save(namespaces) { + try { + if (namespaces == null) { + exports2.storage.removeItem("debug"); + } else { + exports2.storage.debug = namespaces; + } + } catch (e) { + } + } + function load() { + var r; + try { + r = exports2.storage.debug; + } catch (e) { + } + if (!r && typeof process !== "undefined" && "env" in process) { + r = process.env.DEBUG; + } + return r; + } + exports2.enable(load()); + function localstorage() { + try { + return window.localStorage; + } catch (e) { + } + } + } +}); + +// node_modules/send/node_modules/debug/src/node.js +var require_node4 = __commonJS({ + "node_modules/send/node_modules/debug/src/node.js"(exports2, module2) { + var tty = require("tty"); + var util = require("util"); + exports2 = module2.exports = require_debug4(); + exports2.init = init; + exports2.log = log2; + exports2.formatArgs = formatArgs; + exports2.save = save; + exports2.load = load; + exports2.useColors = useColors; + exports2.colors = [6, 2, 3, 4, 5, 1]; + try { + supportsColor = require_supports_color(); + if (supportsColor && supportsColor.level >= 2) { + exports2.colors = [ + 20, + 21, + 26, + 27, + 32, + 33, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 56, + 57, + 62, + 63, + 68, + 69, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 92, + 93, + 98, + 99, + 112, + 113, + 128, + 129, + 134, + 135, + 148, + 149, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 178, + 179, + 184, + 185, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 214, + 215, + 220, + 221 + ]; + } + } catch (err) { + } + var supportsColor; + exports2.inspectOpts = Object.keys(process.env).filter(function(key) { + return /^debug_/i.test(key); + }).reduce(function(obj, key) { + var prop = key.substring(6).toLowerCase().replace(/_([a-z])/g, function(_, k) { + return k.toUpperCase(); + }); + var val = process.env[key]; + if (/^(yes|on|true|enabled)$/i.test(val)) + val = true; + else if (/^(no|off|false|disabled)$/i.test(val)) + val = false; + else if (val === "null") + val = null; + else + val = Number(val); + obj[prop] = val; + return obj; + }, {}); + function useColors() { + return "colors" in exports2.inspectOpts ? Boolean(exports2.inspectOpts.colors) : tty.isatty(process.stderr.fd); + } + exports2.formatters.o = function(v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts).split("\n").map(function(str) { + return str.trim(); + }).join(" "); + }; + exports2.formatters.O = function(v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts); + }; + function formatArgs(args2) { + var name = this.namespace; + var useColors2 = this.useColors; + if (useColors2) { + var c = this.color; + var colorCode = "[3" + (c < 8 ? c : "8;5;" + c); + var prefix = " " + colorCode + ";1m" + name + " "; + args2[0] = prefix + args2[0].split("\n").join("\n" + prefix); + args2.push(colorCode + "m+" + exports2.humanize(this.diff) + ""); + } else { + args2[0] = getDate() + name + " " + args2[0]; + } + } + function getDate() { + if (exports2.inspectOpts.hideDate) { + return ""; + } else { + return new Date().toISOString() + " "; + } + } + function log2() { + return process.stderr.write(util.format.apply(util, arguments) + "\n"); + } + function save(namespaces) { + if (namespaces == null) { + delete process.env.DEBUG; + } else { + process.env.DEBUG = namespaces; + } + } + function load() { + return process.env.DEBUG; + } + function init(debug) { + debug.inspectOpts = {}; + var keys = Object.keys(exports2.inspectOpts); + for (var i = 0; i < keys.length; i++) { + debug.inspectOpts[keys[i]] = exports2.inspectOpts[keys[i]]; + } + } + exports2.enable(load()); + } +}); + +// node_modules/send/node_modules/debug/src/index.js +var require_src4 = __commonJS({ + "node_modules/send/node_modules/debug/src/index.js"(exports2, module2) { + if (typeof process === "undefined" || process.type === "renderer") { + module2.exports = require_browser4(); + } else { + module2.exports = require_node4(); + } + } +}); + +// node_modules/destroy/index.js +var require_destroy = __commonJS({ + "node_modules/destroy/index.js"(exports2, module2) { + "use strict"; + var ReadStream = require("fs").ReadStream; + var Stream = require("stream"); + module2.exports = destroy; + function destroy(stream) { + if (stream instanceof ReadStream) { + return destroyReadStream(stream); + } + if (!(stream instanceof Stream)) { + return stream; + } + if (typeof stream.destroy === "function") { + stream.destroy(); + } + return stream; + } + function destroyReadStream(stream) { + stream.destroy(); + if (typeof stream.close === "function") { + stream.on("open", onOpenClose); + } + return stream; + } + function onOpenClose() { + if (typeof this.fd === "number") { + this.close(); + } + } + } +}); + +// node_modules/send/node_modules/ms/index.js +var require_ms5 = __commonJS({ + "node_modules/send/node_modules/ms/index.js"(exports2, module2) { + 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 parse(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 parse(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/send/index.js +var require_send = __commonJS({ + "node_modules/send/index.js"(exports2, module2) { + "use strict"; + var createError = require_http_errors(); + var debug = require_src4()("send"); + var destroy = require_destroy(); + var encodeUrl = require_encodeurl(); + var escapeHtml = require_escape_html(); + var etag = require_etag(); + var fresh = require_fresh(); + var fs = require("fs"); + var mime2 = require_mime_types(); + var ms = require_ms5(); + var onFinished = require_on_finished(); + var parseRange = require_range_parser(); + var path2 = require("path"); + var statuses = require_statuses(); + var Stream = require("stream"); + var util = require("util"); + var extname = path2.extname; + var join = path2.join; + var normalize = path2.normalize; + var resolve = path2.resolve; + var sep = path2.sep; + var BYTES_RANGE_REGEXP = /^ *bytes=/; + var MAX_MAXAGE = 60 * 60 * 24 * 365 * 1e3; + var UP_PATH_REGEXP = /(?:^|[\\/])\.\.(?:[\\/]|$)/; + module2.exports = send; + function send(req, path3, options) { + return new SendStream(req, path3, options); + } + function SendStream(req, path3, options) { + Stream.call(this); + var opts = options || {}; + this.options = opts; + this.path = path3; + this.req = req; + this._acceptRanges = opts.acceptRanges !== void 0 ? Boolean(opts.acceptRanges) : true; + this._cacheControl = opts.cacheControl !== void 0 ? Boolean(opts.cacheControl) : true; + this._etag = opts.etag !== void 0 ? Boolean(opts.etag) : true; + this._dotfiles = opts.dotfiles !== void 0 ? opts.dotfiles : "ignore"; + if (this._dotfiles !== "ignore" && this._dotfiles !== "allow" && this._dotfiles !== "deny") { + throw new TypeError('dotfiles option must be "allow", "deny", or "ignore"'); + } + this._extensions = opts.extensions !== void 0 ? normalizeList(opts.extensions, "extensions option") : []; + this._immutable = opts.immutable !== void 0 ? Boolean(opts.immutable) : false; + this._index = opts.index !== void 0 ? normalizeList(opts.index, "index option") : ["index.html"]; + this._lastModified = opts.lastModified !== void 0 ? Boolean(opts.lastModified) : true; + this._maxage = opts.maxAge || opts.maxage; + this._maxage = typeof this._maxage === "string" ? ms(this._maxage) : Number(this._maxage); + this._maxage = !isNaN(this._maxage) ? Math.min(Math.max(0, this._maxage), MAX_MAXAGE) : 0; + this._root = opts.root ? resolve(opts.root) : null; + } + util.inherits(SendStream, Stream); + SendStream.prototype.error = function error(status, err) { + if (hasListeners(this, "error")) { + return this.emit("error", createError(status, err, { + expose: false + })); + } + var res = this.res; + var msg = statuses[status] || String(status); + var doc = createHtmlDocument("Error", escapeHtml(msg)); + clearHeaders(res); + if (err && err.headers) { + setHeaders(res, err.headers); + } + res.statusCode = status; + res.setHeader("Content-Type", "text/html; charset=UTF-8"); + res.setHeader("Content-Length", Buffer.byteLength(doc)); + res.setHeader("Content-Security-Policy", "default-src 'none'"); + res.setHeader("X-Content-Type-Options", "nosniff"); + res.end(doc); + }; + SendStream.prototype.hasTrailingSlash = function hasTrailingSlash() { + return this.path[this.path.length - 1] === "/"; + }; + SendStream.prototype.isConditionalGET = function isConditionalGET() { + return this.req.headers["if-match"] || this.req.headers["if-unmodified-since"] || this.req.headers["if-none-match"] || this.req.headers["if-modified-since"]; + }; + SendStream.prototype.isPreconditionFailure = function isPreconditionFailure() { + var req = this.req; + var res = this.res; + var match = req.headers["if-match"]; + if (match) { + var etag2 = res.getHeader("ETag"); + return !etag2 || match !== "*" && parseTokenList(match).every(function(match2) { + return match2 !== etag2 && match2 !== "W/" + etag2 && "W/" + match2 !== etag2; + }); + } + var unmodifiedSince = parseHttpDate(req.headers["if-unmodified-since"]); + if (!isNaN(unmodifiedSince)) { + var lastModified = parseHttpDate(res.getHeader("Last-Modified")); + return isNaN(lastModified) || lastModified > unmodifiedSince; + } + return false; + }; + SendStream.prototype.removeContentHeaderFields = function removeContentHeaderFields() { + var res = this.res; + var headers = getHeaderNames(res); + for (var i = 0; i < headers.length; i++) { + var header = headers[i]; + if (header.substr(0, 8) === "content-" && header !== "content-location") { + res.removeHeader(header); + } + } + }; + SendStream.prototype.notModified = function notModified() { + var res = this.res; + debug("not modified"); + this.removeContentHeaderFields(); + res.statusCode = 304; + res.end(); + }; + SendStream.prototype.headersAlreadySent = function headersAlreadySent() { + var err = new Error("Can't set headers after they are sent."); + debug("headers already sent"); + this.error(500, err); + }; + SendStream.prototype.isCachable = function isCachable() { + var statusCode = this.res.statusCode; + return statusCode >= 200 && statusCode < 300 || statusCode === 304; + }; + SendStream.prototype.onStatError = function onStatError(error) { + switch (error.code) { + case "ENAMETOOLONG": + case "ENOENT": + case "ENOTDIR": + this.error(404, error); + break; + default: + this.error(500, error); + break; + } + }; + SendStream.prototype.isFresh = function isFresh() { + return fresh(this.req.headers, { + etag: this.res.getHeader("ETag"), + "last-modified": this.res.getHeader("Last-Modified") + }); + }; + SendStream.prototype.isRangeFresh = function isRangeFresh() { + var ifRange = this.req.headers["if-range"]; + if (!ifRange) { + return true; + } + if (ifRange.indexOf('"') !== -1) { + var etag2 = this.res.getHeader("ETag"); + return Boolean(etag2 && ifRange.indexOf(etag2) !== -1); + } + var lastModified = this.res.getHeader("Last-Modified"); + return parseHttpDate(lastModified) <= parseHttpDate(ifRange); + }; + SendStream.prototype.redirect = function redirect(path3) { + var res = this.res; + if (hasListeners(this, "directory")) { + this.emit("directory", res, path3); + return; + } + if (this.hasTrailingSlash()) { + this.error(403); + return; + } + var loc = encodeUrl(collapseLeadingSlashes(this.path + "/")); + var doc = createHtmlDocument("Redirecting", 'Redirecting to ' + escapeHtml(loc) + ""); + res.statusCode = 301; + res.setHeader("Content-Type", "text/html; charset=UTF-8"); + res.setHeader("Content-Length", Buffer.byteLength(doc)); + res.setHeader("Content-Security-Policy", "default-src 'none'"); + res.setHeader("X-Content-Type-Options", "nosniff"); + res.setHeader("Location", loc); + res.end(doc); + }; + SendStream.prototype.pipe = function pipe(res) { + var root = this._root; + this.res = res; + var path3 = decode(this.path); + if (path3 === -1) { + this.error(400); + return res; + } + if (~path3.indexOf("\0")) { + this.error(400); + return res; + } + var parts; + if (root !== null) { + if (path3) { + path3 = normalize("." + sep + path3); + } + if (UP_PATH_REGEXP.test(path3)) { + debug('malicious path "%s"', path3); + this.error(403); + return res; + } + parts = path3.split(sep); + path3 = normalize(join(root, path3)); + } else { + if (UP_PATH_REGEXP.test(path3)) { + debug('malicious path "%s"', path3); + this.error(403); + return res; + } + parts = normalize(path3).split(sep); + path3 = resolve(path3); + } + if (containsDotFile(parts)) { + debug('%s dotfile "%s"', this._dotfiles, path3); + switch (this._dotfiles) { + case "allow": + break; + case "deny": + this.error(403); + return res; + case "ignore": + default: + this.error(404); + return res; + } + } + if (this._index.length && this.hasTrailingSlash()) { + this.sendIndex(path3); + return res; + } + this.sendFile(path3); + return res; + }; + SendStream.prototype.send = function send2(path3, stat) { + var len = stat.size; + var options = this.options; + var opts = {}; + var res = this.res; + var req = this.req; + var ranges = req.headers.range; + var offset = options.start || 0; + if (res.headersSent) { + this.headersAlreadySent(); + return; + } + debug('pipe "%s"', path3); + this.setHeader(path3, stat); + this.type(path3); + if (this.isConditionalGET()) { + if (this.isPreconditionFailure()) { + this.error(412); + return; + } + if (this.isCachable() && this.isFresh()) { + this.notModified(); + return; + } + } + len = Math.max(0, len - offset); + if (options.end !== void 0) { + var bytes = options.end - offset + 1; + if (len > bytes) + len = bytes; + } + if (this._acceptRanges && BYTES_RANGE_REGEXP.test(ranges)) { + ranges = parseRange(len, ranges, { + combine: true + }); + if (!this.isRangeFresh()) { + debug("range stale"); + ranges = -2; + } + if (ranges === -1) { + debug("range unsatisfiable"); + res.setHeader("Content-Range", contentRange("bytes", len)); + return this.error(416, { + headers: { "Content-Range": res.getHeader("Content-Range") } + }); + } + if (ranges !== -2 && ranges.length === 1) { + debug("range %j", ranges); + res.statusCode = 206; + res.setHeader("Content-Range", contentRange("bytes", len, ranges[0])); + offset += ranges[0].start; + len = ranges[0].end - ranges[0].start + 1; + } + } + for (var prop in options) { + opts[prop] = options[prop]; + } + opts.start = offset; + opts.end = Math.max(offset, offset + len - 1); + res.setHeader("Content-Length", len); + if (req.method === "HEAD") { + res.end(); + return; + } + this.stream(path3, opts); + }; + SendStream.prototype.sendFile = function sendFile(path3) { + var i = 0; + var self2 = this; + debug('stat "%s"', path3); + fs.stat(path3, function onstat(err, stat) { + if (err && err.code === "ENOENT" && !extname(path3) && path3[path3.length - 1] !== sep) { + return next(err); + } + if (err) + return self2.onStatError(err); + if (stat.isDirectory()) + return self2.redirect(path3); + self2.emit("file", path3, stat); + self2.send(path3, stat); + }); + function next(err) { + if (self2._extensions.length <= i) { + return err ? self2.onStatError(err) : self2.error(404); + } + var p = path3 + "." + self2._extensions[i++]; + debug('stat "%s"', p); + fs.stat(p, function(err2, stat) { + if (err2) + return next(err2); + if (stat.isDirectory()) + return next(); + self2.emit("file", p, stat); + self2.send(p, stat); + }); + } + }; + SendStream.prototype.sendIndex = function sendIndex(path3) { + var i = -1; + var self2 = this; + function next(err) { + if (++i >= self2._index.length) { + if (err) + return self2.onStatError(err); + return self2.error(404); + } + var p = join(path3, self2._index[i]); + debug('stat "%s"', p); + fs.stat(p, function(err2, stat) { + if (err2) + return next(err2); + if (stat.isDirectory()) + return next(); + self2.emit("file", p, stat); + self2.send(p, stat); + }); + } + next(); + }; + SendStream.prototype.stream = function stream(path3, options) { + var finished = false; + var self2 = this; + var res = this.res; + var stream2 = fs.createReadStream(path3, options); + this.emit("stream", stream2); + stream2.pipe(res); + onFinished(res, function onfinished() { + finished = true; + destroy(stream2); + }); + stream2.on("error", function onerror(err) { + if (finished) + return; + finished = true; + destroy(stream2); + self2.onStatError(err); + }); + stream2.on("end", function onend() { + self2.emit("end"); + }); + }; + SendStream.prototype.type = function type(path3) { + var res = this.res; + if (res.getHeader("Content-Type")) + return; + var ext = extname(path3); + var type2 = mime2.contentType(ext) || "application/octet-stream"; + debug("content-type %s", type2); + res.setHeader("Content-Type", type2); + }; + SendStream.prototype.setHeader = function setHeader(path3, stat) { + var res = this.res; + this.emit("headers", res, path3, stat); + if (this._acceptRanges && !res.getHeader("Accept-Ranges")) { + debug("accept ranges"); + res.setHeader("Accept-Ranges", "bytes"); + } + if (this._cacheControl && !res.getHeader("Cache-Control")) { + var cacheControl = "public, max-age=" + Math.floor(this._maxage / 1e3); + if (this._immutable) { + cacheControl += ", immutable"; + } + debug("cache-control %s", cacheControl); + res.setHeader("Cache-Control", cacheControl); + } + if (this._lastModified && !res.getHeader("Last-Modified")) { + var modified = stat.mtime.toUTCString(); + debug("modified %s", modified); + res.setHeader("Last-Modified", modified); + } + if (this._etag && !res.getHeader("ETag")) { + var val = etag(stat); + debug("etag %s", val); + res.setHeader("ETag", val); + } + }; + function clearHeaders(res) { + var headers = getHeaderNames(res); + for (var i = 0; i < headers.length; i++) { + res.removeHeader(headers[i]); + } + } + function collapseLeadingSlashes(str) { + for (var i = 0; i < str.length; i++) { + if (str[i] !== "/") { + break; + } + } + return i > 1 ? "/" + str.substr(i) : str; + } + function containsDotFile(parts) { + for (var i = 0; i < parts.length; i++) { + var part = parts[i]; + if (part.length > 1 && part[0] === ".") { + return true; + } + } + return false; + } + function contentRange(type, size, range) { + return type + " " + (range ? range.start + "-" + range.end : "*") + "/" + size; + } + function createHtmlDocument(title, body) { + return '\n\n\n\n' + title + "\n\n\n
" + body + "
\n\n\n"; + } + function decode(path3) { + try { + return decodeURIComponent(path3); + } catch (err) { + return -1; + } + } + function getHeaderNames(res) { + return typeof res.getHeaderNames !== "function" ? Object.keys(res._headers || {}) : res.getHeaderNames(); + } + function hasListeners(emitter, type) { + var count = typeof emitter.listenerCount !== "function" ? emitter.listeners(type).length : emitter.listenerCount(type); + return count > 0; + } + function normalizeList(val, name) { + var list = [].concat(val || []); + for (var i = 0; i < list.length; i++) { + if (typeof list[i] !== "string") { + throw new TypeError(name + " must be array of strings or false"); + } + } + return list; + } + function parseHttpDate(date) { + var timestamp = date && Date.parse(date); + return typeof timestamp === "number" ? timestamp : NaN; + } + function parseTokenList(str) { + var end = 0; + var list = []; + var start = 0; + for (var i = 0, len = str.length; i < len; i++) { + switch (str.charCodeAt(i)) { + case 32: + if (start === end) { + start = end = i + 1; + } + break; + case 44: + if (start !== end) { + list.push(str.substring(start, end)); + } + start = end = i + 1; + break; + default: + end = i + 1; + break; + } + } + if (start !== end) { + list.push(str.substring(start, end)); + } + return list; + } + function setHeaders(res, headers) { + var keys = Object.keys(headers); + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + res.setHeader(key, headers[key]); + } + } + } +}); + +// node_modules/vary/index.js +var require_vary = __commonJS({ + "node_modules/vary/index.js"(exports2, module2) { + "use strict"; + module2.exports = vary; + module2.exports.append = append; + var FIELD_NAME_REGEXP = /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/; + function append(header, field) { + if (typeof header !== "string") { + throw new TypeError("header argument is required"); + } + if (!field) { + throw new TypeError("field argument is required"); + } + var fields = !Array.isArray(field) ? parse(String(field)) : field; + for (var j = 0; j < fields.length; j++) { + if (!FIELD_NAME_REGEXP.test(fields[j])) { + throw new TypeError("field argument contains an invalid header name"); + } + } + if (header === "*") { + return header; + } + var val = header; + var vals = parse(header.toLowerCase()); + if (fields.indexOf("*") !== -1 || vals.indexOf("*") !== -1) { + return "*"; + } + for (var i = 0; i < fields.length; i++) { + var fld = fields[i].toLowerCase(); + if (vals.indexOf(fld) === -1) { + vals.push(fld); + val = val ? val + ", " + fields[i] : fields[i]; + } + } + return val; + } + function parse(header) { + var end = 0; + var list = []; + var start = 0; + for (var i = 0, len = header.length; i < len; i++) { + switch (header.charCodeAt(i)) { + case 32: + if (start === end) { + start = end = i + 1; + } + break; + case 44: + list.push(header.substring(start, end)); + start = end = i + 1; + break; + default: + end = i + 1; + break; + } + } + list.push(header.substring(start, end)); + return list; + } + function vary(res, field) { + if (!res || !res.getHeader || !res.setHeader) { + throw new TypeError("res argument is required"); + } + var val = res.getHeader("Vary") || ""; + var header = Array.isArray(val) ? val.join(", ") : String(val); + if (val = append(header, field)) { + res.setHeader("Vary", val); + } + } + } +}); + +// node_modules/express/lib/response.js +var require_response = __commonJS({ + "node_modules/express/lib/response.js"(exports2, module2) { + "use strict"; + var Buffer2 = require_safe_buffer().Buffer; + var contentDisposition = require_content_disposition(); + var encodeUrl = require_encodeurl(); + var escapeHtml = require_escape_html(); + var http3 = require("http"); + var onFinished = require_on_finished(); + var mime2 = require_mime_types(); + var path2 = require("path"); + var pathIsAbsolute = require_path_is_absolute(); + var statuses = require_statuses(); + var merge = require_utils_merge(); + var sign = require_cookie_signature().sign; + var normalizeType = require_utils2().normalizeType; + var normalizeTypes = require_utils2().normalizeTypes; + var setCharset = require_utils2().setCharset; + var cookie = require_cookie(); + var send = require_send(); + var extname = path2.extname; + var resolve = path2.resolve; + var vary = require_vary(); + var res = Object.create(http3.ServerResponse.prototype); + module2.exports = res; + res.status = function status(code) { + this.statusCode = code; + return this; + }; + res.links = function(links) { + var link = this.get("Link") || ""; + if (link) + link += ", "; + return this.set("Link", link + Object.keys(links).map(function(rel) { + return "<" + links[rel] + '>; rel="' + rel + '"'; + }).join(", ")); + }; + res.send = function send2(body) { + var chunk = body; + var encoding; + var req = this.req; + var type; + var app = this.app; + switch (typeof chunk) { + case "string": + if (!this.get("Content-Type")) { + this.type("html"); + } + break; + case "boolean": + case "number": + case "object": + if (chunk === null) { + chunk = ""; + } else if (Buffer2.isBuffer(chunk)) { + if (!this.get("Content-Type")) { + this.type("bin"); + } + } else { + return this.json(chunk); + } + break; + } + if (typeof chunk === "string") { + encoding = "utf8"; + type = this.get("Content-Type"); + if (typeof type === "string") { + this.set("Content-Type", setCharset(type, "utf-8")); + } + } + var etagFn = app.get("etag fn"); + var generateETag = !this.get("ETag") && typeof etagFn === "function"; + var len; + if (chunk !== void 0) { + if (Buffer2.isBuffer(chunk)) { + len = chunk.length; + } else if (!generateETag && chunk.length < 1e3) { + len = Buffer2.byteLength(chunk, encoding); + } else { + chunk = Buffer2.from(chunk, encoding); + encoding = void 0; + len = chunk.length; + } + this.set("Content-Length", len); + } + var etag; + if (generateETag && len !== void 0) { + if (etag = etagFn(chunk, encoding)) { + this.set("ETag", etag); + } + } + if (req.fresh) + this.statusCode = 304; + if (this.statusCode === 204 || this.statusCode === 304) { + this.removeHeader("Content-Type"); + this.removeHeader("Content-Length"); + this.removeHeader("Transfer-Encoding"); + chunk = ""; + } + if (req.method === "HEAD") { + this.end(); + } else { + this.end(chunk, encoding); + } + return this; + }; + res.json = function json(obj) { + var app = this.app; + var escape2 = app.get("json escape"); + var replacer = app.get("json replacer"); + var spaces = app.get("json spaces"); + var body = stringify(obj, replacer, spaces, escape2); + if (!this.get("Content-Type")) { + this.set("Content-Type", "application/json"); + } + return this.send(body); + }; + res.jsonp = function jsonp(obj) { + var app = this.app; + var escape2 = app.get("json escape"); + var replacer = app.get("json replacer"); + var spaces = app.get("json spaces"); + var body = stringify(obj, replacer, spaces, escape2); + var callback = this.req.query[app.get("jsonp callback name")]; + if (!this.get("Content-Type")) { + this.set("X-Content-Type-Options", "nosniff"); + this.set("Content-Type", "application/json"); + } + if (Array.isArray(callback)) { + callback = callback[0]; + } + if (typeof callback === "string" && callback.length !== 0) { + this.set("X-Content-Type-Options", "nosniff"); + this.set("Content-Type", "text/javascript"); + callback = callback.replace(/[^\[\]\w$.]/g, ""); + if (body === void 0) { + body = ""; + } else if (typeof body === "string") { + body = body.replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029"); + } + body = "/**/ typeof " + callback + " === 'function' && " + callback + "(" + body + ");"; + } + return this.send(body); + }; + res.sendStatus = function sendStatus(statusCode) { + var body = statuses[statusCode] || String(statusCode); + this.statusCode = statusCode; + this.type("txt"); + return this.send(body); + }; + res.sendFile = function sendFile(path3, options, callback) { + var done = callback; + var req = this.req; + var res2 = this; + var next = req.next; + var opts = options || {}; + if (!path3) { + throw new TypeError("path argument is required to res.sendFile"); + } + if (typeof path3 !== "string") { + throw new TypeError("path must be a string to res.sendFile"); + } + if (typeof options === "function") { + done = options; + opts = {}; + } + if (!opts.root && !pathIsAbsolute(path3)) { + throw new TypeError("path must be absolute or specify root to res.sendFile"); + } + var pathname = encodeURI(path3); + var file = send(req, pathname, opts); + sendfile(res2, file, opts, function(err) { + if (done) + return done(err); + if (err && err.code === "EISDIR") + return next(); + if (err && err.code !== "ECONNABORTED" && err.syscall !== "write") { + next(err); + } + }); + }; + res.download = function download(path3, filename, options, callback) { + var done = callback; + var name = filename; + var opts = options || null; + if (typeof filename === "function") { + done = filename; + name = null; + opts = null; + } else if (typeof options === "function") { + done = options; + opts = null; + } + var headers = { + "Content-Disposition": contentDisposition(name || path3) + }; + if (opts && opts.headers) { + var keys = Object.keys(opts.headers); + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (key.toLowerCase() !== "content-disposition") { + headers[key] = opts.headers[key]; + } + } + } + opts = Object.create(opts); + opts.headers = headers; + var fullPath = resolve(path3); + return this.sendFile(fullPath, opts, done); + }; + res.contentType = res.type = function contentType(type) { + var ct = type.indexOf("/") === -1 ? mime2.contentType(type) || "application/octet-stream" : type; + return this.set("Content-Type", ct); + }; + res.format = function(obj) { + var req = this.req; + var next = req.next; + var fn2 = obj.default; + if (fn2) + delete obj.default; + var keys = Object.keys(obj); + var key = keys.length > 0 ? req.accepts(keys) : false; + this.vary("Accept"); + if (key) { + this.set("Content-Type", normalizeType(key).value); + obj[key](req, this, next); + } else if (fn2) { + fn2(); + } else { + var err = new Error("Not Acceptable"); + err.status = err.statusCode = 406; + err.types = normalizeTypes(keys).map(function(o) { + return o.value; + }); + next(err); + } + return this; + }; + res.attachment = function attachment(filename) { + if (filename) { + this.type(extname(filename)); + } + this.set("Content-Disposition", contentDisposition(filename)); + return this; + }; + res.append = function append(field, val) { + var prev = this.get(field); + var value = val; + if (prev) { + value = Array.isArray(prev) ? prev.concat(val) : Array.isArray(val) ? [prev].concat(val) : [prev, val]; + } + return this.set(field, value); + }; + res.set = res.header = function header(field, val) { + if (arguments.length === 2) { + var value = Array.isArray(val) ? val.map(String) : String(val); + if (field.toLowerCase() === "content-type") { + if (Array.isArray(value)) { + throw new TypeError("Content-Type cannot be set to an Array"); + } + value = mime2.contentType(value); + } + this.setHeader(field, value); + } else { + for (var key in field) { + this.set(key, field[key]); + } + } + return this; + }; + res.get = function(field) { + return this.getHeader(field); + }; + res.clearCookie = function clearCookie(name, options) { + var opts = merge({ expires: new Date(1), path: "/" }, options); + return this.cookie(name, "", opts); + }; + res.cookie = function(name, value, options) { + var opts = merge({}, options); + var secret = this.req.secret; + var signed = opts.signed; + if (signed && !secret) { + throw new Error('cookieParser("secret") required for signed cookies'); + } + var val = typeof value === "object" ? "j:" + JSON.stringify(value) : String(value); + if (signed) { + val = "s:" + sign(val, secret); + } + if ("maxAge" in opts) { + opts.expires = new Date(Date.now() + opts.maxAge); + opts.maxAge /= 1e3; + } + if (opts.path == null) { + opts.path = "/"; + } + this.append("Set-Cookie", cookie.serialize(name, String(val), opts)); + return this; + }; + res.location = function location(url) { + var loc = url; + if (url === "back") { + loc = this.req.get("Referrer") || "/"; + } + return this.set("Location", encodeUrl(loc)); + }; + res.redirect = function redirect(url) { + var address = url; + var body; + var status = 302; + if (arguments.length === 2) { + status = arguments[0]; + address = arguments[1]; + } + address = this.location(address).get("Location"); + this.format({ + text: function() { + body = statuses[status] + ". Redirecting to " + address; + }, + html: function() { + var u = escapeHtml(address); + body = "

" + statuses[status] + '. Redirecting to ' + u + "

"; + }, + default: function() { + body = ""; + } + }); + this.statusCode = status; + this.set("Content-Length", Buffer2.byteLength(body)); + if (this.req.method === "HEAD") { + this.end(); + } else { + this.end(body); + } + }; + res.vary = function(field) { + vary(this, field); + return this; + }; + res.render = function render(view, options, callback) { + var app = this.req.app; + var done = callback; + var opts = options || {}; + var req = this.req; + var self2 = this; + if (typeof options === "function") { + done = options; + opts = {}; + } + opts._locals = self2.locals; + done = done || function(err, str) { + if (err) + return req.next(err); + self2.send(str); + }; + app.render(view, opts, done); + }; + function sendfile(res2, file, options, callback) { + var done = false; + var streaming; + function onaborted() { + if (done) + return; + done = true; + var err = new Error("Request aborted"); + err.code = "ECONNABORTED"; + callback(err); + } + function ondirectory() { + if (done) + return; + done = true; + var err = new Error("EISDIR, read"); + err.code = "EISDIR"; + callback(err); + } + function onerror(err) { + if (done) + return; + done = true; + callback(err); + } + function onend() { + if (done) + return; + done = true; + callback(); + } + function onfile() { + streaming = false; + } + function onfinish(err) { + if (err && err.code === "ECONNRESET") + return onaborted(); + if (err) + return onerror(err); + if (done) + return; + setImmediate(function() { + if (streaming !== false && !done) { + onaborted(); + return; + } + if (done) + return; + done = true; + callback(); + }); + } + function onstream() { + streaming = true; + } + file.on("directory", ondirectory); + file.on("end", onend); + file.on("error", onerror); + file.on("file", onfile); + file.on("stream", onstream); + onFinished(res2, onfinish); + if (options.headers) { + file.on("headers", function headers(res3) { + var obj = options.headers; + var keys = Object.keys(obj); + for (var i = 0; i < keys.length; i++) { + var k = keys[i]; + res3.setHeader(k, obj[k]); + } + }); + } + file.pipe(res2); + } + function stringify(value, replacer, spaces, escape2) { + var json = replacer || spaces ? JSON.stringify(value, replacer, spaces) : JSON.stringify(value); + if (escape2 && typeof json === "string") { + json = json.replace(/[<>&]/g, function(c) { + switch (c.charCodeAt(0)) { + case 60: + return "\\u003c"; + case 62: + return "\\u003e"; + case 38: + return "\\u0026"; + default: + return c; + } + }); + } + return json; + } + } +}); + +// node_modules/serve-static/index.js +var require_serve_static = __commonJS({ + "node_modules/serve-static/index.js"(exports2, module2) { + "use strict"; + var encodeUrl = require_encodeurl(); + var escapeHtml = require_escape_html(); + var parseUrl = require_parseurl(); + var resolve = require("path").resolve; + var send = require_send(); + var url = require("url"); + module2.exports = serveStatic; + function serveStatic(root, options) { + if (!root) { + throw new TypeError("root path required"); + } + if (typeof root !== "string") { + throw new TypeError("root path must be a string"); + } + var opts = Object.create(options || null); + var fallthrough = opts.fallthrough !== false; + var redirect = opts.redirect !== false; + var setHeaders = opts.setHeaders; + if (setHeaders && typeof setHeaders !== "function") { + throw new TypeError("option setHeaders must be function"); + } + opts.maxage = opts.maxage || opts.maxAge || 0; + opts.root = resolve(root); + var onDirectory = redirect ? createRedirectDirectoryListener() : createNotFoundDirectoryListener(); + return function serveStatic2(req, res, next) { + if (req.method !== "GET" && req.method !== "HEAD") { + if (fallthrough) { + return next(); + } + res.statusCode = 405; + res.setHeader("Allow", "GET, HEAD"); + res.setHeader("Content-Length", "0"); + res.end(); + return; + } + var forwardError = !fallthrough; + var originalUrl = parseUrl.original(req); + var path2 = parseUrl(req).pathname; + if (path2 === "/" && originalUrl.pathname.substr(-1) !== "/") { + path2 = ""; + } + var stream = send(req, path2, opts); + stream.on("directory", onDirectory); + if (setHeaders) { + stream.on("headers", setHeaders); + } + if (fallthrough) { + stream.on("file", function onFile() { + forwardError = true; + }); + } + stream.on("error", function error(err) { + if (forwardError || !(err.statusCode < 500)) { + next(err); + return; + } + next(); + }); + stream.pipe(res); + }; + } + function collapseLeadingSlashes(str) { + for (var i = 0; i < str.length; i++) { + if (str.charCodeAt(i) !== 47) { + break; + } + } + return i > 1 ? "/" + str.substr(i) : str; + } + function createHtmlDocument(title, body) { + return '\n\n\n\n' + title + "\n\n\n
" + body + "
\n\n\n"; + } + function createNotFoundDirectoryListener() { + return function notFound() { + this.error(404); + }; + } + function createRedirectDirectoryListener() { + return function redirect(res) { + if (this.hasTrailingSlash()) { + this.error(404); + return; + } + var originalUrl = parseUrl.original(this.req); + originalUrl.path = null; + originalUrl.pathname = collapseLeadingSlashes(originalUrl.pathname + "/"); + var loc = encodeUrl(url.format(originalUrl)); + var doc = createHtmlDocument("Redirecting", 'Redirecting to ' + escapeHtml(loc) + ""); + res.statusCode = 301; + res.setHeader("Content-Type", "text/html; charset=UTF-8"); + res.setHeader("Content-Length", Buffer.byteLength(doc)); + res.setHeader("Content-Security-Policy", "default-src 'none'"); + res.setHeader("X-Content-Type-Options", "nosniff"); + res.setHeader("Location", loc); + res.end(doc); + }; + } + } +}); + +// node_modules/express/lib/express.js +var require_express = __commonJS({ + "node_modules/express/lib/express.js"(exports2, module2) { + "use strict"; + var bodyParser2 = require_body_parser(); + var EventEmitter = require("events").EventEmitter; + var mixin = require_merge_descriptors(); + var proto = require_application(); + var Router = require_router(); + var req = require_request(); + var res = require_response(); + exports2 = module2.exports = createApplication; + function createApplication() { + var app = function(req2, res2, next) { + app.handle(req2, res2, next); + }; + mixin(app, EventEmitter.prototype, false); + mixin(app, proto, false); + app.request = Object.create(req, { + app: { configurable: true, enumerable: true, writable: true, value: app } + }); + app.response = Object.create(res, { + app: { configurable: true, enumerable: true, writable: true, value: app } + }); + app.init(); + return app; + } + exports2.application = proto; + exports2.request = req; + exports2.response = res; + exports2.Route = Router.Route; + exports2.Router = Router; + exports2.json = bodyParser2.json; + exports2.raw = bodyParser2.raw; + exports2.static = require_serve_static(); + exports2.text = bodyParser2.text; + exports2.urlencoded = bodyParser2.urlencoded; + } +}); + +// node_modules/express/index.js +var require_express2 = __commonJS({ + "node_modules/express/index.js"(exports2, module2) { + "use strict"; + module2.exports = require_express(); + } +}); + +// node_modules/object-assign/index.js +var require_object_assign = __commonJS({ + "node_modules/object-assign/index.js"(exports2, module2) { + "use strict"; + var getOwnPropertySymbols = Object.getOwnPropertySymbols; + var hasOwnProperty = Object.prototype.hasOwnProperty; + var propIsEnumerable = Object.prototype.propertyIsEnumerable; + function toObject(val) { + if (val === null || val === void 0) { + throw new TypeError("Object.assign cannot be called with null or undefined"); + } + return Object(val); + } + function shouldUseNative() { + try { + if (!Object.assign) { + return false; + } + var test1 = new String("abc"); + test1[5] = "de"; + if (Object.getOwnPropertyNames(test1)[0] === "5") { + return false; + } + var test2 = {}; + for (var i = 0; i < 10; i++) { + test2["_" + String.fromCharCode(i)] = i; + } + var order2 = Object.getOwnPropertyNames(test2).map(function(n) { + return test2[n]; + }); + if (order2.join("") !== "0123456789") { + return false; + } + var test3 = {}; + "abcdefghijklmnopqrst".split("").forEach(function(letter) { + test3[letter] = letter; + }); + if (Object.keys(Object.assign({}, test3)).join("") !== "abcdefghijklmnopqrst") { + return false; + } + return true; + } catch (err) { + return false; + } + } + module2.exports = shouldUseNative() ? Object.assign : function(target, source) { + var from; + var to = toObject(target); + var symbols; + for (var s = 1; s < arguments.length; s++) { + from = Object(arguments[s]); + for (var key in from) { + if (hasOwnProperty.call(from, key)) { + to[key] = from[key]; + } + } + if (getOwnPropertySymbols) { + symbols = getOwnPropertySymbols(from); + for (var i = 0; i < symbols.length; i++) { + if (propIsEnumerable.call(from, symbols[i])) { + to[symbols[i]] = from[symbols[i]]; + } + } + } + } + return to; + }; + } +}); + +// node_modules/cors/lib/index.js +var require_lib5 = __commonJS({ + "node_modules/cors/lib/index.js"(exports2, module2) { + (function() { + "use strict"; + var assign = require_object_assign(); + var vary = require_vary(); + var defaults = { + origin: "*", + methods: "GET,HEAD,PUT,PATCH,POST,DELETE", + preflightContinue: false, + optionsSuccessStatus: 204 + }; + function isString(s) { + return typeof s === "string" || s instanceof String; + } + function isOriginAllowed(origin, allowedOrigin) { + if (Array.isArray(allowedOrigin)) { + for (var i = 0; i < allowedOrigin.length; ++i) { + if (isOriginAllowed(origin, allowedOrigin[i])) { + return true; + } + } + return false; + } else if (isString(allowedOrigin)) { + return origin === allowedOrigin; + } else if (allowedOrigin instanceof RegExp) { + return allowedOrigin.test(origin); + } else { + return !!allowedOrigin; + } + } + function configureOrigin(options, req) { + var requestOrigin = req.headers.origin, headers = [], isAllowed; + if (!options.origin || options.origin === "*") { + headers.push([{ + key: "Access-Control-Allow-Origin", + value: "*" + }]); + } else if (isString(options.origin)) { + headers.push([{ + key: "Access-Control-Allow-Origin", + value: options.origin + }]); + headers.push([{ + key: "Vary", + value: "Origin" + }]); + } else { + isAllowed = isOriginAllowed(requestOrigin, options.origin); + headers.push([{ + key: "Access-Control-Allow-Origin", + value: isAllowed ? requestOrigin : false + }]); + headers.push([{ + key: "Vary", + value: "Origin" + }]); + } + return headers; + } + function configureMethods(options) { + var methods = options.methods; + if (methods.join) { + methods = options.methods.join(","); + } + return { + key: "Access-Control-Allow-Methods", + value: methods + }; + } + function configureCredentials(options) { + if (options.credentials === true) { + return { + key: "Access-Control-Allow-Credentials", + value: "true" + }; + } + return null; + } + function configureAllowedHeaders(options, req) { + var allowedHeaders = options.allowedHeaders || options.headers; + var headers = []; + if (!allowedHeaders) { + allowedHeaders = req.headers["access-control-request-headers"]; + headers.push([{ + key: "Vary", + value: "Access-Control-Request-Headers" + }]); + } else if (allowedHeaders.join) { + allowedHeaders = allowedHeaders.join(","); + } + if (allowedHeaders && allowedHeaders.length) { + headers.push([{ + key: "Access-Control-Allow-Headers", + value: allowedHeaders + }]); + } + return headers; + } + function configureExposedHeaders(options) { + var headers = options.exposedHeaders; + if (!headers) { + return null; + } else if (headers.join) { + headers = headers.join(","); + } + if (headers && headers.length) { + return { + key: "Access-Control-Expose-Headers", + value: headers + }; + } + return null; + } + function configureMaxAge(options) { + var maxAge = (typeof options.maxAge === "number" || options.maxAge) && options.maxAge.toString(); + if (maxAge && maxAge.length) { + return { + key: "Access-Control-Max-Age", + value: maxAge + }; + } + return null; + } + function applyHeaders(headers, res) { + for (var i = 0, n = headers.length; i < n; i++) { + var header = headers[i]; + if (header) { + if (Array.isArray(header)) { + applyHeaders(header, res); + } else if (header.key === "Vary" && header.value) { + vary(res, header.value); + } else if (header.value) { + res.setHeader(header.key, header.value); + } + } + } + } + function cors2(options, req, res, next) { + var headers = [], method = req.method && req.method.toUpperCase && req.method.toUpperCase(); + if (method === "OPTIONS") { + headers.push(configureOrigin(options, req)); + headers.push(configureCredentials(options, req)); + headers.push(configureMethods(options, req)); + headers.push(configureAllowedHeaders(options, req)); + headers.push(configureMaxAge(options, req)); + headers.push(configureExposedHeaders(options, req)); + applyHeaders(headers, res); + if (options.preflightContinue) { + next(); + } else { + res.statusCode = options.optionsSuccessStatus; + res.setHeader("Content-Length", "0"); + res.end(); + } + } else { + headers.push(configureOrigin(options, req)); + headers.push(configureCredentials(options, req)); + headers.push(configureExposedHeaders(options, req)); + applyHeaders(headers, res); + next(); + } + } + function middlewareWrapper(o) { + var optionsCallback = null; + if (typeof o === "function") { + optionsCallback = o; + } else { + optionsCallback = function(req, cb) { + cb(null, o); + }; + } + return function corsMiddleware(req, res, next) { + optionsCallback(req, function(err, options) { + if (err) { + next(err); + } else { + var corsOptions = assign({}, defaults, options); + var originCallback = null; + if (corsOptions.origin && typeof corsOptions.origin === "function") { + originCallback = corsOptions.origin; + } else if (corsOptions.origin) { + originCallback = function(origin, cb) { + cb(null, corsOptions.origin); + }; + } + if (originCallback) { + originCallback(req.headers.origin, function(err2, origin) { + if (err2 || !origin) { + next(err2); + } else { + corsOptions.origin = origin; + cors2(corsOptions, req, res, next); + } + }); + } else { + next(); + } + } + }); + }; + } + module2.exports = middlewareWrapper; + })(); + } +}); + +// node_modules/json-logic-js/logic.js +var require_logic = __commonJS({ + "node_modules/json-logic-js/logic.js"(exports2, module2) { + (function(root, factory) { + if (typeof define === "function" && define.amd) { + define(factory); + } else if (typeof exports2 === "object") { + module2.exports = factory(); + } else { + root.jsonLogic = factory(); + } + })(exports2, function() { + "use strict"; + if (!Array.isArray) { + Array.isArray = function(arg) { + return Object.prototype.toString.call(arg) === "[object Array]"; + }; + } + function arrayUnique(array) { + var a = []; + for (var i = 0, l = array.length; i < l; i++) { + if (a.indexOf(array[i]) === -1) { + a.push(array[i]); + } + } + return a; + } + var jsonLogic2 = {}; + var operations = { + "==": function(a, b) { + return a == b; + }, + "===": function(a, b) { + return a === b; + }, + "!=": function(a, b) { + return a != b; + }, + "!==": function(a, b) { + return a !== b; + }, + ">": function(a, b) { + return a > b; + }, + ">=": function(a, b) { + return a >= b; + }, + "<": function(a, b, c) { + return c === void 0 ? a < b : a < b && b < c; + }, + "<=": function(a, b, c) { + return c === void 0 ? a <= b : a <= b && b <= c; + }, + "!!": function(a) { + return jsonLogic2.truthy(a); + }, + "!": function(a) { + return !jsonLogic2.truthy(a); + }, + "%": function(a, b) { + return a % b; + }, + "log": function(a) { + console.log(a); + return a; + }, + "in": function(a, b) { + if (!b || typeof b.indexOf === "undefined") + return false; + return b.indexOf(a) !== -1; + }, + "cat": function() { + return Array.prototype.join.call(arguments, ""); + }, + "substr": function(source, start, end) { + if (end < 0) { + var temp = String(source).substr(start); + return temp.substr(0, temp.length + end); + } + return String(source).substr(start, end); + }, + "+": function() { + return Array.prototype.reduce.call(arguments, function(a, b) { + return parseFloat(a, 10) + parseFloat(b, 10); + }, 0); + }, + "*": function() { + return Array.prototype.reduce.call(arguments, function(a, b) { + return parseFloat(a, 10) * parseFloat(b, 10); + }); + }, + "-": function(a, b) { + if (b === void 0) { + return -a; + } else { + return a - b; + } + }, + "/": function(a, b) { + return a / b; + }, + "min": function() { + return Math.min.apply(this, arguments); + }, + "max": function() { + return Math.max.apply(this, arguments); + }, + "merge": function() { + return Array.prototype.reduce.call(arguments, function(a, b) { + return a.concat(b); + }, []); + }, + "var": function(a, b) { + var not_found = b === void 0 ? null : b; + var data = this; + if (typeof a === "undefined" || a === "" || a === null) { + return data; + } + var sub_props = String(a).split("."); + for (var i = 0; i < sub_props.length; i++) { + if (data === null || data === void 0) { + return not_found; + } + data = data[sub_props[i]]; + if (data === void 0) { + return not_found; + } + } + return data; + }, + "missing": function() { + var missing = []; + var keys = Array.isArray(arguments[0]) ? arguments[0] : arguments; + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + var value = jsonLogic2.apply({ "var": key }, this); + if (value === null || value === "") { + missing.push(key); + } + } + return missing; + }, + "missing_some": function(need_count, options) { + var are_missing = jsonLogic2.apply({ "missing": options }, this); + if (options.length - are_missing.length >= need_count) { + return []; + } else { + return are_missing; + } + } + }; + jsonLogic2.is_logic = function(logic) { + return typeof logic === "object" && logic !== null && !Array.isArray(logic) && Object.keys(logic).length === 1; + }; + jsonLogic2.truthy = function(value) { + if (Array.isArray(value) && value.length === 0) { + return false; + } + return !!value; + }; + jsonLogic2.get_operator = function(logic) { + return Object.keys(logic)[0]; + }; + jsonLogic2.get_values = function(logic) { + return logic[jsonLogic2.get_operator(logic)]; + }; + jsonLogic2.apply = function(logic, data) { + if (Array.isArray(logic)) { + return logic.map(function(l) { + return jsonLogic2.apply(l, data); + }); + } + if (!jsonLogic2.is_logic(logic)) { + return logic; + } + var op = jsonLogic2.get_operator(logic); + var values = logic[op]; + var i; + var current; + var scopedLogic; + var scopedData; + var initial; + if (!Array.isArray(values)) { + values = [values]; + } + if (op === "if" || op == "?:") { + for (i = 0; i < values.length - 1; i += 2) { + if (jsonLogic2.truthy(jsonLogic2.apply(values[i], data))) { + return jsonLogic2.apply(values[i + 1], data); + } + } + if (values.length === i + 1) { + return jsonLogic2.apply(values[i], data); + } + return null; + } else if (op === "and") { + for (i = 0; i < values.length; i += 1) { + current = jsonLogic2.apply(values[i], data); + if (!jsonLogic2.truthy(current)) { + return current; + } + } + return current; + } else if (op === "or") { + for (i = 0; i < values.length; i += 1) { + current = jsonLogic2.apply(values[i], data); + if (jsonLogic2.truthy(current)) { + return current; + } + } + return current; + } else if (op === "filter") { + scopedData = jsonLogic2.apply(values[0], data); + scopedLogic = values[1]; + if (!Array.isArray(scopedData)) { + return []; + } + return scopedData.filter(function(datum) { + return jsonLogic2.truthy(jsonLogic2.apply(scopedLogic, datum)); + }); + } else if (op === "map") { + scopedData = jsonLogic2.apply(values[0], data); + scopedLogic = values[1]; + if (!Array.isArray(scopedData)) { + return []; + } + return scopedData.map(function(datum) { + return jsonLogic2.apply(scopedLogic, datum); + }); + } else if (op === "reduce") { + scopedData = jsonLogic2.apply(values[0], data); + scopedLogic = values[1]; + initial = typeof values[2] !== "undefined" ? values[2] : null; + if (!Array.isArray(scopedData)) { + return initial; + } + return scopedData.reduce(function(accumulator, current2) { + return jsonLogic2.apply(scopedLogic, { current: current2, accumulator }); + }, initial); + } else if (op === "all") { + scopedData = jsonLogic2.apply(values[0], data); + scopedLogic = values[1]; + if (!Array.isArray(scopedData) || !scopedData.length) { + return false; + } + for (i = 0; i < scopedData.length; i += 1) { + if (!jsonLogic2.truthy(jsonLogic2.apply(scopedLogic, scopedData[i]))) { + return false; + } + } + return true; + } else if (op === "none") { + scopedData = jsonLogic2.apply(values[0], data); + scopedLogic = values[1]; + if (!Array.isArray(scopedData) || !scopedData.length) { + return true; + } + for (i = 0; i < scopedData.length; i += 1) { + if (jsonLogic2.truthy(jsonLogic2.apply(scopedLogic, scopedData[i]))) { + return false; + } + } + return true; + } else if (op === "some") { + scopedData = jsonLogic2.apply(values[0], data); + scopedLogic = values[1]; + if (!Array.isArray(scopedData) || !scopedData.length) { + return false; + } + for (i = 0; i < scopedData.length; i += 1) { + if (jsonLogic2.truthy(jsonLogic2.apply(scopedLogic, scopedData[i]))) { + return true; + } + } + return false; + } + values = values.map(function(val) { + return jsonLogic2.apply(val, data); + }); + if (operations.hasOwnProperty(op) && typeof operations[op] === "function") { + return operations[op].apply(data, values); + } else if (op.indexOf(".") > 0) { + var sub_ops = String(op).split("."); + var operation = operations; + for (i = 0; i < sub_ops.length; i++) { + if (!operation.hasOwnProperty(sub_ops[i])) { + throw new Error("Unrecognized operation " + op + " (failed at " + sub_ops.slice(0, i + 1).join(".") + ")"); + } + operation = operation[sub_ops[i]]; + } + return operation.apply(data, values); + } + throw new Error("Unrecognized operation " + op); + }; + jsonLogic2.uses_data = function(logic) { + var collection = []; + if (jsonLogic2.is_logic(logic)) { + var op = jsonLogic2.get_operator(logic); + var values = logic[op]; + if (!Array.isArray(values)) { + values = [values]; + } + if (op === "var") { + collection.push(values[0]); + } else { + values.forEach(function(val) { + collection.push.apply(collection, jsonLogic2.uses_data(val)); + }); + } + } + return arrayUnique(collection); + }; + jsonLogic2.add_operation = function(name, code) { + operations[name] = code; + }; + jsonLogic2.rm_operation = function(name) { + delete operations[name]; + }; + jsonLogic2.rule_like = function(rule, pattern) { + if (pattern === rule) { + return true; + } + if (pattern === "@") { + return true; + } + if (pattern === "number") { + return typeof rule === "number"; + } + if (pattern === "string") { + return typeof rule === "string"; + } + if (pattern === "array") { + return Array.isArray(rule) && !jsonLogic2.is_logic(rule); + } + if (jsonLogic2.is_logic(pattern)) { + if (jsonLogic2.is_logic(rule)) { + var pattern_op = jsonLogic2.get_operator(pattern); + var rule_op = jsonLogic2.get_operator(rule); + if (pattern_op === "@" || pattern_op === rule_op) { + return jsonLogic2.rule_like(jsonLogic2.get_values(rule, false), jsonLogic2.get_values(pattern, false)); + } + } + return false; + } + if (Array.isArray(pattern)) { + if (Array.isArray(rule)) { + if (pattern.length !== rule.length) { + return false; + } + for (var i = 0; i < pattern.length; i += 1) { + if (!jsonLogic2.rule_like(rule[i], pattern[i])) { + return false; + } + } + return true; + } else { + return false; + } + } + return false; + }; + return jsonLogic2; + }); + } +}); + +// node_modules/on-headers/index.js +var require_on_headers = __commonJS({ + "node_modules/on-headers/index.js"(exports2, module2) { + "use strict"; + module2.exports = onHeaders; + function createWriteHead(prevWriteHead, listener) { + var fired = false; + return function writeHead(statusCode) { + var args2 = setWriteHeadHeaders.apply(this, arguments); + if (!fired) { + fired = true; + listener.call(this); + if (typeof args2[0] === "number" && this.statusCode !== args2[0]) { + args2[0] = this.statusCode; + args2.length = 1; + } + } + return prevWriteHead.apply(this, args2); + }; + } + function onHeaders(res, listener) { + if (!res) { + throw new TypeError("argument res is required"); + } + if (typeof listener !== "function") { + throw new TypeError("argument listener must be a function"); + } + res.writeHead = createWriteHead(res.writeHead, listener); + } + function setHeadersFromArray(res, headers) { + for (var i = 0; i < headers.length; i++) { + res.setHeader(headers[i][0], headers[i][1]); + } + } + function setHeadersFromObject(res, headers) { + var keys = Object.keys(headers); + for (var i = 0; i < keys.length; i++) { + var k = keys[i]; + if (k) + res.setHeader(k, headers[k]); + } + } + function setWriteHeadHeaders(statusCode) { + var length = arguments.length; + var headerIndex = length > 1 && typeof arguments[1] === "string" ? 2 : 1; + var headers = length >= headerIndex + 1 ? arguments[headerIndex] : void 0; + this.statusCode = statusCode; + if (Array.isArray(headers)) { + setHeadersFromArray(this, headers); + } else if (headers) { + setHeadersFromObject(this, headers); + } + var args2 = new Array(Math.min(length, headerIndex)); + for (var i = 0; i < args2.length; i++) { + args2[i] = arguments[i]; + } + return args2; + } + } +}); + +// node_modules/response-time/index.js +var require_response_time = __commonJS({ + "node_modules/response-time/index.js"(exports2, module2) { + "use strict"; + var deprecate2 = require_depd()("response-time"); + var onHeaders = require_on_headers(); + module2.exports = responseTime2; + function responseTime2(options) { + var opts = options || {}; + if (typeof options === "number") { + deprecate2("number argument: use {digits: " + JSON.stringify(options) + "} instead"); + opts = { digits: options }; + } + var fn2 = typeof opts !== "function" ? createSetHeader(opts) : opts; + return function responseTime3(req, res, next) { + var startAt = process.hrtime(); + onHeaders(res, function onHeaders2() { + var diff = process.hrtime(startAt); + var time = diff[0] * 1e3 + diff[1] * 1e-6; + fn2(req, res, time); + }); + next(); + }; + } + function createSetHeader(options) { + var digits = options.digits !== void 0 ? options.digits : 3; + var header = options.header || "X-Response-Time"; + var suffix = options.suffix !== void 0 ? Boolean(options.suffix) : true; + return function setResponseHeader(req, res, time) { + if (res.getHeader(header)) { + return; + } + var val = time.toFixed(digits); + if (suffix) { + val += "ms"; + } + res.setHeader(header, val); + }; + } + } +}); + +// node_modules/strict-uri-encode/index.js +var require_strict_uri_encode = __commonJS({ + "node_modules/strict-uri-encode/index.js"(exports2, module2) { + "use strict"; + module2.exports = (str) => encodeURIComponent(str).replace(/[!'()*]/g, (x) => `%${x.charCodeAt(0).toString(16).toUpperCase()}`); + } +}); + +// node_modules/decode-uri-component/index.js +var require_decode_uri_component = __commonJS({ + "node_modules/decode-uri-component/index.js"(exports2, module2) { + "use strict"; + var token = "%[a-f0-9]{2}"; + var singleMatcher = new RegExp("(" + token + ")|([^%]+?)", "gi"); + var multiMatcher = new RegExp("(" + token + ")+", "gi"); + function decodeComponents(components, split) { + try { + return [decodeURIComponent(components.join(""))]; + } catch (err) { + } + if (components.length === 1) { + return components; + } + split = split || 1; + var left = components.slice(0, split); + var right = components.slice(split); + return Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right)); + } + function decode(input) { + try { + return decodeURIComponent(input); + } catch (err) { + var tokens = input.match(singleMatcher) || []; + for (var i = 1; i < tokens.length; i++) { + input = decodeComponents(tokens, i).join(""); + tokens = input.match(singleMatcher) || []; + } + return input; + } + } + function customDecodeURIComponent(input) { + var replaceMap = { + "%FE%FF": "\uFFFD\uFFFD", + "%FF%FE": "\uFFFD\uFFFD" + }; + var match = multiMatcher.exec(input); + while (match) { + try { + replaceMap[match[0]] = decodeURIComponent(match[0]); + } catch (err) { + var result = decode(match[0]); + if (result !== match[0]) { + replaceMap[match[0]] = result; + } + } + match = multiMatcher.exec(input); + } + replaceMap["%C2"] = "\uFFFD"; + var entries = Object.keys(replaceMap); + for (var i = 0; i < entries.length; i++) { + var key = entries[i]; + input = input.replace(new RegExp(key, "g"), replaceMap[key]); + } + return input; + } + module2.exports = function(encodedURI) { + if (typeof encodedURI !== "string") { + throw new TypeError("Expected `encodedURI` to be of type `string`, got `" + typeof encodedURI + "`"); + } + try { + encodedURI = encodedURI.replace(/\+/g, " "); + return decodeURIComponent(encodedURI); + } catch (err) { + return customDecodeURIComponent(encodedURI); + } + }; + } +}); + +// node_modules/split-on-first/index.js +var require_split_on_first = __commonJS({ + "node_modules/split-on-first/index.js"(exports2, module2) { + "use strict"; + module2.exports = (string, separator) => { + if (!(typeof string === "string" && typeof separator === "string")) { + throw new TypeError("Expected the arguments to be of type `string`"); + } + if (separator === "") { + return [string]; + } + const separatorIndex = string.indexOf(separator); + if (separatorIndex === -1) { + return [string]; + } + return [ + string.slice(0, separatorIndex), + string.slice(separatorIndex + separator.length) + ]; + }; + } +}); + +// node_modules/filter-obj/index.js +var require_filter_obj = __commonJS({ + "node_modules/filter-obj/index.js"(exports2, module2) { + "use strict"; + module2.exports = function(obj, predicate) { + var ret = {}; + var keys = Object.keys(obj); + var isArr = Array.isArray(predicate); + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + var val = obj[key]; + if (isArr ? predicate.indexOf(key) !== -1 : predicate(key, val, obj)) { + ret[key] = val; + } + } + return ret; + }; + } +}); + +// node_modules/query-string/index.js +var require_query_string = __commonJS({ + "node_modules/query-string/index.js"(exports2) { + "use strict"; + var strictUriEncode = require_strict_uri_encode(); + var decodeComponent = require_decode_uri_component(); + var splitOnFirst = require_split_on_first(); + var filterObject = require_filter_obj(); + var isNullOrUndefined = (value) => value === null || value === void 0; + var encodeFragmentIdentifier = Symbol("encodeFragmentIdentifier"); + function encoderForArrayFormat(options) { + switch (options.arrayFormat) { + case "index": + return (key) => (result, value) => { + const index = result.length; + if (value === void 0 || options.skipNull && value === null || options.skipEmptyString && value === "") { + return result; + } + if (value === null) { + return [...result, [encode(key, options), "[", index, "]"].join("")]; + } + return [ + ...result, + [encode(key, options), "[", encode(index, options), "]=", encode(value, options)].join("") + ]; + }; + case "bracket": + return (key) => (result, value) => { + if (value === void 0 || options.skipNull && value === null || options.skipEmptyString && value === "") { + return result; + } + if (value === null) { + return [...result, [encode(key, options), "[]"].join("")]; + } + return [...result, [encode(key, options), "[]=", encode(value, options)].join("")]; + }; + case "colon-list-separator": + return (key) => (result, value) => { + if (value === void 0 || options.skipNull && value === null || options.skipEmptyString && value === "") { + return result; + } + if (value === null) { + return [...result, [encode(key, options), ":list="].join("")]; + } + return [...result, [encode(key, options), ":list=", encode(value, options)].join("")]; + }; + case "comma": + case "separator": + case "bracket-separator": { + const keyValueSep = options.arrayFormat === "bracket-separator" ? "[]=" : "="; + return (key) => (result, value) => { + if (value === void 0 || options.skipNull && value === null || options.skipEmptyString && value === "") { + return result; + } + value = value === null ? "" : value; + if (result.length === 0) { + return [[encode(key, options), keyValueSep, encode(value, options)].join("")]; + } + return [[result, encode(value, options)].join(options.arrayFormatSeparator)]; + }; + } + default: + return (key) => (result, value) => { + if (value === void 0 || options.skipNull && value === null || options.skipEmptyString && value === "") { + return result; + } + if (value === null) { + return [...result, encode(key, options)]; + } + return [...result, [encode(key, options), "=", encode(value, options)].join("")]; + }; + } + } + function parserForArrayFormat(options) { + let result; + switch (options.arrayFormat) { + case "index": + return (key, value, accumulator) => { + result = /\[(\d*)\]$/.exec(key); + key = key.replace(/\[\d*\]$/, ""); + if (!result) { + accumulator[key] = value; + return; + } + if (accumulator[key] === void 0) { + accumulator[key] = {}; + } + accumulator[key][result[1]] = value; + }; + case "bracket": + return (key, value, accumulator) => { + result = /(\[\])$/.exec(key); + key = key.replace(/\[\]$/, ""); + if (!result) { + accumulator[key] = value; + return; + } + if (accumulator[key] === void 0) { + accumulator[key] = [value]; + return; + } + accumulator[key] = [].concat(accumulator[key], value); + }; + case "colon-list-separator": + return (key, value, accumulator) => { + result = /(:list)$/.exec(key); + key = key.replace(/:list$/, ""); + if (!result) { + accumulator[key] = value; + return; + } + if (accumulator[key] === void 0) { + accumulator[key] = [value]; + return; + } + accumulator[key] = [].concat(accumulator[key], value); + }; + case "comma": + case "separator": + return (key, value, accumulator) => { + const isArray = typeof value === "string" && value.includes(options.arrayFormatSeparator); + const isEncodedArray = typeof value === "string" && !isArray && decode(value, options).includes(options.arrayFormatSeparator); + value = isEncodedArray ? decode(value, options) : value; + const newValue = isArray || isEncodedArray ? value.split(options.arrayFormatSeparator).map((item) => decode(item, options)) : value === null ? value : decode(value, options); + accumulator[key] = newValue; + }; + case "bracket-separator": + return (key, value, accumulator) => { + const isArray = /(\[\])$/.test(key); + key = key.replace(/\[\]$/, ""); + if (!isArray) { + accumulator[key] = value ? decode(value, options) : value; + return; + } + const arrayValue = value === null ? [] : value.split(options.arrayFormatSeparator).map((item) => decode(item, options)); + if (accumulator[key] === void 0) { + accumulator[key] = arrayValue; + return; + } + accumulator[key] = [].concat(accumulator[key], arrayValue); + }; + default: + return (key, value, accumulator) => { + if (accumulator[key] === void 0) { + accumulator[key] = value; + return; + } + accumulator[key] = [].concat(accumulator[key], value); + }; + } + } + function validateArrayFormatSeparator(value) { + if (typeof value !== "string" || value.length !== 1) { + throw new TypeError("arrayFormatSeparator must be single character string"); + } + } + function encode(value, options) { + if (options.encode) { + return options.strict ? strictUriEncode(value) : encodeURIComponent(value); + } + return value; + } + function decode(value, options) { + if (options.decode) { + return decodeComponent(value); + } + return value; + } + function keysSorter(input) { + if (Array.isArray(input)) { + return input.sort(); + } + if (typeof input === "object") { + return keysSorter(Object.keys(input)).sort((a, b) => Number(a) - Number(b)).map((key) => input[key]); + } + return input; + } + function removeHash(input) { + const hashStart = input.indexOf("#"); + if (hashStart !== -1) { + input = input.slice(0, hashStart); + } + return input; + } + function getHash(url) { + let hash = ""; + const hashStart = url.indexOf("#"); + if (hashStart !== -1) { + hash = url.slice(hashStart); + } + return hash; + } + function extract(input) { + input = removeHash(input); + const queryStart = input.indexOf("?"); + if (queryStart === -1) { + return ""; + } + return input.slice(queryStart + 1); + } + function parseValue(value, options) { + if (options.parseNumbers && !Number.isNaN(Number(value)) && (typeof value === "string" && value.trim() !== "")) { + value = Number(value); + } else if (options.parseBooleans && value !== null && (value.toLowerCase() === "true" || value.toLowerCase() === "false")) { + value = value.toLowerCase() === "true"; + } + return value; + } + function parse(query, options) { + options = Object.assign({ + decode: true, + sort: true, + arrayFormat: "none", + arrayFormatSeparator: ",", + parseNumbers: false, + parseBooleans: false + }, options); + validateArrayFormatSeparator(options.arrayFormatSeparator); + const formatter = parserForArrayFormat(options); + const ret = Object.create(null); + if (typeof query !== "string") { + return ret; + } + query = query.trim().replace(/^[?#&]/, ""); + if (!query) { + return ret; + } + for (const param of query.split("&")) { + if (param === "") { + continue; + } + let [key, value] = splitOnFirst(options.decode ? param.replace(/\+/g, " ") : param, "="); + value = value === void 0 ? null : ["comma", "separator", "bracket-separator"].includes(options.arrayFormat) ? value : decode(value, options); + formatter(decode(key, options), value, ret); + } + for (const key of Object.keys(ret)) { + const value = ret[key]; + if (typeof value === "object" && value !== null) { + for (const k of Object.keys(value)) { + value[k] = parseValue(value[k], options); + } + } else { + ret[key] = parseValue(value, options); + } + } + if (options.sort === false) { + return ret; + } + return (options.sort === true ? Object.keys(ret).sort() : Object.keys(ret).sort(options.sort)).reduce((result, key) => { + const value = ret[key]; + if (Boolean(value) && typeof value === "object" && !Array.isArray(value)) { + result[key] = keysSorter(value); + } else { + result[key] = value; + } + return result; + }, Object.create(null)); + } + exports2.extract = extract; + exports2.parse = parse; + exports2.stringify = (object, options) => { + if (!object) { + return ""; + } + options = Object.assign({ + encode: true, + strict: true, + arrayFormat: "none", + arrayFormatSeparator: "," + }, options); + validateArrayFormatSeparator(options.arrayFormatSeparator); + const shouldFilter = (key) => options.skipNull && isNullOrUndefined(object[key]) || options.skipEmptyString && object[key] === ""; + const formatter = encoderForArrayFormat(options); + const objectCopy = {}; + for (const key of Object.keys(object)) { + if (!shouldFilter(key)) { + objectCopy[key] = object[key]; + } + } + const keys = Object.keys(objectCopy); + if (options.sort !== false) { + keys.sort(options.sort); + } + return keys.map((key) => { + const value = object[key]; + if (value === void 0) { + return ""; + } + if (value === null) { + return encode(key, options); + } + if (Array.isArray(value)) { + if (value.length === 0 && options.arrayFormat === "bracket-separator") { + return encode(key, options) + "[]"; + } + return value.reduce(formatter(key), []).join("&"); + } + return encode(key, options) + "=" + encode(value, options); + }).filter((x) => x.length > 0).join("&"); + }; + exports2.parseUrl = (url, options) => { + options = Object.assign({ + decode: true + }, options); + const [url_, hash] = splitOnFirst(url, "#"); + return Object.assign({ + url: url_.split("?")[0] || "", + query: parse(extract(url), options) + }, options && options.parseFragmentIdentifier && hash ? { fragmentIdentifier: decode(hash, options) } : {}); + }; + exports2.stringifyUrl = (object, options) => { + options = Object.assign({ + encode: true, + strict: true, + [encodeFragmentIdentifier]: true + }, options); + const url = removeHash(object.url).split("?")[0] || ""; + const queryFromUrl = exports2.extract(object.url); + const parsedQueryFromUrl = exports2.parse(queryFromUrl, { sort: false }); + const query = Object.assign(parsedQueryFromUrl, object.query); + let queryString2 = exports2.stringify(query, options); + if (queryString2) { + queryString2 = `?${queryString2}`; + } + let hash = getHash(object.url); + if (object.fragmentIdentifier) { + hash = `#${options[encodeFragmentIdentifier] ? encode(object.fragmentIdentifier, options) : object.fragmentIdentifier}`; + } + return `${url}${queryString2}${hash}`; + }; + exports2.pick = (input, filter, options) => { + options = Object.assign({ + parseFragmentIdentifier: true, + [encodeFragmentIdentifier]: false + }, options); + const { url, query, fragmentIdentifier } = exports2.parseUrl(input, options); + return exports2.stringifyUrl({ + url, + query: filterObject(query, filter), + fragmentIdentifier + }, options); + }; + exports2.exclude = (input, filter, options) => { + const exclusionFilter = Array.isArray(filter) ? (key) => !filter.includes(key) : (key, value) => !filter(key, value); + return exports2.pick(input, exclusionFilter, options); + }; + } +}); + +// node_modules/glob-to-regexp/index.js +var require_glob_to_regexp = __commonJS({ + "node_modules/glob-to-regexp/index.js"(exports2, module2) { + module2.exports = function(glob, opts) { + if (typeof glob !== "string") { + throw new TypeError("Expected a string"); + } + var str = String(glob); + var reStr = ""; + var extended = opts ? !!opts.extended : false; + var globstar = opts ? !!opts.globstar : false; + var inGroup = false; + var flags = opts && typeof opts.flags === "string" ? opts.flags : ""; + var c; + for (var i = 0, len = str.length; i < len; i++) { + c = str[i]; + switch (c) { + case "/": + case "$": + case "^": + case "+": + case ".": + case "(": + case ")": + case "=": + case "!": + case "|": + reStr += "\\" + c; + break; + case "?": + if (extended) { + reStr += "."; + break; + } + case "[": + case "]": + if (extended) { + reStr += c; + break; + } + case "{": + if (extended) { + inGroup = true; + reStr += "("; + break; + } + case "}": + if (extended) { + inGroup = false; + reStr += ")"; + break; + } + case ",": + if (inGroup) { + reStr += "|"; + break; + } + reStr += "\\" + c; + break; + case "*": + var prevChar = str[i - 1]; + var starCount = 1; + while (str[i + 1] === "*") { + starCount++; + i++; + } + var nextChar = str[i + 1]; + if (!globstar) { + reStr += ".*"; + } else { + var isGlobstar = starCount > 1 && (prevChar === "/" || prevChar === void 0) && (nextChar === "/" || nextChar === void 0); + if (isGlobstar) { + reStr += "((?:[^/]*(?:/|$))*)"; + i++; + } else { + reStr += "([^/]*)"; + } + } + break; + default: + reStr += c; + } + } + if (!flags || !~flags.indexOf("g")) { + reStr = "^" + reStr + "$"; + } + return new RegExp(reStr, flags); + }; + } +}); + +// src/main.ts +__export(exports, { + default: () => LocalRestApi +}); +var import_obsidian2 = __toModule(require("obsidian")); +var https = __toModule(require("https")); +var http2 = __toModule(require("http")); +var import_node_forge2 = __toModule(require_lib()); + +// src/requestHandler.ts +var import_obsidian = __toModule(require("obsidian")); +var import_obsidian_daily_notes_interface = __toModule(require_main()); +var import_obsidian_dataview = __toModule(require_lib2()); +var import_node_forge = __toModule(require_lib()); +var import_express = __toModule(require_express2()); +var import_http = __toModule(require("http")); +var import_cors = __toModule(require_lib5()); +var import_mime_types = __toModule(require_mime_types()); +var import_body_parser = __toModule(require_body_parser()); +var import_json_logic_js = __toModule(require_logic()); +var import_response_time = __toModule(require_response_time()); +var import_query_string = __toModule(require_query_string()); +var import_glob_to_regexp = __toModule(require_glob_to_regexp()); +var import_path = __toModule(require("path")); + +// src/types.ts +var ErrorCode; +(function(ErrorCode2) { + ErrorCode2[ErrorCode2["TextContentEncodingRequired"] = 40010] = "TextContentEncodingRequired"; + ErrorCode2[ErrorCode2["ContentTypeSpecificationRequired"] = 40011] = "ContentTypeSpecificationRequired"; + ErrorCode2[ErrorCode2["InvalidContentForContentType"] = 40015] = "InvalidContentForContentType"; + ErrorCode2[ErrorCode2["InvalidContentInsertionPositionValue"] = 40050] = "InvalidContentInsertionPositionValue"; + ErrorCode2[ErrorCode2["MissingHeadingHeader"] = 40051] = "MissingHeadingHeader"; + ErrorCode2[ErrorCode2["InvalidHeadingHeader"] = 40052] = "InvalidHeadingHeader"; + ErrorCode2[ErrorCode2["PeriodIsNotEnabled"] = 40060] = "PeriodIsNotEnabled"; + ErrorCode2[ErrorCode2["InvalidFilterQuery"] = 40070] = "InvalidFilterQuery"; + ErrorCode2[ErrorCode2["ApiKeyAuthorizationRequired"] = 40101] = "ApiKeyAuthorizationRequired"; + ErrorCode2[ErrorCode2["PeriodDoesNotExist"] = 40460] = "PeriodDoesNotExist"; + ErrorCode2[ErrorCode2["PeriodicNoteDoesNotExist"] = 40461] = "PeriodicNoteDoesNotExist"; + ErrorCode2[ErrorCode2["RequestMethodValidOnlyForFiles"] = 40510] = "RequestMethodValidOnlyForFiles"; +})(ErrorCode || (ErrorCode = {})); + +// src/utils.ts +function findHeadingBoundary(fileCache, headingPath) { + const reversedHeadingPath = [...headingPath].reverse(); + const cursorHeadingPath = []; + for (const [headingIdx, heading] of fileCache.headings.entries()) { + cursorHeadingPath[heading.level] = heading; + cursorHeadingPath.splice(heading.level + 1); + const reversedCurrentCursor = [ + ...cursorHeadingPath.map((h) => h.heading) + ].reverse(); + let matchesRequestedHeading = true; + for (const [idx, element] of reversedHeadingPath.entries()) { + if (reversedCurrentCursor[idx] != element) { + matchesRequestedHeading = false; + break; + } + } + if (matchesRequestedHeading) { + const start = heading.position.end; + const endHeading = fileCache.headings.slice(headingIdx + 1).find((endHeading2) => endHeading2.level <= heading.level); + const end = endHeading == null ? void 0 : endHeading.position.start; + return { + start, + end + }; + } + } + return null; +} +function getSplicePosition(fileLines, heading, insert, ignoreNewLines) { + var _a, _b; + let splicePosition = insert === false ? (_b = (_a = heading.end) == null ? void 0 : _a.line) != null ? _b : fileLines.length : heading.start.line + 1; + if (!ignoreNewLines || insert) { + return splicePosition; + } + while (fileLines[splicePosition - 1] === "") { + splicePosition--; + } + return splicePosition; +} +function toArrayBuffer(arr) { + if (arr instanceof Uint8Array) { + return arr.buffer.slice(arr.byteOffset, arr.byteOffset + arr.byteLength); + } + if (arr instanceof DataView) { + return arr.buffer.slice(arr.byteOffset, arr.byteOffset + arr.byteLength); + } + if (arr instanceof ArrayBuffer) { + return arr; + } + const encoder = new TextEncoder(); + return encoder.encode(JSON.stringify(arr)).buffer; +} +function getCertificateValidityDays(certificate) { + return (certificate.validity.notAfter.getTime() - new Date().getTime()) / (1e3 * 3600 * 24); +} +function getCertificateIsUptoStandards(certificate) { + const extension = certificate.getExtension("subjectAltName"); + let hasStandardsFlaw = false; + if (extension && extension.altNames) { + extension.altNames.forEach((altName) => { + if (altName.type === 7 && altName.value === "\0\0\0\0") { + hasStandardsFlaw = true; + } + }); + } + return !hasStandardsFlaw; +} + +// src/constants.ts +var CERT_NAME = "obsidian-local-rest-api.crt"; +var DEFAULT_SETTINGS = { + port: 27124, + insecurePort: 27123, + enableInsecureServer: false +}; +var ERROR_CODE_MESSAGES = { + [ErrorCode.ApiKeyAuthorizationRequired]: "Authorization required. Find your API Key in the 'Local REST API' section of your Obsidian settings.", + [ErrorCode.ContentTypeSpecificationRequired]: "Content-Type header required; this API accepts data in multiple content-types and you must indicate the content-type of your request body via the Content-Type header.", + [ErrorCode.InvalidContentInsertionPositionValue]: "Invalid 'Content-Insertion-Position' header value.", + [ErrorCode.InvalidContentForContentType]: "Your request body could not be processed as the content-type specified in your Content-Type header.", + [ErrorCode.InvalidHeadingHeader]: "No heading in specified file could be found matching the heading specified in 'Heading' header.", + [ErrorCode.MissingHeadingHeader]: "'Heading' header is required for identifying where to insert content.", + [ErrorCode.PeriodDoesNotExist]: "Specified period does not exist.", + [ErrorCode.PeriodIsNotEnabled]: "Specified period is not enabled.", + [ErrorCode.PeriodicNoteDoesNotExist]: "Periodic note does not exist for the specified period.", + [ErrorCode.RequestMethodValidOnlyForFiles]: "Request method is valid only for file paths, not directories.", + [ErrorCode.TextContentEncodingRequired]: "Incoming content must be text data and have an appropriate text/* Content-type header set (e.g. text/markdown).", + [ErrorCode.InvalidFilterQuery]: "The query you provided could not be processed." +}; +var ContentTypes; +(function(ContentTypes2) { + ContentTypes2["json"] = "application/json"; + ContentTypes2["markdown"] = "text/markdown"; + ContentTypes2["olrapiNoteJson"] = "application/vnd.olrapi.note+json"; + ContentTypes2["jsonLogic"] = "application/vnd.olrapi.jsonlogic+json"; + ContentTypes2["dataviewDql"] = "application/vnd.olrapi.dataview.dql+txt"; +})(ContentTypes || (ContentTypes = {})); +var DefaultBearerTokenHeaderName = "Authorization"; +var DefaultBindingHost = "127.0.0.1"; +var LicenseUrl = "https://raw.githubusercontent.com/coddingtonbear/obsidian-local-rest-api/main/LICENSE"; +var MaximumRequestSize = "1024mb"; + +// src/requestHandler.ts +var RequestHandler = class { + constructor(app, manifest, settings) { + this.app = app; + this.manifest = manifest; + this.api = (0, import_express.default)(); + this.settings = settings; + this.api.set("json spaces", 2); + import_json_logic_js.default.add_operation("glob", (pattern, field) => { + if (typeof field === "string" && typeof pattern === "string") { + const glob = (0, import_glob_to_regexp.default)(pattern); + return glob.test(field); + } + return false; + }); + import_json_logic_js.default.add_operation("regexp", (pattern, field) => { + if (typeof field === "string" && typeof pattern === "string") { + const rex = new RegExp(pattern); + return rex.test(field); + } + return false; + }); + } + requestIsAuthenticated(req) { + var _a; + const authorizationHeader = req.get((_a = this.settings.authorizationHeaderName) != null ? _a : "Authorization"); + if (authorizationHeader === `Bearer ${this.settings.apiKey}`) { + return true; + } + return false; + } + authenticationMiddleware(req, res, next) { + return __async(this, null, function* () { + const authenticationExemptRoutes = ["/", `/${CERT_NAME}`]; + if (!authenticationExemptRoutes.includes(req.path) && !this.requestIsAuthenticated(req)) { + this.returnCannedResponse(res, { + errorCode: ErrorCode.ApiKeyAuthorizationRequired + }); + return; + } + next(); + }); + } + getFileMetadataObject(file) { + return __async(this, null, function* () { + var _a, _b, _c; + const cache = this.app.metadataCache.getFileCache(file); + const frontmatter = __spreadValues({}, (_a = cache.frontmatter) != null ? _a : {}); + delete frontmatter.position; + const directTags = (_c = ((_b = cache.tags) != null ? _b : []).map((tag) => tag.tag)) != null ? _c : []; + const frontmatterTags = Array.isArray(frontmatter.tags) ? frontmatter.tags : []; + const filteredTags = [...frontmatterTags, ...directTags].map((tag) => tag.toString().replace(/^#/, "")).filter((value, index, self2) => self2.indexOf(value) === index); + return { + tags: filteredTags, + frontmatter, + stat: file.stat, + path: file.path, + content: yield this.app.vault.cachedRead(file) + }; + }); + } + getResponseMessage({ + statusCode = 400, + message: message2, + errorCode + }) { + const errorMessages = []; + if (errorCode) { + errorMessages.push(ERROR_CODE_MESSAGES[errorCode]); + } else { + errorMessages.push(import_http.default.STATUS_CODES[statusCode]); + } + if (message2) { + errorMessages.push(message2); + } + return errorMessages.join("\n"); + } + getStatusCode({ statusCode, errorCode }) { + if (statusCode) { + return statusCode; + } + return Math.floor(errorCode / 100); + } + returnCannedResponse(res, { statusCode, message: message2, errorCode }) { + const response = { + message: this.getResponseMessage({ statusCode, message: message2, errorCode }), + errorCode: errorCode != null ? errorCode : statusCode * 100 + }; + res.status(this.getStatusCode({ statusCode, errorCode })).json(response); + } + root(req, res) { + let certificate; + try { + certificate = import_node_forge.default.pki.certificateFromPem(this.settings.crypto.cert); + } catch (e) { + } + res.status(200).json({ + status: "OK", + versions: { + obsidian: import_obsidian.apiVersion, + self: this.manifest.version + }, + service: "Obsidian Local REST API", + authenticated: this.requestIsAuthenticated(req), + certificateInfo: this.requestIsAuthenticated(req) && certificate ? { + validityDays: getCertificateValidityDays(certificate), + regenerateRecommended: !getCertificateIsUptoStandards(certificate) + } : void 0 + }); + } + _vaultGet(path2, req, res) { + return __async(this, null, function* () { + if (!path2 || path2.endsWith("/")) { + const files = [ + ...new Set(this.app.vault.getFiles().map((e) => e.path).filter((filename) => filename.startsWith(path2)).map((filename) => { + const subPath = filename.slice(path2.length); + if (subPath.indexOf("/") > -1) { + return subPath.slice(0, subPath.indexOf("/") + 1); + } + return subPath; + })) + ]; + files.sort(); + if (files.length === 0) { + this.returnCannedResponse(res, { statusCode: 404 }); + return; + } + res.json({ + files + }); + } else { + const exists = yield this.app.vault.adapter.exists(path2); + if (exists && (yield this.app.vault.adapter.stat(path2)).type === "file") { + const content = yield this.app.vault.adapter.readBinary(path2); + const mimeType = import_mime_types.default.lookup(path2); + res.set({ + "Content-Disposition": `attachment; filename="${encodeURI(path2).replace(",", "%2C")}"`, + "Content-Type": `${mimeType}` + (mimeType == ContentTypes.markdown ? "; charset=utf-8" : "") + }); + if (req.headers.accept === ContentTypes.olrapiNoteJson) { + const file = this.app.vault.getAbstractFileByPath(path2); + res.setHeader("Content-Type", ContentTypes.olrapiNoteJson); + res.send(JSON.stringify(yield this.getFileMetadataObject(file), null, 2)); + return; + } + res.send(Buffer.from(content)); + } else { + this.returnCannedResponse(res, { + statusCode: 404 + }); + return; + } + } + }); + } + vaultGet(req, res) { + return __async(this, null, function* () { + const path2 = req.params[0]; + return this._vaultGet(path2, req, res); + }); + } + _vaultPut(filepath, req, res) { + return __async(this, null, function* () { + if (!filepath || filepath.endsWith("/")) { + this.returnCannedResponse(res, { + errorCode: ErrorCode.RequestMethodValidOnlyForFiles + }); + return; + } + try { + yield this.app.vault.createFolder(import_path.default.dirname(filepath)); + } catch (e) { + } + if (typeof req.body === "string") { + yield this.app.vault.adapter.write(filepath, req.body); + } else { + yield this.app.vault.adapter.writeBinary(filepath, toArrayBuffer(req.body)); + } + this.returnCannedResponse(res, { statusCode: 204 }); + return; + }); + } + vaultPut(req, res) { + return __async(this, null, function* () { + const path2 = req.params[0]; + return this._vaultPut(path2, req, res); + }); + } + _vaultPatch(path2, req, res) { + return __async(this, null, function* () { + const headingBoundary = req.get("Heading-Boundary") || "::"; + const heading = (req.get("Heading") || "").split(headingBoundary).filter(Boolean); + const contentPosition = req.get("Content-Insertion-Position"); + let insert = false; + let aboveNewLine = false; + if (!path2 || path2.endsWith("/")) { + this.returnCannedResponse(res, { + errorCode: ErrorCode.RequestMethodValidOnlyForFiles + }); + return; + } + if (contentPosition === void 0) { + insert = false; + } else if (contentPosition === "beginning") { + insert = true; + } else if (contentPosition === "end") { + insert = false; + } else { + this.returnCannedResponse(res, { + errorCode: ErrorCode.InvalidContentInsertionPositionValue + }); + return; + } + if (typeof req.body != "string") { + this.returnCannedResponse(res, { + errorCode: ErrorCode.TextContentEncodingRequired + }); + return; + } + if (typeof req.get("Content-Insertion-Ignore-Newline") == "string") { + aboveNewLine = req.get("Content-Insertion-Ignore-Newline").toLowerCase() == "true"; + } + if (!heading.length) { + this.returnCannedResponse(res, { + errorCode: ErrorCode.MissingHeadingHeader + }); + return; + } + const file = this.app.vault.getAbstractFileByPath(path2); + if (!(file instanceof import_obsidian.TFile)) { + this.returnCannedResponse(res, { + statusCode: 404 + }); + return; + } + const cache = this.app.metadataCache.getFileCache(file); + const position = findHeadingBoundary(cache, heading); + if (!position) { + this.returnCannedResponse(res, { + errorCode: ErrorCode.InvalidHeadingHeader + }); + return; + } + const fileContents = yield this.app.vault.read(file); + const fileLines = fileContents.split("\n"); + const splicePosition = getSplicePosition(fileLines, position, insert, aboveNewLine); + fileLines.splice(splicePosition, 0, req.body); + const content = fileLines.join("\n"); + yield this.app.vault.adapter.write(path2, content); + res.status(200).send(content); + }); + } + vaultPatch(req, res) { + return __async(this, null, function* () { + const path2 = req.params[0]; + return this._vaultPatch(path2, req, res); + }); + } + _vaultPost(filepath, req, res) { + return __async(this, null, function* () { + if (!filepath || filepath.endsWith("/")) { + this.returnCannedResponse(res, { + errorCode: ErrorCode.RequestMethodValidOnlyForFiles + }); + return; + } + if (typeof req.body != "string") { + this.returnCannedResponse(res, { + errorCode: ErrorCode.TextContentEncodingRequired + }); + return; + } + try { + yield this.app.vault.createFolder(import_path.default.dirname(filepath)); + } catch (e) { + } + let fileContents = ""; + const file = this.app.vault.getAbstractFileByPath(filepath); + if (file instanceof import_obsidian.TFile) { + fileContents = yield this.app.vault.read(file); + if (!fileContents.endsWith("\n")) { + fileContents += "\n"; + } + } + fileContents += req.body; + yield this.app.vault.adapter.write(filepath, fileContents); + this.returnCannedResponse(res, { statusCode: 204 }); + return; + }); + } + vaultPost(req, res) { + return __async(this, null, function* () { + const path2 = req.params[0]; + return this._vaultPost(path2, req, res); + }); + } + _vaultDelete(path2, req, res) { + return __async(this, null, function* () { + if (!path2 || path2.endsWith("/")) { + this.returnCannedResponse(res, { + errorCode: ErrorCode.RequestMethodValidOnlyForFiles + }); + return; + } + const pathExists = yield this.app.vault.adapter.exists(path2); + if (!pathExists) { + this.returnCannedResponse(res, { statusCode: 404 }); + return; + } + yield this.app.vault.adapter.remove(path2); + this.returnCannedResponse(res, { statusCode: 204 }); + return; + }); + } + vaultDelete(req, res) { + return __async(this, null, function* () { + const path2 = req.params[0]; + return this._vaultDelete(path2, req, res); + }); + } + getPeriodicNoteInterface() { + return { + daily: { + settings: import_obsidian_daily_notes_interface.default.getDailyNoteSettings(), + loaded: import_obsidian_daily_notes_interface.default.appHasDailyNotesPluginLoaded(), + create: import_obsidian_daily_notes_interface.default.createDailyNote, + get: import_obsidian_daily_notes_interface.default.getDailyNote, + getAll: import_obsidian_daily_notes_interface.default.getAllDailyNotes + }, + weekly: { + settings: import_obsidian_daily_notes_interface.default.getWeeklyNoteSettings(), + loaded: import_obsidian_daily_notes_interface.default.appHasWeeklyNotesPluginLoaded(), + create: import_obsidian_daily_notes_interface.default.createWeeklyNote, + get: import_obsidian_daily_notes_interface.default.getWeeklyNote, + getAll: import_obsidian_daily_notes_interface.default.getAllWeeklyNotes + }, + monthly: { + settings: import_obsidian_daily_notes_interface.default.getMonthlyNoteSettings(), + loaded: import_obsidian_daily_notes_interface.default.appHasMonthlyNotesPluginLoaded(), + create: import_obsidian_daily_notes_interface.default.createMonthlyNote, + get: import_obsidian_daily_notes_interface.default.getMonthlyNote, + getAll: import_obsidian_daily_notes_interface.default.getAllMonthlyNotes + }, + quarterly: { + settings: import_obsidian_daily_notes_interface.default.getQuarterlyNoteSettings(), + loaded: import_obsidian_daily_notes_interface.default.appHasQuarterlyNotesPluginLoaded(), + create: import_obsidian_daily_notes_interface.default.createQuarterlyNote, + get: import_obsidian_daily_notes_interface.default.getQuarterlyNote, + getAll: import_obsidian_daily_notes_interface.default.getAllQuarterlyNotes + }, + yearly: { + settings: import_obsidian_daily_notes_interface.default.getYearlyNoteSettings(), + loaded: import_obsidian_daily_notes_interface.default.appHasYearlyNotesPluginLoaded(), + create: import_obsidian_daily_notes_interface.default.createYearlyNote, + get: import_obsidian_daily_notes_interface.default.getYearlyNote, + getAll: import_obsidian_daily_notes_interface.default.getAllYearlyNotes + } + }; + } + periodicGetInterface(period) { + const periodic = this.getPeriodicNoteInterface(); + if (!periodic[period]) { + return [null, ErrorCode.PeriodDoesNotExist]; + } + if (!periodic[period].loaded) { + return [null, ErrorCode.PeriodIsNotEnabled]; + } + return [periodic[period], null]; + } + periodicGetNote(periodName) { + const [period, err] = this.periodicGetInterface(periodName); + if (err) { + return [null, err]; + } + const now = window.moment(Date.now()); + const all = period.getAll(); + const file = period.get(now, all); + if (!file) { + return [null, ErrorCode.PeriodicNoteDoesNotExist]; + } + return [file, null]; + } + periodicGetOrCreateNote(periodName) { + return __async(this, null, function* () { + const [gottenFile, err] = this.periodicGetNote(periodName); + let file = gottenFile; + if (err === ErrorCode.PeriodicNoteDoesNotExist) { + const [period] = this.periodicGetInterface(periodName); + const now = window.moment(Date.now()); + file = yield period.create(now); + const metadataCachePromise = new Promise((resolve) => { + let cache = null; + const interval = setInterval(() => { + cache = this.app.metadataCache.getFileCache(file); + if (cache) { + clearInterval(interval); + resolve(cache); + } + }, 100); + }); + yield metadataCachePromise; + } else if (err) { + return [null, err]; + } + return [file, null]; + }); + } + redirectToVaultPath(file, req, res, handler) { + const path2 = file.path; + res.set("Content-Location", encodeURI(path2)); + return handler(path2, req, res); + } + periodicGet(req, res) { + return __async(this, null, function* () { + const [file, err] = this.periodicGetNote(req.params.period); + if (err) { + this.returnCannedResponse(res, { errorCode: err }); + return; + } + return this.redirectToVaultPath(file, req, res, this._vaultGet.bind(this)); + }); + } + periodicPut(req, res) { + return __async(this, null, function* () { + const [file, err] = yield this.periodicGetOrCreateNote(req.params.period); + if (err) { + this.returnCannedResponse(res, { errorCode: err }); + return; + } + return this.redirectToVaultPath(file, req, res, this._vaultPut.bind(this)); + }); + } + periodicPost(req, res) { + return __async(this, null, function* () { + const [file, err] = yield this.periodicGetOrCreateNote(req.params.period); + if (err) { + this.returnCannedResponse(res, { errorCode: err }); + return; + } + return this.redirectToVaultPath(file, req, res, this._vaultPost.bind(this)); + }); + } + periodicPatch(req, res) { + return __async(this, null, function* () { + const [file, err] = yield this.periodicGetOrCreateNote(req.params.period); + if (err) { + this.returnCannedResponse(res, { errorCode: err }); + return; + } + return this.redirectToVaultPath(file, req, res, this._vaultPatch.bind(this)); + }); + } + periodicDelete(req, res) { + return __async(this, null, function* () { + const [file, err] = this.periodicGetNote(req.params.period); + if (err) { + this.returnCannedResponse(res, { errorCode: err }); + return; + } + return this.redirectToVaultPath(file, req, res, this._vaultDelete.bind(this)); + }); + } + activeFileGet(req, res) { + return __async(this, null, function* () { + const file = this.app.workspace.getActiveFile(); + return this.redirectToVaultPath(file, req, res, this._vaultGet.bind(this)); + }); + } + activeFilePut(req, res) { + return __async(this, null, function* () { + const file = this.app.workspace.getActiveFile(); + return this.redirectToVaultPath(file, req, res, this._vaultPut.bind(this)); + }); + } + activeFilePost(req, res) { + return __async(this, null, function* () { + const file = this.app.workspace.getActiveFile(); + return this.redirectToVaultPath(file, req, res, this._vaultPost.bind(this)); + }); + } + activeFilePatch(req, res) { + return __async(this, null, function* () { + const file = this.app.workspace.getActiveFile(); + return this.redirectToVaultPath(file, req, res, this._vaultPatch.bind(this)); + }); + } + activeFileDelete(req, res) { + return __async(this, null, function* () { + const file = this.app.workspace.getActiveFile(); + return this.redirectToVaultPath(file, req, res, this._vaultDelete.bind(this)); + }); + } + commandGet(req, res) { + return __async(this, null, function* () { + const commands = []; + for (const commandName in this.app.commands.commands) { + commands.push({ + id: commandName, + name: this.app.commands.commands[commandName].name + }); + } + const commandResponse = { + commands + }; + res.json(commandResponse); + }); + } + commandPost(req, res) { + return __async(this, null, function* () { + const cmd = this.app.commands.commands[req.params.commandId]; + if (!cmd) { + this.returnCannedResponse(res, { statusCode: 404 }); + return; + } + try { + this.app.commands.executeCommandById(req.params.commandId); + } catch (e) { + this.returnCannedResponse(res, { statusCode: 500, message: e.message }); + return; + } + this.returnCannedResponse(res, { statusCode: 204 }); + return; + }); + } + searchSimplePost(req, res) { + return __async(this, null, function* () { + var _a; + const results = []; + const query = req.query.query; + const contextLength = (_a = parseInt(req.query.contextLength, 10)) != null ? _a : 100; + const search = (0, import_obsidian.prepareSimpleSearch)(query); + for (const file of this.app.vault.getMarkdownFiles()) { + const cachedContents = yield this.app.vault.cachedRead(file); + const result = search(cachedContents); + if (result) { + const contextMatches = []; + for (const match of result.matches) { + contextMatches.push({ + match: { + start: match[0], + end: match[1] + }, + context: cachedContents.slice(Math.max(match[0] - contextLength, 0), match[1] + contextLength) + }); + } + results.push({ + filename: file.path, + score: result.score, + matches: contextMatches + }); + } + } + results.sort((a, b) => a.score > b.score ? 1 : -1); + res.json(results); + }); + } + valueIsSaneTruthy(value) { + if (value === void 0 || value === null) { + return false; + } else if (Array.isArray(value)) { + return value.length > 0; + } else if (typeof value === "object") { + return Object.keys(value).length > 0; + } + return Boolean(value); + } + searchQueryPost(req, res) { + return __async(this, null, function* () { + const dataviewApi = (0, import_obsidian_dataview.getAPI)(); + const handlers = { + [ContentTypes.dataviewDql]: () => __async(this, null, function* () { + const results = []; + const dataviewResults = yield dataviewApi.tryQuery(req.body); + const fileColumn = dataviewApi.evaluationContext.settings.tableIdColumnName; + if (dataviewResults.type !== "table") { + throw new Error("Only TABLE dataview queries are supported."); + } + if (!dataviewResults.headers.includes(fileColumn)) { + throw new Error("TABLE WITHOUT ID queries are not supported."); + } + for (const dataviewResult of dataviewResults.values) { + const fieldValues = {}; + dataviewResults.headers.forEach((value, index) => { + if (value !== fileColumn) { + fieldValues[value] = dataviewResult[index]; + } + }); + results.push({ + filename: dataviewResult[0].path, + result: fieldValues + }); + } + return results; + }), + [ContentTypes.jsonLogic]: () => __async(this, null, function* () { + const results = []; + for (const file of this.app.vault.getMarkdownFiles()) { + const fileContext = yield this.getFileMetadataObject(file); + try { + const fileResult = import_json_logic_js.default.apply(req.body, fileContext); + if (this.valueIsSaneTruthy(fileResult)) { + results.push({ + filename: file.path, + result: fileResult + }); + } + } catch (e) { + throw new Error(`${e.message} (while processing ${file.path})`); + } + } + return results; + }) + }; + const contentType = req.headers["content-type"]; + if (!handlers[contentType]) { + this.returnCannedResponse(res, { + errorCode: ErrorCode.ContentTypeSpecificationRequired + }); + return; + } + try { + const results = yield handlers[contentType](); + res.json(results); + } catch (e) { + this.returnCannedResponse(res, { + errorCode: ErrorCode.InvalidFilterQuery, + message: `${e.message}` + }); + return; + } + }); + } + openPost(req, res) { + return __async(this, null, function* () { + const path2 = req.params[0]; + const query = import_query_string.default.parseUrl(req.originalUrl, { + parseBooleans: true + }).query; + const newLeaf = Boolean(query.newLeaf); + this.app.workspace.openLinkText(path2, "/", newLeaf); + res.json(); + }); + } + certificateGet(req, res) { + return __async(this, null, function* () { + res.set("Content-type", `application/octet-stream; filename="${CERT_NAME}"`); + res.status(200).send(this.settings.crypto.cert); + }); + } + notFoundHandler(req, res, next) { + return __async(this, null, function* () { + this.returnCannedResponse(res, { + statusCode: 404 + }); + return; + }); + } + errorHandler(err, req, res, next) { + return __async(this, null, function* () { + if (err instanceof SyntaxError) { + this.returnCannedResponse(res, { + errorCode: ErrorCode.InvalidContentForContentType + }); + return; + } + this.returnCannedResponse(res, { + statusCode: 500, + message: err.message + }); + return; + }); + } + setupRouter() { + this.api.use((req, res, next) => { + const originalSend = res.send; + res.send = function(body, ...args2) { + console.log(`[REST API] ${req.method} ${req.url} => ${res.statusCode}`); + return originalSend.apply(res, [body, ...args2]); + }; + next(); + }); + this.api.use((0, import_response_time.default)()); + this.api.use((0, import_cors.default)()); + this.api.use(this.authenticationMiddleware.bind(this)); + this.api.use(import_body_parser.default.text({ type: "text/*", limit: MaximumRequestSize })); + this.api.use(import_body_parser.default.text({ + type: ContentTypes.dataviewDql, + limit: MaximumRequestSize + })); + this.api.use(import_body_parser.default.json({ type: ContentTypes.json, limit: MaximumRequestSize })); + this.api.use(import_body_parser.default.json({ + type: ContentTypes.olrapiNoteJson, + limit: MaximumRequestSize + })); + this.api.use(import_body_parser.default.json({ + type: ContentTypes.jsonLogic, + limit: MaximumRequestSize + })); + this.api.use(import_body_parser.default.raw({ type: "*/*", limit: MaximumRequestSize })); + this.api.route("/active/").get(this.activeFileGet.bind(this)).put(this.activeFilePut.bind(this)).patch(this.activeFilePatch.bind(this)).post(this.activeFilePost.bind(this)).delete(this.activeFileDelete.bind(this)); + this.api.route("/vault/(.*)").get(this.vaultGet.bind(this)).put(this.vaultPut.bind(this)).patch(this.vaultPatch.bind(this)).post(this.vaultPost.bind(this)).delete(this.vaultDelete.bind(this)); + this.api.route("/periodic/:period/").get(this.periodicGet.bind(this)).put(this.periodicPut.bind(this)).patch(this.periodicPatch.bind(this)).post(this.periodicPost.bind(this)).delete(this.periodicDelete.bind(this)); + this.api.route("/commands/").get(this.commandGet.bind(this)); + this.api.route("/commands/:commandId/").post(this.commandPost.bind(this)); + this.api.route("/search/").post(this.searchQueryPost.bind(this)); + this.api.route("/search/simple/").post(this.searchSimplePost.bind(this)); + this.api.route("/open/(.*)").post(this.openPost.bind(this)); + this.api.get(`/${CERT_NAME}`, this.certificateGet.bind(this)); + this.api.get("/", this.root.bind(this)); + this.api.use(this.notFoundHandler.bind(this)); + this.api.use(this.errorHandler.bind(this)); + } +}; + +// src/main.ts +var LocalRestApi = class extends import_obsidian2.Plugin { + constructor() { + super(...arguments); + this.secureServer = null; + this.insecureServer = null; + } + onload() { + return __async(this, null, function* () { + this.refreshServerState = this.debounce(this._refreshServerState.bind(this), 1e3); + yield this.loadSettings(); + this.requestHandler = new RequestHandler(this.app, this.manifest, this.settings); + this.requestHandler.setupRouter(); + if (!this.settings.apiKey) { + this.settings.apiKey = import_node_forge2.default.md.sha256.create().update(import_node_forge2.default.random.getBytesSync(128)).digest().toHex(); + this.saveSettings(); + } + if (!this.settings.crypto) { + const expiry = new Date(); + const today = new Date(); + expiry.setDate(today.getDate() + 365); + const keypair = import_node_forge2.default.pki.rsa.generateKeyPair(2048); + const attrs = [ + { + name: "commonName", + value: "Obsidian Local REST API" + } + ]; + const certificate = import_node_forge2.default.pki.createCertificate(); + certificate.setIssuer(attrs); + certificate.setSubject(attrs); + const subjectAltNames = [ + { + type: 7, + ip: DefaultBindingHost + } + ]; + if (this.settings.bindingHost && this.settings.bindingHost !== "0.0.0.0") { + subjectAltNames.push({ + type: 7, + ip: this.settings.bindingHost + }); + } + if (this.settings.subjectAltNames) { + for (const name of this.settings.subjectAltNames.split("\n")) { + if (name.trim()) { + subjectAltNames.push({ + type: 2, + value: name.trim() + }); + } + } + } + certificate.setExtensions([ + { + name: "basicConstraints", + cA: true, + critical: true + }, + { + name: "keyUsage", + keyCertSign: true, + digitalSignature: true, + nonRepudiation: true, + keyEncipherment: false, + dataEncipherment: false, + critical: true + }, + { + name: "extKeyUsage", + serverAuth: true, + clientAuth: true, + codeSigning: true, + emailProtection: true, + timeStamping: true + }, + { + name: "nsCertType", + client: true, + server: true, + email: true, + objsign: true, + sslCA: true, + emailCA: true, + objCA: true + }, + { + name: "subjectAltName", + altNames: subjectAltNames + } + ]); + certificate.serialNumber = "1"; + certificate.publicKey = keypair.publicKey; + certificate.validity.notAfter = expiry; + certificate.validity.notBefore = today; + certificate.sign(keypair.privateKey, import_node_forge2.default.md.sha256.create()); + this.settings.crypto = { + cert: import_node_forge2.pki.certificateToPem(certificate), + privateKey: import_node_forge2.pki.privateKeyToPem(keypair.privateKey), + publicKey: import_node_forge2.pki.publicKeyToPem(keypair.publicKey) + }; + this.saveSettings(); + } + this.addSettingTab(new LocalRestApiSettingTab(this.app, this)); + this.refreshServerState(); + }); + } + debounce(func, delay) { + let debounceTimer; + return (...args2) => { + clearTimeout(debounceTimer); + debounceTimer = setTimeout(() => func(...args2), delay); + }; + } + _refreshServerState() { + var _a, _b, _c, _d, _e; + if (this.secureServer) { + this.secureServer.close(); + this.secureServer = null; + } + if ((_a = this.settings.enableSecureServer) != null ? _a : true) { + this.secureServer = https.createServer({ + key: this.settings.crypto.privateKey, + cert: this.settings.crypto.cert + }, this.requestHandler.api); + this.secureServer.listen(this.settings.port, (_b = this.settings.bindingHost) != null ? _b : DefaultBindingHost); + console.log(`[REST API] Listening on https://${(_c = this.settings.bindingHost) != null ? _c : DefaultBindingHost}:${this.settings.port}/`); + } + if (this.insecureServer) { + this.insecureServer.close(); + this.insecureServer = null; + } + if (this.settings.enableInsecureServer) { + this.insecureServer = http2.createServer(this.requestHandler.api); + this.insecureServer.listen(this.settings.insecurePort, (_d = this.settings.bindingHost) != null ? _d : DefaultBindingHost); + console.log(`[REST API] Listening on http://${(_e = this.settings.bindingHost) != null ? _e : DefaultBindingHost}:${this.settings.insecurePort}/`); + } + } + onunload() { + if (this.secureServer) { + this.secureServer.close(); + } + if (this.insecureServer) { + this.insecureServer.close(); + } + } + 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); + }); + } +}; +var LocalRestApiSettingTab = class extends import_obsidian2.PluginSettingTab { + constructor(app, plugin) { + super(app, plugin); + this.showAdvancedSettings = false; + this.plugin = plugin; + } + display() { + var _a; + const { containerEl } = this; + const parsedCertificate = import_node_forge2.default.pki.certificateFromPem(this.plugin.settings.crypto.cert); + const remainingCertificateValidityDays = getCertificateValidityDays(parsedCertificate); + const shouldRegenerateCertificate = !getCertificateIsUptoStandards(parsedCertificate); + containerEl.empty(); + containerEl.classList.add("obsidian-local-rest-api-settings"); + const apiKeyDiv = containerEl.createEl("div"); + apiKeyDiv.classList.add("api-key-display"); + apiKeyDiv.createEl("h3", { text: "Your API Key" }); + apiKeyDiv.createEl("p", { + text: "This must be passed in all requests via an authorization header." + }); + apiKeyDiv.createEl("pre", { text: this.plugin.settings.apiKey }); + apiKeyDiv.createEl("p", { text: "Example header: " }); + apiKeyDiv.createEl("pre", { + text: `${(_a = this.plugin.settings.authorizationHeaderName) != null ? _a : "Authorization"}: Bearer ${this.plugin.settings.apiKey}` + }); + const seeMore = apiKeyDiv.createEl("p"); + seeMore.createEl("a", { + href: "https://coddingtonbear.github.io/obsidian-local-rest-api/", + text: "See more information and examples in our interactive OpenAPI documentation." + }); + const importCert = apiKeyDiv.createEl("p"); + importCert.createEl("span", { + text: "By default this plugin uses a self-signed certificate for HTTPS; you may want to " + }); + importCert.createEl("a", { + href: `https://127.0.0.1:${this.plugin.settings.port}/${CERT_NAME}`, + text: "download this certificate" + }); + importCert.createEl("span", { + text: " to use it for validating your connection's security by adding it as a trusted certificate authority in the browser or tool you are using for interacting with this API." + }); + if (remainingCertificateValidityDays < 0) { + const expiredCertDiv = apiKeyDiv.createEl("div"); + expiredCertDiv.classList.add("certificate-expired"); + expiredCertDiv.innerHTML = ` + Your certificate has expired! + You must re-generate your certificate below by pressing + the "Re-generate Certificates" button below in + order to connect securely to this API. + `; + } else if (remainingCertificateValidityDays < 30) { + const soonExpiringCertDiv = apiKeyDiv.createEl("div"); + soonExpiringCertDiv.classList.add("certificate-expiring-soon"); + soonExpiringCertDiv.innerHTML = ` + Your certificate will expire in ${Math.floor(remainingCertificateValidityDays)} day${Math.floor(remainingCertificateValidityDays) === 1 ? "" : "s"}s! + You should re-generate your certificate below by pressing + the "Re-generate Certificates" button below in + order to continue to connect securely to this API. + `; + } + if (shouldRegenerateCertificate) { + const shouldRegenerateCertificateDiv = apiKeyDiv.createEl("div"); + shouldRegenerateCertificateDiv.classList.add("certificate-regeneration-recommended"); + shouldRegenerateCertificateDiv.innerHTML = ` + You should re-generate your certificate! + Your certificate was generated using earlier standards than + are currently used by Obsidian Local REST API. Some systems + or tools may not accept your certificate with its current + configuration, and re-generating your certificate may + improve compatibility with such tools. To re-generate your + certificate, press the "Re-generate Certificates" button + below. + `; + } + new import_obsidian2.Setting(containerEl).setName("Enable Non-encrypted (HTTP) Server").setDesc("Enables a non-encrypted (HTTP) server on the port designated below. By default this plugin requires a secure HTTPS connection, but in safe environments you may turn on the non-encrypted server to simplify interacting with the API. Interactions with the API will still require the API Key shown above. Under no circumstances is it recommended that you expose this service to the internet, especially if you turn on this feature!").addToggle((cb) => cb.onChange((value) => { + this.plugin.settings.enableInsecureServer = value; + this.plugin.saveSettings(); + this.plugin.refreshServerState(); + }).setValue(this.plugin.settings.enableInsecureServer)); + new import_obsidian2.Setting(containerEl).setName("Reset All Cryptography").setDesc(`Pressing this button will cause your certificate, + private key, public key, and API key to be regenerated. + This settings panel will be closed when you press this.`).addButton((cb) => { + cb.setWarning().setButtonText("Reset All Crypto").onClick(() => { + delete this.plugin.settings.apiKey; + delete this.plugin.settings.crypto; + this.plugin.saveSettings(); + this.plugin.unload(); + this.plugin.load(); + }); + }); + new import_obsidian2.Setting(containerEl).setName("Re-generate Certificates").setDesc(`Pressing this button will cause your certificate, + private key, and public key to be re-generated, but your API key will remain unchanged. + This settings panel will be closed when you press this.`).addButton((cb) => { + cb.setWarning().setButtonText("Re-generate Certificates").onClick(() => { + delete this.plugin.settings.crypto; + this.plugin.saveSettings(); + this.plugin.unload(); + this.plugin.load(); + }); + }); + new import_obsidian2.Setting(containerEl).setName("Restore Default Settings").setDesc(`Pressing this button will reset this plugin's + settings to defaults. + This settings panel will be closed when you press this.`).addButton((cb) => { + cb.setWarning().setButtonText("Restore Defaults").onClick(() => { + this.plugin.settings = Object.assign({}, DEFAULT_SETTINGS); + this.plugin.saveSettings(); + this.plugin.unload(); + this.plugin.load(); + }); + }); + new import_obsidian2.Setting(containerEl).setName("Show advanced settings").setDesc(`Advanced settings are dangerous and may make your environment less secure.`).addToggle((cb) => { + cb.onChange((value) => { + if (this.showAdvancedSettings !== value) { + this.showAdvancedSettings = value; + this.display(); + } + }).setValue(this.showAdvancedSettings); + }); + if (this.showAdvancedSettings) { + containerEl.createEl("hr"); + containerEl.createEl("h3", { + text: "Advanced Settings" + }); + containerEl.createEl("p", { + text: ` + The settings below are potentially dangerous and + are intended for use only by people who know what + they are doing. Do not change any of these settings if + you do not understand what that setting is used for + and what security impacts changing that setting will have. + ` + }); + const noWarrantee = containerEl.createEl("p"); + noWarrantee.createEl("span", { + text: ` + Use of this software is licensed to you under the + MIT license, and it is important that you understand that + this license provides you with no warranty. + For the complete license text please see + ` + }); + noWarrantee.createEl("a", { + href: LicenseUrl, + text: LicenseUrl + }); + noWarrantee.createEl("span", { text: "." }); + new import_obsidian2.Setting(containerEl).setName("Enable Encrypted (HTTPs) Server").setDesc(` + This controls whether the HTTPs server is enabled. You almost certainly want to leave this switch in its default state ('on'), + but may find it useful to turn this switch off for + troubleshooting. + `).addToggle((cb) => { + var _a2; + return cb.onChange((value) => { + this.plugin.settings.enableSecureServer = value; + this.plugin.saveSettings(); + this.plugin.refreshServerState(); + }).setValue((_a2 = this.plugin.settings.enableSecureServer) != null ? _a2 : true); + }); + new import_obsidian2.Setting(containerEl).setName("Encrypted (HTTPS) Server Port").setDesc("This configures the port on which your REST API will listen for HTTPS connections. It is recommended that you leave this port with its default setting as tools integrating with this API may expect the default port to be in use. Under no circumstances is it recommended that you expose this service directly to the internet.").addText((cb) => cb.onChange((value) => { + this.plugin.settings.port = parseInt(value, 10); + this.plugin.saveSettings(); + this.plugin.refreshServerState(); + }).setValue(this.plugin.settings.port.toString())); + new import_obsidian2.Setting(containerEl).setName("Non-encrypted (HTTP) Server Port").addText((cb) => cb.onChange((value) => { + this.plugin.settings.insecurePort = parseInt(value, 10); + this.plugin.saveSettings(); + this.plugin.refreshServerState(); + }).setValue(this.plugin.settings.insecurePort.toString())); + new import_obsidian2.Setting(containerEl).setName("API Key").addText((cb) => { + cb.onChange((value) => { + this.plugin.settings.apiKey = value; + this.plugin.saveSettings(); + this.plugin.refreshServerState(); + }).setValue(this.plugin.settings.apiKey); + }); + new import_obsidian2.Setting(containerEl).setName("Certificate Hostnames").setDesc(` + List of extra hostnames to add + to your certificate's \`subjectAltName\` field. + One hostname per line. + You must click the "Re-generate Certificates" button above after changing this value + for this to have an effect. This is useful for + situations in which you are accessing Obsidian + from a hostname other than the host on which + it is running. + `).addTextArea((cb) => cb.onChange((value) => { + this.plugin.settings.subjectAltNames = value; + this.plugin.saveSettings(); + }).setValue(this.plugin.settings.subjectAltNames)); + new import_obsidian2.Setting(containerEl).setName("Certificate").addTextArea((cb) => cb.onChange((value) => { + this.plugin.settings.crypto.cert = value; + this.plugin.saveSettings(); + this.plugin.refreshServerState(); + }).setValue(this.plugin.settings.crypto.cert)); + new import_obsidian2.Setting(containerEl).setName("Public Key").addTextArea((cb) => cb.onChange((value) => { + this.plugin.settings.crypto.publicKey = value; + this.plugin.saveSettings(); + this.plugin.refreshServerState(); + }).setValue(this.plugin.settings.crypto.publicKey)); + new import_obsidian2.Setting(containerEl).setName("Private Key").addTextArea((cb) => cb.onChange((value) => { + this.plugin.settings.crypto.privateKey = value; + this.plugin.saveSettings(); + this.plugin.refreshServerState(); + }).setValue(this.plugin.settings.crypto.privateKey)); + new import_obsidian2.Setting(containerEl).setName("Authorization Header").addText((cb) => { + var _a2; + cb.onChange((value) => { + if (value !== DefaultBearerTokenHeaderName) { + this.plugin.settings.authorizationHeaderName = value; + } else { + delete this.plugin.settings.authorizationHeaderName; + } + this.plugin.saveSettings(); + this.plugin.refreshServerState(); + }).setValue((_a2 = this.plugin.settings.authorizationHeaderName) != null ? _a2 : DefaultBearerTokenHeaderName); + }); + new import_obsidian2.Setting(containerEl).setName("Binding Host").addText((cb) => { + var _a2; + cb.onChange((value) => { + if (value !== DefaultBindingHost) { + this.plugin.settings.bindingHost = value; + } else { + delete this.plugin.settings.bindingHost; + } + this.plugin.saveSettings(); + this.plugin.refreshServerState(); + }).setValue((_a2 = this.plugin.settings.bindingHost) != null ? _a2 : DefaultBindingHost); + }); + } + } +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = {}); +/* +object-assign +(c) Sindre Sorhus +@license MIT +*/ +/*! + * accepts + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * body-parser + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * body-parser + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * bytes + * Copyright(c) 2012-2014 TJ Holowaychuk + * Copyright(c) 2015 Jed Watson + * MIT Licensed + */ +/*! + * content-disposition + * Copyright(c) 2014-2017 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * content-type + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * cookie + * Copyright(c) 2012-2014 Roman Shtylman + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * depd + * Copyright(c) 2014 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * depd + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * depd + * Copyright(c) 2014-2017 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * depd + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * destroy + * Copyright(c) 2014 Jonathan Ong + * MIT Licensed + */ +/*! + * ee-first + * Copyright(c) 2014 Jonathan Ong + * MIT Licensed + */ +/*! + * encodeurl + * Copyright(c) 2016 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * escape-html + * Copyright(c) 2012-2013 TJ Holowaychuk + * Copyright(c) 2015 Andreas Lubbe + * Copyright(c) 2015 Tiancheng "Timothy" Gu + * MIT Licensed + */ +/*! + * etag + * Copyright(c) 2014-2016 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * express + * Copyright(c) 2009-2013 TJ Holowaychuk + * Copyright(c) 2013 Roman Shtylman + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * express + * Copyright(c) 2009-2013 TJ Holowaychuk + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * finalhandler + * Copyright(c) 2014-2017 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * forwarded + * Copyright(c) 2014-2017 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * fresh + * Copyright(c) 2012 TJ Holowaychuk + * Copyright(c) 2016-2017 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * http-errors + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2016 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * media-typer + * Copyright(c) 2014 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * merge-descriptors + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * methods + * Copyright(c) 2013-2014 TJ Holowaychuk + * Copyright(c) 2015-2016 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * mime-db + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2015-2022 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * mime-types + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * negotiator + * Copyright(c) 2012 Federico Romero + * Copyright(c) 2012-2014 Isaac Z. Schlueter + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * on-finished + * Copyright(c) 2013 Jonathan Ong + * Copyright(c) 2014 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * on-headers + * Copyright(c) 2014 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * parseurl + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2014-2017 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * proxy-addr + * Copyright(c) 2014-2016 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * range-parser + * Copyright(c) 2012-2014 TJ Holowaychuk + * Copyright(c) 2015-2016 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * raw-body + * Copyright(c) 2013-2014 Jonathan Ong + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * response-time + * Copyright(c) 2011 TJ Holowaychuk + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * router + * Copyright(c) 2013 Roman Shtylman + * Copyright(c) 2014 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * send + * Copyright(c) 2012 TJ Holowaychuk + * Copyright(c) 2014-2016 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * serve-static + * Copyright(c) 2010 Sencha Inc. + * Copyright(c) 2011 TJ Holowaychuk + * Copyright(c) 2014-2016 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * statuses + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2016 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * toidentifier + * Copyright(c) 2016 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * type-is + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * unpipe + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ +/*! + * vary + * Copyright(c) 2014-2017 Douglas Christopher Wilson + * MIT Licensed + */ +/*! safe-buffer. MIT License. Feross Aboukhadijeh */ diff --git a/.obsidian/plugins/obsidian-local-rest-api/manifest.json b/.obsidian/plugins/obsidian-local-rest-api/manifest.json new file mode 100644 index 0000000..4dda7dd --- /dev/null +++ b/.obsidian/plugins/obsidian-local-rest-api/manifest.json @@ -0,0 +1,10 @@ +{ + "id": "obsidian-local-rest-api", + "name": "Local REST API", + "version": "2.3.0", + "minAppVersion": "0.12.0", + "description": "Get, change or otherwise interact with your notes in Obsidian via a REST API.", + "author": "Adam Coddington", + "authorUrl": "https://coddingtonbear.net/", + "isDesktopOnly": true +} \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-local-rest-api/styles.css b/.obsidian/plugins/obsidian-local-rest-api/styles.css new file mode 100644 index 0000000..925e5df --- /dev/null +++ b/.obsidian/plugins/obsidian-local-rest-api/styles.css @@ -0,0 +1,35 @@ +/* Sets all the text color to red! */ + +div.obsidian-local-rest-api-settings div.api-key-display { + margin-bottom: 20px; +} +div.obsidian-local-rest-api-settings div.api-key-display pre { + font-size: 0.8em; + padding: 10px 20px; + background-color: var(--background-modifier-cover); + font-family: monospace; + user-select: all; +} + +div.obsidian-local-rest-api-settings div.setting-item-control { + min-width: 50%; +} + +div.obsidian-local-rest-api-settings textarea { + width: 100%; +} + +div.obsidian-local-rest-api-settings div.certificate-expired { + padding: 10px 20px; + border: 2px solid #ff0000; +} + +div.obsidian-local-rest-api-settings div.certificate-expiring-soon { + padding: 10px 20px; + border: 2px solid #ffff00; +} + +div.obsidian-local-rest-api-settings div.certificate-regeneration-recommended { + padding: 10px 20px; + border: 2px solid #ffff00; +} diff --git a/.obsidian/themes/Atom/manifest.json b/.obsidian/themes/Atom/manifest.json new file mode 100644 index 0000000..d0d338f --- /dev/null +++ b/.obsidian/themes/Atom/manifest.json @@ -0,0 +1,6 @@ +{ + "name": "Atom", + "version": "0.0.0", + "minAppVersion": "0.16.0", + "author": "kognise" +} \ No newline at end of file diff --git a/.obsidian/themes/Atom/theme.css b/.obsidian/themes/Atom/theme.css new file mode 100644 index 0000000..707483e --- /dev/null +++ b/.obsidian/themes/Atom/theme.css @@ -0,0 +1,339 @@ +/* Base colors - TODO: are grey 1 and grey 2 used? */ +.theme-dark { + --accent-h: 219; + --accent-s: 56%; + --accent-l: 55%; + + --background-primary: #272b34; + --background-primary-alt: #20242b; + --background-secondary: #20242b; + --background-secondary-alt: #1a1e24; + --background-accent: #000; + --background-modifier-border: #424958; + --background-modifier-form-field: rgba(0, 0, 0, 0.3); + --background-modifier-form-field-highlighted: rgba(0, 0, 0, 0.22); + --background-modifier-box-shadow: rgba(0, 0, 0, 0.3); + --background-modifier-success: #539126; + --background-modifier-error: #3d0000; + --background-modifier-error-rgb: 61, 0, 0; + --background-modifier-error-hover: #470000; + --background-modifier-cover: rgba(0, 0, 0, 0.6); + --text-accent: #61afef; + --text-accent-hover: #70bdfc; + --text-normal: #dcddde; + --text-muted: #888; + --text-faint: rgb(81, 86, 99); + --text-error: #e16d76; + --text-error-hover: #c9626a; + --text-highlight-bg: rgba(255, 255, 0, 0.4); + --text-selection: rgba(0, 122, 255, 0.2); + --text-on-accent: #dcddde; + --interactive-normal: #20242b; + --interactive-hover: #353b47; + --interactive-accent-hover: hsl(var(--accent-h), calc(var(--accent-s) + 5%), calc(var(--accent-l) - 10%)); + --scrollbar-active-thumb-bg: rgba(255, 255, 255, 0.2); + --scrollbar-bg: rgba(255, 255, 255, 0.05); + --scrollbar-thumb-bg: rgba(255, 255, 255, 0.1); + --panel-border-color: #18191e; + --gray-1: #5C6370; + --gray-2: #abb2bf; + --red: #e06c75; + --orange: #d19a66; + --green: #98c379; + --aqua: #56b6c2; + --purple: #c678dd; + --blue: #61afef; + --yellow: #e5c07b; + + --background-modifier-hover: hsla(var(--accent-h), calc(var(--accent-s) - 35%), var(--accent-l), 0.06); + --divider-color-hover: #404754; +} + +.theme-light { + --accent-h: 230; + --accent-s: 83%; + --accent-l: 64%; + + --background-primary: #fafafa; + --background-primary-alt: #eaeaeb; + --background-secondary: #eaeaeb; + --background-secondary-alt: #dbdbdc; + --background-accent: #fff; + --background-modifier-border: #dbdbdc; + --background-modifier-form-field: #fff; + --background-modifier-form-field-highlighted: #fff; + --background-modifier-box-shadow: rgba(0, 0, 0, 0.1); + --background-modifier-success: #A4E7C3; + --background-modifier-error: #e68787; + --background-modifier-error-rgb: 230, 135, 135; + --background-modifier-error-hover: #FF9494; + --background-modifier-cover: rgba(0, 0, 0, 0.8); + --text-accent: #1592ff; + --text-accent-hover: #097add; + --text-normal: #383a42; + --text-muted: #8e8e90; + --text-faint: #999999; + --text-error: #e75545; + --text-error-hover: #f86959; + --text-highlight-bg: rgba(255, 255, 0, 0.4); + --text-selection: rgba(0, 122, 255, 0.15); + --text-on-accent: #f2f2f2; + --interactive-normal: #eaeaeb; + --interactive-hover: #dbdbdc; + --interactive-accent-rgb: 21, 146, 255; + --interactive-accent-hover: hsl(var(--accent-h), calc(var(--accent-s) - 10%), calc(var(--accent-l) - 4%)); + --scrollbar-active-thumb-bg: rgba(0, 0, 0, 0.2); + --scrollbar-bg: rgba(0, 0, 0, 0.05); + --scrollbar-thumb-bg: rgba(0, 0, 0, 0.1); + --panel-border-color: #dbdbdc; + --gray-1: #383a42; + --gray-2: #383a42; + --red: #e75545; + --green: #4ea24c; + --blue: #3d74f6; + --purple: #a625a4; + --aqua: #0084bc; + --yellow: #e35649; + --orange: #986800; +} + +.theme-dark, .theme-light { + --ribbon-background: var(--background-primary); + --drag-ghost-background: var(--background-secondary-alt); + --background-modifier-message: var(--background-secondary-alt); + + --tab-outline-color: transparent; + --divider-color: transparent; + + --prompt-border-color: var(--panel-border-color); + --modal-border-color: var(--panel-border-color); + + --background-modifier-border-hover: var(--interactive-hover); + --background-modifier-border-focus: var(--interactive-hover); + + --checkbox-color: var(--text-accent); + --checkbox-color-hover: var(--text-accent-hover); + + --nav-item-background-active: var(--interactive-accent); + --nav-item-color-active: #ffffff; + + --tag-color: var(--yellow); + --tag-background: var(--background-primary-alt); + --tag-color-hover: var(--yellow); + --tag-background-hover: var(--background-primary-alt); + --tag-padding-x: 4px; + --tag-padding-y: 2px; + --tag-radius: 4px; + + --inline-title-weight: var(--bold-weight); + --link-decoration: none; + --link-external-decoration: none; + --embed-padding: 0 0 0 var(--size-4-4); +} + +/* Search */ +.search-result .search-result-file-title { + cursor: pointer; +} + +.search-result .collapse-icon { + cursor: var(--cursor); +} + +.search-result:not(.is-collapsed) .search-result-file-title { + color: var(--blue); +} + +/* File tab separators */ +.workspace .mod-root .workspace-tab-header-inner::after { + right: unset; + left: -0.5px; +} + +.workspace .mod-root .workspace-tab-header:last-child .workspace-tab-header-inner::before { + position: absolute; + right: -0.5px; + width: 1px; + background-color: var(--tab-divider-color); + content: ''; + height: 20px; +} + +.workspace .mod-root .workspace-tab-header.is-active .workspace-tab-header-inner::after, +.workspace .mod-root .workspace-tab-header.is-active .workspace-tab-header-inner::before, +.workspace .mod-root .workspace-tab-header:first-child .workspace-tab-header-inner::after, +.workspace .mod-root .workspace-tab-header.is-active + .workspace-tab-header .workspace-tab-header-inner::after { + opacity: 0; +} + +/* Editor and output */ +.markdown-rendered blockquote { + padding: var(--embed-padding); +} + +mjx-container { + text-align: left !important; +} + +.math-block { + font-size: 1.3em; +} + +.theme-light :not(pre)>code, +.theme-light pre { + background: var(--background-primary); + box-shadow: inset 0 0 0 1px var(--background-primary-alt); + border-radius: 4px; +} + +.markdown-preview-section > div h1, +.markdown-preview-section > div h2, +.markdown-preview-section > div h3, +.markdown-preview-section > div h4, +.markdown-preview-section > div h5, +.markdown-preview-section > div h6 { + margin-top: 40px; +} + +.mod-header + div h1, +.mod-header + div h2, +.mod-header + div h3, +.mod-header + div h4, +.mod-header + div h5, +.mod-header + div h6 { + margin-top: 30px; +} + +.cm-sizer > .inline-title { + margin-bottom: 20px; +} + +/* Miscellaneous */ +.theme-dark .dropdown:hover { + background-color: var(--background-modifier-form-field); +} + +.tooltip { + color: var(--text-muted); +} + +.nav-file, .nav-folder { + padding: 1px 2px; +} + +body:not(.is-grabbing) .nav-file-title.is-being-dragged, +body:not(.is-grabbing) .nav-folder-title.is-being-dragged, +.nav-file-title.is-being-dragged, +.nav-folder-title.is-being-dragged { + background-color: var(--background-primary-alt); + color: var(--nav-item-color); +} + +.view-header-title { + text-decoration: underline; + text-decoration-color: var(--text-muted); + text-underline-offset: 1.5px; +} + +.status-bar { + border-color: var(--panel-border-color); + border-width: 1px; + padding: 4px 8px; +} + +.theme-dark button.mod-warning { + --background-modifier-error: #d42020; + --background-modifier-error-hover: #b01515; +} + +.theme-light button.mod-warning { + --background-modifier-error: #f23f3f; + --background-modifier-error-hover: #d72020; +} + +/* Code syntax highlighting */ +code[class*='language-'], pre[class*='language-'] { + text-align: left !important; + white-space: pre !important; + word-spacing: normal !important; + word-break: normal !important; + word-wrap: normal !important; + line-height: 1.5 !important; + tab-size: 4 !important; + hyphens: none !important; +} + +pre[class*='language-'] { + /* Code blocks */ + padding: 1em !important; + margin: .5em 0 !important; + overflow: auto !important; +} + +:not(pre)>code[class*='language-'] { + /* Inline code */ + padding: .1em !important; + border-radius: .3em !important; + white-space: normal !important; +} + +.token.comment, .token.prolog, .token.doctype, .token.cdata, +.HyperMD-codeblock .cm-comment { + color: var(--gray-1) !important; +} + +.token.punctuation, +.HyperMD-codeblock .cm-hmd-codeblock, .HyperMD-codeblock .cm-bracket { + color: var(--gray-2) !important; +} + +.token.selector, .token.tag, +.HyperMD-codeblock .cm-tag, .HyperMD-codeblock .cm-property, .HyperMD-codeblock .cm-meta, .HyperMD-codeblock .cm-qualifier, .HyperMD-codeblock .cm-header, .HyperMD-codeblock .cm-quote, .HyperMD-codeblock .cm-hr, .HyperMD-codeblock .cm-link { + color: var(--red) !important; +} + +.token.property, .token.boolean, .token.number, .token.constant, .token.symbol, .token.attr-name, .token.deleted, +.HyperMD-codeblock .cm-number, .HyperMD-codeblock .cm-atom, .HyperMD-codeblock .cm-attribute { + color: var(--orange) !important; +} + +.token.string, .token.char, .token.attr-value, .token.builtin, .token.inserted, +.HyperMD-codeblock .cm-string, .HyperMD-codeblock .cm-builtin { + color: var(--green) !important; +} + +.token.operator, .token.entity, .token.url, .language-css .token.string, .style .token.string, +.HyperMD-codeblock .cm-string-2, .HyperMD-codeblock .cm-operator { + color: var(--aqua) !important; +} + +.token.atrule, .token.keyword, +.HyperMD-codeblock .cm-keyword { + color: var(--purple) !important; +} + +.token.function, .token.macro.property, +.HyperMD-codeblock .cm-def, .HyperMD-codeblock .cm-variable { + color: var(--blue) !important; +} + +.token.class-name, +.HyperMD-codeblock .cm-variable-2, .HyperMD-codeblock .cm-variable-3 { + color: var(--yellow) !important; +} + +.token.regex, .token.important, .token.variable { + color: var(--purple) !important; +} + +.token.important, .token.bold { + font-weight: bold !important; +} + +.token.italic { + font-style: italic !important; +} + +.token.entity { + cursor: help !important; +} \ No newline at end of file diff --git a/.obsidian/themes/Blue Topaz/manifest.json b/.obsidian/themes/Blue Topaz/manifest.json new file mode 100644 index 0000000..7d25ad0 --- /dev/null +++ b/.obsidian/themes/Blue Topaz/manifest.json @@ -0,0 +1,7 @@ +{ + "name": "Blue Topaz", + "version": "2023112601", + "minAppVersion": "1.0.0", + "author": "WhyI & Pkmer", + "authorUrl": "https://github.com/whyt-byte" +} diff --git a/.obsidian/themes/Blue Topaz/theme.css b/.obsidian/themes/Blue Topaz/theme.css new file mode 100644 index 0000000..a91aac4 --- /dev/null +++ b/.obsidian/themes/Blue Topaz/theme.css @@ -0,0 +1,28558 @@ +/* + + +If you want to distribute the whole or parts of the above codes, please copy & paste the following sentences: + +Partial style(s) is(are) sourced or adapted from Blue Topaz (https://github.com/PKM-er/Blue-Topaz_Obsidian-css), and I would like to express my appreciation to WhyI (https://github.com/whyt-byte) and pkmer.cn (https://pkmer.cn). + + +*/ + +/*蓝色托帕石,适合Obsidian v1.2.8。uid [20231115] flying fly flies制作。如果喜欢,可以在Github里给我星星 https://github.com/whyt-byte */ +/*Blue Topaz for Obsidian v1.2.8, uid [20231115] created by flying fly flies. Feel free to use, share and modify. If you like the theme, please star me on GitHub https://github.com/whyt-byte */ + +/* +MIT License + +Copyright (c) 2020 whyt-byte + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + + +/* 致谢 Credits: +thanks pkmer.cn +Many thanks to @Cuman +@LillianWho @成雙酱 @嘴上云 @Klaas @Thinkbond @Rainbell129(AKA Lavi) @awyugan @GeoffreyOuO (WooYoo~~~) @锋华 @CZ-15/YZ-10 */ + +/* @settings +name: 🥑Blue Topaz Theme +id: blue-topaz-theme +settings: + - + id: attension + title: Attention!Due to obsidian's policy of not being able to use online or local vault images, all configuration about images is no longer available.Now that the BT theme has become very expensive to maintain with obsidian ontology changes and policy implications, the theme will be streamlined and no longer offer diverse configuration options. + title.zh: 注意!由于obsidian的政策,不能使用在线或本地库里的图片,所有图片配置设置均已失效。如今BT主题随着obsidian本体变动和政策影响维护成本变得非常高,后续将精简主题并不再提供多样化的配置选项。 + type: heading + level: 1 + collapsed: false + - + id: background-settings + title: 1. General settings + title.zh: 1. 整体性设置 + type: heading + level: 1 + collapsed: false + - + id: color-settings + title: 1.1 Color scheme + title.zh: 1.1 整体配色 + type: heading + level: 2 + collapsed: true + - + id: color-scheme-options + title: Color palette (from Topaz Community) + title.zh: 整体配色选择 (由Topaz社区贡献) + type: class-select + allowEmpty: false + default: color-scheme-options-default + options: + - + label: Default + value: color-scheme-options-default + - + label: Avocado + value: color-scheme-options-avocado-topaz + - + label: Monochrome + value: color-scheme-options-monochrome-topaz + - + label: Pink + value: color-scheme-options-pink-topaz + - + label: Topaz-Nord + value: color-scheme-options-topaz-nord + - + label: =↓😺 Created by Topaz Community 🐵↓= + value: + - + label: Flamingo (@Mouth on Cloud & @Rainbell) + value: color-scheme-options-flamingo + - + label: Honey milk (@LillianWho) + value: color-scheme-options-honey-milk-topaz + - + label: 榛子巧克力 Hazelnut chocolate (@LillianWho) + value: color-scheme-options-chocolate-topaz + - + label: Lilac (@awyugan) + value: color-scheme-options-lilac + - + label: Autumn (@LillianWho) + value: color-scheme-options-autumn-topaz + - + label: 魔方 Rubik's Cube (@LillianWho) + value: color-scheme-options-lillimon-topaz + - + label: Simplicity (@Cuman) + value: color-scheme-options-simplicity-topaz + - + id: disable-auto-hide-header + title: Disable auto hide header + title.zh: 禁用自动隐藏头部 + type: class-toggle + default: false + - + id: color-magic + title: Color of Rubik's cube palette + title.zh: 魔方配色 + description.zh: 当整体配色为【魔方】时生效 + type: heading + level: 3 + collapsed: true + - + id: magic-main-color + title: Main color + title.zh: 主题色 + description.zh: 主题色主要作用于标题,字体,列表等主色调,建议用对比度强,不易疲劳的色系。如果想单独调整个别类目请在2.1中继续细调。 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: magic-low-color + title: Low contrast color + title.zh: 浅色 + description.zh: 浅色主要作用于各类触发背景底色,建议用不影响阅读的背景色系。 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: magic-deep-color + title: Deep color + title.zh: 深色 + description.zh: 深色主要作用于主题强调色系,用在各种控件,提示等使用,建议用浅色相关的醒目色系。 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: background-settings + title: 1.2 Background images + title.zh: 1.2 背景设置 + type: heading + level: 2 + collapsed: true + - + id: background-settings-workplace + title: 1.2.1 Workplace background image + title.zh: 1.2.1 工作页面背景 + type: heading + level: 3 + collapsed: true + - + id: background-settings-workplace-background-image + title: Activate image background + title.zh: 开启背景 + type: class-toggle + default: false + addCommand: true + - + id: bt-background-split-container + title: Side split container background color + title.zh: 侧边分栏背景颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: background-settings-workplace-theme-light + title: Light mode + type: class-select + allowEmpty: false + default: background-settings-workplace-theme-light-leaf + options: + - + label: Blue Mountain + value: background-settings-workplace-theme-light-blue-mountain + - + label: In the sky + value: background-settings-workplace-theme-light-in-the-sky + - + label: Leaf + value: background-settings-workplace-theme-light-leaf + - + label: Random + value: background-settings-workplace-random-light + - + label: Waves + value: background-settings-workplace-waves-light + - + label: Animating waves + value: background-settings-workplace-waves2-light + - + label: Custom + value: background-settings-workplace-theme-light-custom-option + - + id: background-settings-workplace-theme-light-custom + title: Custom theme light (url) + description: Customise the background image. Use the format in the Default below for an Online image. + description.zh: 需在上方选项种选择Custom,以自定义背景。使用Default内格式设置在线图片。 + type: variable-text + default: url("https://") + - + id: background-settings-workplace-theme-dark + title: Dark mode + type: class-select + allowEmpty: false + default: background-settings-workplace-theme-dark-in-the-sky + options: + - + label: Night sky + value: background-settings-workplace-theme-dark-night-sky + - + label: Dark sky + value: background-settings-workplace-theme-dark-dark-sky + - + label: In the sky + value: background-settings-workplace-theme-dark-in-the-sky + - + label: Blue gas + value: background-settings-workplace-theme-dark-blue-gas + - + label: Jellyfish 1 + value: background-settings-workplace-theme-dark-jellyfish-1 + - + label: Jellyfish 2 + value: background-settings-workplace-theme-dark-jellyfish-2 + - + label: Hyacinth macaw + value: background-settings-workplace-theme-dark-hyacinth-macaw + - + label: Waves + value: background-settings-workplace-waves + - + label: Animating waves + value: background-settings-workplace-waves2 + - + label: Random + value: background-settings-workplace-random-dark + - + label: Custom + value: background-settings-workplace-theme-dark-custom-option + - + id: background-settings-workplace-theme-dark-custom + title: Custom theme dark (url) + description: Customise the background image. Use the format in the Default below for an Online image. + description.zh: 需在上方选项种选择Custom,以自定义背景。使用Default内格式设置网络图片。 + type: variable-text + default: url("https://") + - + id: blur-depth + title: Blur radius + title.zh: 模糊程度 + description: To adjust the radius of blur + description.zh: 调整背景壁纸模糊程度 + type: variable-number-slider + default: 10 + format: px + min: 0 + max: 30 + step: 1 + - + id: brightness-4-bg + title: Brightness of image + title.zh: 图片亮度 + description: To adjust the brightness + description.zh: 调整背景壁纸亮度 + type: variable-number-slider + default: 0.9 + min: 0.3 + max: 1.5 + step: 0.1 + - + id: saturate-4-bg + title: Saturation of image + title.zh: 图片饱和度 + description: To adjust the saturation + description.zh: 调整背景壁纸饱和度 + type: variable-number-slider + default: 1 + min: 0 + max: 2 + step: 0.1 + - + id: background-waves-color + title: Waves color + title.zh: 波浪背景颜色 + description.zh: 当背景色选择为waves时起作用。 + type: variable-themed-color + opacity: true + format: hex + default-light: '#4A75DB8C' + default-dark: '#4A75DB8C' + - + id: background-settings-workplace-random + title: Random background + title.zh: 随机背景 + description: Images will be refreshed when Obsidian launches; Internet required + description.zh: 图片在Obsidian打开时刷新;需要联网 + type: class-toggle + default: false + - + id: background-settings-markdown-page + title: 1.2.2 Note page background image + title.zh: 1.2.2 笔记背景 + type: heading + level: 3 + collapsed: true + - + id: background-image-settings-switch + title: Toggle note background image + title.zh: 开启笔记背景 + type: class-toggle + default: false + addCommand: true + - + id: toggle-nonoverlapping-bg + title: Activate non-overlapping note background when toggling workplace background + title.zh: 笔记背景和工作页面背景不重叠 + type: class-toggle + default: false + - + id: background-image-settings-markdown-page-options + title: Choose image set + title.zh: 选择背景 + type: class-select + allowEmpty: false + default: background-image-settings-markdown-page-default + options: + - + label: Default + value: background-image-settings-markdown-page-default + - + label: Sea and Sky + value: background-image-settings-markdown-page-sea-and-sky + - + label: Four Seasons + value: background-image-settings-markdown-page-four-seasons + - + label: Woof Meow + value: background-image-settings-markdown-page-woof-meow + - + label: White and Black + value: background-image-settings-markdown-page-white-and-black + - + label: Kawaii + value: background-image-settings-markdown-page-kawaii + - + label: Transparent + value: background-image-settings-markdown-page-transparent + - + label: Custom + value: background-image-settings-markdown-page-custom + - + id: bg-markdown-page-opacity-cp + title: Opacity + title.zh: 笔记背景透明度 + type: variable-number-slider + default: 0.25 + min: 0 + max: 1 + step: 0.05 + - + id: custom-markdown-page-background-color + title: custom markdown page background color + title.zh: 自定义笔记背景颜色 + description.zh: 当背景色选择为custom时起作用。 + type: variable-themed-color + opacity: true + format: hex + default-light: '#a39b8f' + default-dark: '#000414' + - + id: background-markdown-page-theme-light-custom + title: Custom image (Light mode) + description: Due to obsidian's policy of not being able to use online images, this configuration is no longer available. + description.zh: 由于obsidian的政策,不能使用在线图片,此配置已失效。 + type: variable-text + default: + - + id: background-markdown-page-theme-dark-custom + title: Custom image (Dark mode) + description: Due to obsidian's policy of not being able to use online images, this configuration is no longer available. + description.zh: 由于obsidian的政策,不能使用在线图片,此配置已失效。 + type: variable-text + default: + - + id: background-image-settings-markdown-page-random + title: Random background + title.zh: 随机背景 + description: Due to obsidian's policy of not being able to use online images, this configuration is no longer available. + description.zh: 由于obsidian的政策,不能使用在线图片,此配置已失效。 + type: class-toggle + default: false + - + id: background-image-settings-markdown-page-random-options + title: Random image with a certain color + title.zh: 由于obsidian的政策,不能使用在线图片,此配置已失效。 + type: class-select + allowEmpty: false + default: background-image-settings-markdown-page-random-default + options: + - + label: None + value: background-image-settings-markdown-page-random-default + - + id: background-notebook-liked-switch + title: Toggle notebook-liked background + title.zh: 开启类笔记背景 + type: class-toggle + default: false + - + id: notebook-liked-markdown-page-options + title: Notebook-liked background + title.zh: 类笔记背景 + type: class-select + allowEmpty: false + default: notebook-liked-markdown-page-grid-notebook-1 + options: + - + label: Grid notebook 1 (@CZ-15/YZ-10) + value: notebook-liked-markdown-page-grid-notebook-1 + - + label: Grid notebook 2 + value: notebook-liked-markdown-page-grid-notebook-2 + - + label: Dotted notebook 1 + value: notebook-liked-markdown-page-dotted-notebook-1 + - + label: Dotted notebook 2 + value: notebook-liked-markdown-page-dotted-notebook-2 + - + label: Stripe notebook 1 + value: notebook-liked-markdown-page-stripe-notebook-1 + - + label: Stripe notebook 2 + value: notebook-liked-markdown-page-stripe-notebook-2 + - + id: toggle-fixed-pattern + title: Toggle fixed pattern + title.zh: 固定背景 + type: class-toggle + default: false + - + id: notebook-liked-background-settings + title: 1.2.2.1 Notebook-liked background options + title.zh: 1.2.2.1 类笔记样式背景设置 + type: heading + level: 4 + collapsed: true + - + id: toggle-split-note-background + title: Toggle background of split pane + title.zh: 取消侧边栏类笔记背景 + type: class-toggle + default: false + - + id: bg-color-notebook + title: Notebook background color + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: grid-notebook-line-color-1 + title: Grid notebook line color + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: grid-notebook-line-color-2 + title: Grid notebook line color for 'Grid 2' + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: dotted-notebook-dot-color + title: Dotted notebook dot color + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: stripe-notebook-stripe-color + title: Stripe notebook stripe color + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: background-settings-command-palette + title: 1.2.3 Images of command palette + title.zh: 1.2.3 命令面板背景 + type: heading + level: 3 + collapsed: true + - + id: background-image-settings-command-palette-switch + title: Toggle images of command palette + title.zh: 开启命令面板背景 + type: class-toggle + default: false + - + id: background-image-settings-command-palette-same-as-workplace + title: Same background as workplace's + title.zh: 与工作页面背景保持一致 + type: class-toggle + default: false + - + id: background-image-settings-command-palette-custom + title: Custom background image + title.zh: 自定义图片 + type: class-toggle + default: false + - + id: background-command-palette-theme-light-custom + title: Custom theme (light, url) + description: Due to obsidian's policy of not being able to use online images, this configuration is no longer available. + description.zh: 由于obsidian的政策,不能使用在线图片,此配置已失效。 + type: variable-text + default: + - + id: background-command-palette-theme-dark-custom + title: Custom theme (dark, url) + description: Due to obsidian's policy of not being able to use online images, this configuration is no longer available. + description.zh: 由于obsidian的政策,不能使用在线图片,此配置已失效。 + type: variable-text + default: + - + id: blur-depth-cp + title: Blur radius + title.zh: 模糊程度 + description: To adjust the radius of blur + description.zh: 调整背景壁纸模糊程度 + type: variable-number-slider + default: 10 + format: px + min: 0 + max: 30 + step: 1 + - + id: brightness-4-bg-cp + title: Brightness + title.zh: 图片亮度 + description: To adjust the brightness + description.zh: 调整背景壁纸亮度 + type: variable-number-slider + default: 0.9 + min: 0.3 + max: 1.5 + step: 0.1 + - + id: saturate-4-bg-cp + title: Saturation + title.zh: 图片饱和度 + description: To adjust the saturation + description.zh: 调整背景壁纸饱和度 + type: variable-number-slider + default: 1 + min: 0 + max: 2 + step: 0.1 + - + id: opacity-cp + title: Opacity + title.zh: 透明度 + type: variable-number-slider + default: 0.25 + min: 0 + max: 1 + step: 0.05 + - + id: background-settings-markdown-page + title: 1.2.4 File explorer background + title.zh: 1.2.4 文件栏背景 + type: heading + level: 3 + collapsed: true + - + id: toggle-bg-panel-page + title: Toggle background image + title.zh: 激活文件栏背景 + type: class-toggle + default: false + - + id: bg-panel-page-opacity-cp + title: Opacity + title.zh: 透明度 + type: variable-number-slider + default: 0.25 + min: 0 + max: 1 + step: 0.05 + - + id: bg-panel-page-option + title: Image picking (Light mode) + title.zh: 图片选择 (Light mode) + type: class-select + allowEmpty: false + default: panel-page-bg-theme-ligt-curve + options: + - + label: Curve + value: panel-page-bg-theme-light-curve + - + label: Wall + value: panel-page-bg-theme-light-wall + - + label: Brick + value: panel-page-bg-theme-light-brick + - + label: Cloud + value: panel-page-bg-theme-light-cloud + - + label: Random + value: panel-page-bg-theme-light-random + - + label: Custom + value: panel-page-bg-theme-light-custom + - + id: background-panel-page-theme-light-custom + title: Custom image (Light mode) + description: Due to obsidian's policy of not being able to use online images, this configuration is no longer available. + description.zh: 由于obsidian的政策,不能使用在线图片,此配置已失效。 + type: variable-text + default: + - + id: bg-panel-page-option-dark + title: Image picking (Dark mode) + title.zh: 图片选择 (Dark mode) + type: class-select + allowEmpty: false + default: panel-page-bg-theme-dark-sea + options: + - + label: Sea + value: panel-page-bg-theme-dark-sea + - + label: Plant + value: panel-page-bg-theme-dark-plant + - + label: Curves + value: panel-page-bg-theme-dark-curves + - + label: Bulb + value: panel-page-bg-theme-dark-bulb + - + label: Random + value: panel-page-bg-theme-dark-random + - + label: Custom + value: panel-page-bg-theme-dark-custom + - + id: background-panel-page-theme-dark-custom + title: Custom image (Dark mode) + description: Due to obsidian's policy of not being able to use online images, this configuration is no longer available. + description.zh: 由于obsidian的政策,不能使用在线图片,此配置已失效。 + type: variable-text + default: + - + id: layout-settings + title: 1.3 Layout + title.zh: 1.3 界面布局样式 + type: heading + level: 2 + collapsed: true + - + id: bt-colorful-titlebar + title: Colorful titlebar + title.zh: 开启顶部多彩标题栏样式 + type: class-toggle + default: false + - + id: background-titlebar-inner + title: Titlebar background color + title.zh: 标题栏背景颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: left-ribbon-style + title: Left ribbon styles + title.zh: 左侧边栏样式选择 + type: class-select + allowEmpty: false + default: default-left-ribbon-style + options: + - + label: Fixed + value: default-left-ribbon-style + - + label: Hide to left + value: hide-left-ribbon + - + label: Hide to the left retention drawer + value: hide-left-ribbon-retention-drawer + - + label: Bubble + value: bt-bubble-ribbon + - + label: Bubble, hide to left + value: bt-bubble-ribbon-hide-left + - + id: ribbon-background + title: Left ribbon color + title.zh: 左侧边栏颜色 + type: variable-themed-color + opacity: false + format: hex + default-light: '#' + default-dark: '#' + - + id: ribbon-background-collapsed + title: Left ribbon color (collapsed) + title.zh: 左侧边栏颜色(关闭时) + type: variable-themed-color + opacity: false + format: hex + default-light: '#' + default-dark: '#' + - + id: hide-vault-name + title: Hide vault name + title.zh: 隐藏侧边栏中的库名称 + type: class-toggle + default: false + - + id: search-bar-style-option + title: Search bar style + title.zh: 文件内搜索栏位置 + type: class-select + allowEmpty: false + default: default-search-bar + options: + - + label: Default + value: default-search-bar + - + label: Bottom + value: bt-search-bar-bottom + - + id: bt-status-on + title: Fullwidth status bar + title.zh: 开启全宽状态栏 + type: class-toggle + default: false + - + id: scrollbar-style-option + title: Scrollbar style + title.zh: 滚动条样式 + type: class-select + allowEmpty: false + default: default-scrollbar + options: + - + label: Default + value: default-scrollbar + - + label: Hovering (adapted from @subframe7536's css snippet) + value: hover-scrollbars + - + label: Remove Scrollbar + value: remove-scrollbars + - + label: Obsidian default + value: native-scrollbars + - + id: scrollbar-thumb-bg + title: Scrollbar thumb background + title.zh: 滚动条滑块颜色 + type: variable-themed-color + opacity: false + format: hex + default-light: '#' + default-dark: '#' + - + id: scrollbar-active-thumb-bg + title: Scrollbar thumb background (Active) + title.zh: 滚动条滑块颜色 (选择时) + type: variable-themed-color + opacity: false + format: hex + default-light: '#' + default-dark: '#' + - + id: view-button-front + title: The view status button is placed in front of the header + title.zh: 视图切换按钮放置在文章标题前面 + type: class-toggle + default: false + - + id: tab-title-bar-position + title: The tab title bar positioned to the left + title.zh: Tab 导航栏位置放置左侧 + type: class-toggle + default: false + - + id: toggle-divider-lines + title: Toggle non-divided-line style + title.zh: 无分割线样式 + type: class-toggle + default: false + - + id: toggle-header-bottom-line + title: Toggle non-divided-line header box + title.zh: 无分割线文件标题框 + type: class-toggle + default: false + - + id: layout-style-options + title: Layout styles + title.zh: 界面布局样式选择 + type: class-select + allowEmpty: false + default: layout-style-options-default + options: + - + label: Default + value: layout-style-options-default + - + label: Rectangle + value: layout-style-options-rectangle + - + label: Asymmetric Style of Split Panes + value: asymmetric-split-left + - + label: Bubble + value: bt-bubble-layout + - + id: bt-bubble-settings + title: 1.3.1 Bubble settings + title.zh: 1.3.1 Bubble设置 + type: heading + level: 3 + collapsed: false + - + id: bt-bubble-not-file-tree + title: Enable card format for file browser + type: class-toggle + - + id: bt-bubble-layout-hide-borders + title: Remove borders of bubbles + type: class-toggle + - + id: bt-bubble-buttons + title: Toggle bubble buttons + type: class-toggle + - + id: bt-bubble-layout-padding + title: Bubble padding + type: variable-text + default: 8px + - + id: bt-bubble-radius + title: Bubble radius + type: variable-text + default: 15px + - + id: background-settings + title: 2. Detail settings + title.zh: 2. 细节设置 + type: heading + level: 1 + collapsed: false + - + id: color-settings + title: 2.1 Color settings + title.zh: 2.1 颜色设置 + type: heading + level: 2 + collapsed: true + - + id: text-normal + title: Main text color + type: variable-themed-color + opacity: false + format: hex + default-light: '#' + default-dark: '#' + - + id: background-color-settings + title: 2.1.1 Background colors + title.zh: 2.1.1 背景颜色设置 + type: heading + level: 3 + collapsed: true + - + id: background-primary-bg-4-bt + title: Background primary + description: background-primary-bg-4-bt + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: background-primary-alt-bg-4-bt + title: Background primary (alt) + description: background-primary-alt-bg-4-bt + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: background-secondary-bg-4-bt + title: Background secondary + description: background-secondary-bg-4-bt + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: background-secondary-alt-bg-4-bt + title: Background secondary (alt) + description: background-secondary-alt-bg-4-bt + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: background-modifier-border + title: Background modifier border + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: accent-color-settings + title: 2.1.2 Theme colors + title.zh: 2.1.2 主题色设置 + type: heading + level: 3 + collapsed: true + - + id: interactive-accent + title: Theme color + title.zh: 主题色 + description: interactive-accent + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: other-color-settings + title: 2.1.3 Other colors + title.zh: 2.1.3 其他颜色 + type: heading + level: 3 + collapsed: true + - + id: accent-strong + title: Bold type color + title.zh: 加粗颜色 + description: --accent-strong + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: accent-em + title: Italic type color + title.zh: 斜体颜色 + description: --accent-em + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: strong-em-color-1 + title: Bold italic color 1 + title.zh: 加粗斜体颜色 1 + description: --strong-em-color-1 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: strong-em-color-2 + title: Bold italic color 2 + title.zh: 加粗斜体颜色 2 + description: --strong-em-color-2 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: mjx-inline-math-color + title: Color of mathematical expressions (inline $x=0$) + title.zh: 数学表达式颜色(行内 $x=0$) + type: variable-themed-color + description: --mjx-inline-math-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: mjx-math-color + title: Color of mathematical expressions ($$x=0$$) + title.zh: 数学表达式颜色($$x=0$$) + description: --mjx-math-color + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: background-leaf-resize-handle + title: Color of leaf resize handle + title.zh: 页面大小调整条颜色 + description: --background-leaf-resize-handle + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: mjx-inline-math-color + title: Color of mathematical expressions (inline $x=0$) + title.zh: 数学表达式颜色(行内 $x=0$) + description: --mjx-inline-math-color + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: search-result-file-matched-bg + title: File search result highlight color + title.zh: 文件搜索结果高亮 + description: --search-result-file-matched-bg + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: text-search-highlight-bg + title: Text search result highlight color + title.zh: 文本搜索结果高亮 + description: --text-search-highlight-bg + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: text-selection + title: Text selection background + title.zh: 鼠标划选文字背景 + description: --text-selection + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: remove-selectionbackground + title: Toggle selection background (Non-text part) + title.zh: 还原鼠标划选时非文字部分背景颜色 + type: class-toggle + default: false + - + id: status-bar-bg + title: Status bar background + title.zh: 状态栏颜色 + description: --status-bar-bg + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: status-bar-text-color + title: Status bar text color + title.zh: 状态栏文字颜色 + description: --status-bar-text-color + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: icon-color-focused + title: Focused icon color + title.zh: 激活按钮的图标颜色 + description: --icon-color-focused + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: divider-color + title: Divider color + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: tab-outline-color + title: Tab outline color + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: graph-view-color-settings + title: 2.1.4 Graph-view colors + title.zh: 2.1.4 图谱颜色 + type: heading + level: 3 + collapsed: true + - + id: graph-canvas-bg + title: Graph-view canvas background + title.zh: 图谱背景颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: graph-text-color + title: Graph-view text color + title.zh: 图谱文字颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: graph-line + title: Graph-view line color + title.zh: 图谱线条颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: graph-line-fill-highlight + title: Graph-view line highlight color (Hovering) + title.zh: 图谱线条激活颜色(鼠标悬浮) + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: graph-arrow + title: Graph-view arrow color + title.zh: 图谱箭头颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: graph-circle-outline + title: Graph-view circle outline color + title.zh: 图谱圆点轮廓颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: graph-circle + title: Graph-view normal circle color + title.zh: 图谱圆点颜色(默认) + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: graph-tag + title: Graph-view circle color (Tag) + title.zh: 图谱圆点颜色(标签) + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: graph-unresolved + title: Graph-view circle color (Unresolved) + title.zh: 图谱圆点颜色(未创建) + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: graph-attach + title: Graph-view circle color (Attachment) + title.zh: 图谱圆点颜色(附件) + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: graph-control-bg + title: Graph-view settings background color + title.zh: 图谱设置面板背景颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: graph-circle-fill-highlight + title: Graph-view circle highlight color (Hovering) + title.zh: 图谱圆点激活颜色(鼠标悬浮) + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: font-settings + title: 2.2 Typography + title.zh: 2.2 排版 + type: heading + level: 2 + collapsed: true + - + id: font-settings + title: 2.2.1 Font family + title.zh: 2.2.1 字体设置 + type: heading + level: 3 + collapsed: true + - + id: font-family-change-to-default + title: Use Obsidian default font family + title.zh: 使用Obsidian默认字体 + type: class-toggle + default: false + - + id: font-text-theme + title: Main font + title.zh: 主体字体 + description: Fonts except from the code texts + description.zh: 除代码框外字体 + type: variable-text + default: "Bookerly,'Inter', 'Segoe UI','霞鹜文楷 GB', 'LXGW WenKai', 'Segoe UI Emoji',var(--font-interface)" + - + id: font-family-folder-file-title + title: Folder & file title + title.zh: 文件栏字体 + type: variable-text + default: "Arlrdbd, 'Source Han Sans', 'Noto Sans CJK', 'Source Sans Pro', 'Segoe UI Emoji', sans-serif" + - + id: font-monospace-theme + title: Codebox + title.zh: 代码框字体 + type: variable-text + default: "'JetBrains Mono', Consolas, Monaco, '等距更纱黑体 SC', 'Source Han Mono', 'Microsoft Yahei Mono', 'Segoe UI Emoji', 'Microsoft YaHei', 'Source Code Pro', monospace" + - + id: font-family-inline-code + title: Inline code + title.zh: 行内代码字体 + type: variable-text + default: var(--font-monospace-override), var(--font-monospace-theme) + - + id: font-family-tag + title: Tag + title.zh: 标签字体 + type: variable-text + default: "Bookerly, 'Microsoft YaHei', STzhongsong, STSong, 'Segoe UI Emoji', Serif" + - + id: font-family-strong + title: Bold text + title.zh: 加粗文字字体 + type: variable-text + default: "Bookerly,'Inter', 'Segoe UI', 'LXGW WenKai Screen', 'LXGW WenKai Screen R', '霞鹜文楷 GB', 'LXGW WenKai', 'Segoe UI Emoji', var(--font-interface)" + - + id: font-weight-strong + title: Bold text font weight + title.zh: 加粗文字样式 + description: type 'light, normal, bold, bolder; or 100-900' + type: variable-text + default: bold + - + id: font-family-em + title: Italic text + title.zh: 斜体文字字体 + type: variable-text + default: "var(--font-text-theme)" + - + id: font-style-em + title: Italic text style + title.zh: 斜体文字样式 + description: typy normal or italic + type: variable-text + default: italic + - + id: font-family-vault + title: Vault name + title.zh: 库名字体 + type: variable-text + default: "'Lucida Handwriting', 'Segoe UI Emoji'" + - + id: font-size-settings + title: 2.2.2 Font size + title.zh: 2.2.2 字体大小 + type: heading + level: 3 + collapsed: true + - + id: font-size-vault-name + title: Vault name + title.zh: 库名称大小 + type: variable-text + default: 0.95em + - + id: font-size-file-header-title + title: File header + title.zh: 文件抬头标题 + type: variable-text + default: 0.9375em + - + id: font-size-folder-and-file + title: Folder and file + title.zh: 左侧边栏文件字体大小 + type: variable-text + default: 0.85em + - + id: font-size-outline + title: Outline font size + title.zh: 大纲字体大小 + type: variable-text + default: 13px + - + id: font-size-code + title: Codeblock + title.zh: 代码框字体大小 + type: variable-text + default: 1em + - + id: font-size-latex + title: Mathematical expressions + title.zh: 数学公式字体大小 + type: variable-text + default: 1em + - + id: header-settings + title: 2.2.3 Headers + title.zh: 2.2.3 文内标题(H1-H6) + type: heading + level: 3 + collapsed: true + - + id: clutter-free-headings + title: Clutter free headings + title.zh: 编辑状态使用H1 H2 替代「#」(显示标题级别) + description: Adapted from https://github.com/deathau/obsidian-snippets/blob/main/clutter-free-headings.css + type: class-toggle + default: false + - + id: funny-header-anim + title: Funny header animation in live preview + title.zh: 编辑模式标题动画 + description: Adapted from https://cdn.discordapp.com/attachments/702656734631821413/1007258862606352424/FunnyHeaderAnimLP.css @sailKite + type: class-toggle + default: false + - + id: remove-heading-indicator + title: Remove H1-H6 Indicators before headings when hovering + title.zh: 移除鼠标悬浮时标题前的H1-H6 + type: class-toggle + default: false + - + id: retain-header-color + title: Retain header color + title.zh: 保留标题颜色 + description: Retain original color of headers when using italic, bold or bold italic within headers + type: class-toggle + default: false + - + id: h1-settings + title: 2.2.3.1 Header 1 + type: heading + level: 4 + collapsed: true + - + id: print-h1-color + title: Header 1 color + title.zh: 标题 1 颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: h1-size + title: Header 1 size + title.zh: 标题 1 字体大小 + type: variable-text + default: 1.5625em + - + id: h1-font + title: Header 1 font family + title.zh: 标题 1 字体 + type: variable-text + default: "" + - + id: h1-toggle-underline + title: Toggle h1 underline + title.zh: 开启h1下划线 + type: class-toggle + default: false + - + id: h1-underline-width + title: Header 1 underline width + title.zh: 下划线宽度 + type: variable-text + default: 2px + - + id: h1-underline-style + title: Header 1 underline style + title.zh: 标题 1 下划线样式 + description: solid, double, dotted, dashed, groove, ridge + type: variable-text + default: solid + - + id: h1-underline-color + title: Header 1 underline color + title.zh: 标题 1 下划线颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: h1-toggle-short-underline + title: Toggle h1 underline (Shorter) + title.zh: 开启h1下划线 (短线) + type: class-toggle + default: false + - + id: header-1-background + title: Toggle h1 Background + title.zh: 开启h1背景颜色 + type: class-toggle + default: false + - + id: h1-bg-color + title: h1 bg + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: h1-weight + title: h1 font weight + type: variable-text + default: bold + - + id: h1-line-height + title: Header 1 line height + title.zh: 标题 1 行高 + type: variable-number + default: 1.2 + - + id: h1-text-align-settings + title: h1 Text-align + title.zh: h1 位置 + type: class-select + allowEmpty: false + default: h1-text-align-start + options: + - + label: Default (Left/Start) + value: h1-text-align-start + - + label: Center + value: h1-text-align-center + - + label: Right/End + value: h1-text-align-end + - + id: h2-settings + title: 2.2.3.2 Header 2 + type: heading + level: 4 + collapsed: true + - + id: print-h2-color + title: Header 2 color + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: h2-size + title: Header 2 size + title.zh: 标题 2 字体大小 + type: variable-text + default: 1.4375em + - + id: h2-font + title: Header 2 font family + title.zh: 标题 2 字体 + type: variable-text + default: "" + - + id: h2-toggle-underline + title: toggle h2 underline + title.zh: 开启h2下划线 + type: class-toggle + default: false + - + id: h2-underline-width + title: Header 2 underline width + title.zh: 下划线宽度 + type: variable-text + default: 1px + - + id: h2-underline-style + title: Header 2 underline style + title.zh: 标题 2 下划线样式 + description: solid, double, dotted, dashed, groove, ridge + type: variable-text + default: solid + - + id: h2-underline-color + title: Header 2 underline color + title.zh: 标题 2 下划线颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: h2-toggle-short-underline + title: Toggle h2 underline (Shorter) + title.zh: 开启h2下划线 (短线) + type: class-toggle + default: false + - + id: header-2-background + title: Toggle h2 background + title.zh: 开启h2背景颜色 + type: class-toggle + default: false + - + id: h2-bg-color + title: h2 background color + title.zh: 标题 2 背景颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: h2-weight + title: h2 font weight + title.zh: 标题 2 字重 + type: variable-text + default: bold + - + id: h2-text-align-settings + title: h2 text-align + title.zh: h2 位置 + type: class-select + allowEmpty: false + default: h2-text-align-start + options: + - + label: Default (Left/Start) + value: h2-text-align-start + - + label: Center + value: h2-text-align-center + - + label: Right/End + value: h2-text-align-end + - + id: h3-settings + title: 2.2.3.3 Header 3 + type: heading + level: 4 + collapsed: true + - + id: print-h3-color + title: Header 3 color + title.zh: 标题 3 颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: h3-size + title: Header 3 size + title.zh: 标题 3 字体大小 + type: variable-text + default: 1.3125em + - + id: h3-font + title: Header 3 font family + title.zh: 标题 3 字体 + type: variable-text + default: "" + - + id: h3-toggle-underline + title: toggle h3 underline + title.zh: 开启h3下划线 + type: class-toggle + default: false + - + id: h3-underline-width + title: Header 6 underline width + title.zh: 下划线宽度 + type: variable-text + default: 1px + - + id: h3-underline-style + title: Header 3 underline style + title.zh: 标题 3 下划线样式 + description: solid, double, dotted, dashed, groove, ridge + type: variable-text + default: solid + - + id: h3-underline-color + title: Header 3 underline color + title.zh: 标题 3 下划线颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: h3-toggle-short-underline + title: Toggle h3 underline (Shorter) + title.zh: 开启h3下划线 (短线) + type: class-toggle + default: false + - + id: header-3-background + title: Toggle h3 Background + title.zh: 开启h3背景颜色 + type: class-toggle + default: false + - + id: h3-bg-color + title: h3 background color + title.zh: 标题 3 背景颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: h3-weight + title: h3 font weight + title.zh: 标题 3 字重 + type: variable-text + default: bold + - + id: h3-text-align-settings + title: h3 text-align + title.zh: h3 位置 + type: class-select + allowEmpty: false + default: h3-text-align-start + options: + - + label: Default (Left/Start) + value: h3-text-align-start + - + label: Center + value: h3-text-align-center + - + label: Right/End + value: h3-text-align-end + - + id: h4-settings + title: 2.2.3.4 Header 4 + type: heading + level: 4 + collapsed: true + - + id: print-h4-color + title: Header 4 color + title.zh: 标题 4 颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: h4-size + title: Header 4 size + title.zh: 标题 4 字体大小 + type: variable-text + default: 1.1875em + - + id: h4-font + title: Header 4 font family + title.zh: 标题 4 字体 + type: variable-text + default: "" + - + id: h4-toggle-underline + title: toggle h4 underline + title.zh: 开启H4下划线 + type: class-toggle + default: false + - + id: h4-underline-width + title: Header 4 underline width + title.zh: 下划线宽度 + type: variable-text + default: 1px + - + id: h4-underline-style + title: Header 4 underline style + title.zh: 标题 4 下划线样式 + description: solid, double, dotted, dashed, groove, ridge + type: variable-text + default: solid + - + id: h4-underline-color + title: Header 4 underline color + title.zh: 标题 4 下划线颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: h4-toggle-short-underline + title: Toggle h4 underline (Shorter) + title.zh: 开启h4下划线 (短线) + type: class-toggle + default: false + - + id: header-4-background + title: Toggle h4 Background + title.zh: 开启h4背景颜色 + type: class-toggle + default: false + - + id: h4-bg-color + title: h4 background color + title.zh: 标题 4 背景颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: h4-weight + title: h4 font weight + title.zh: 标题 4 字重 + type: variable-text + default: bold + - + id: h4-text-align-settings + title: h4 text-align + title.zh: h4 位置 + type: class-select + allowEmpty: false + default: h4-text-align-start + options: + - + label: Default (Left/Start) + value: h4-text-align-start + - + label: Center + value: h4-text-align-center + - + label: Right/End + value: h4-text-align-end + - + id: h5-settings + title: 2.2.3.5 Header 5 + type: heading + level: 4 + collapsed: true + - + id: print-h5-color + title: Header 5 color + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: h5-size + title: Header 5 size + title.zh: 标题 5 字体大小 + type: variable-text + default: 1.0625em + - + id: h5-font + title: Header 5 font family + title.zh: 标题 5 字体 + type: variable-text + default: "" + - + id: h5-toggle-underline + title: toggle h5 underline + title.zh: 开启H5下划线 + type: class-toggle + default: false + - + id: h5-underline-width + title: Header 5 underline width + title.zh: 下划线宽度 + type: variable-text + default: 1px + - + id: h5-underline-style + title: Header 5 underline style + title.zh: 标题 5 下划线样式 + description: solid, double, dotted, dashed, groove, ridge + type: variable-text + default: solid + - + id: h5-underline-color + title: Header 5 underline color + title.zh: 标题 5 下划线颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: h5-toggle-short-underline + title: Toggle h5 underline (Shorter) + title.zh: 开启H5下划线 (短线) + type: class-toggle + default: false + - + id: header-5-background + title: Toggle h5 Background + title.zh: 开启h5背景颜色 + type: class-toggle + default: false + - + id: h5-bg-color + title: h5 background color + title.zh: 标题 5 背景颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: h5-weight + title: h5 font weight + title.zh: 标题 5 字重 + type: variable-text + default: bold + - + id: h5-text-align-settings + title: h5 text-align + title.zh: h5 位置 + type: class-select + allowEmpty: false + default: h5-text-align-start + options: + - + label: Default (Left/Start) + value: h5-text-align-start + - + label: Center + value: h5-text-align-center + - + label: Right/End + value: h5-text-align-end + - + id: h6-settings + title: 2.2.3.6 Header 6 + type: heading + level: 4 + collapsed: true + - + id: print-h6-color + title: Header 6 color + title.zh: 标题 6 颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: h6-size + title: Header 6 size + title.zh: 标题 6 字体大小 + type: variable-text + default: 1em + - + id: h6-font + title: Header 6 font family + title.zh: 标题 6 字体 + type: variable-text + default: "" + - + id: h6-toggle-underline + title: Toggle h6 underline + title.zh: 开启h6下划线 + type: class-toggle + default: false + - + id: h6-underline-width + title: Header 6 underline width + title.zh: 下划线宽度 + type: variable-text + default: 1px + - + id: h6-underline-style + title: Header 6 underline style + title.zh: 标题 6 下划线样式 + description: solid, double, dotted, dashed, groove, ridge + type: variable-text + default: solid + - + id: h6-underline-color + title: Header 6 underline color + title.zh: 标题 6 下划线颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: h6-toggle-short-underline + title: Toggle h6 underline (Shorter) + title.zh: 开启h6下划线 (短线) + type: class-toggle + default: false + - + id: header-6-background + title: Toggle h6 background + title.zh: 开启h6背景颜色 + type: class-toggle + default: false + - + id: h6-bg-color + title: h6 background color + title.zh: 标题 6 背景颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: h6-weight + title: h6 font weight + title.zh: 标题 6 字重 + type: variable-text + default: bold + - + id: h6-text-align-settings + title: h6 text-align + title.zh: h6 位置 + type: class-select + allowEmpty: false + default: h6-text-align-start + options: + - + label: Default (Left/Start) + value: h6-text-align-start + - + label: Center + value: h6-text-align-center + - + label: Right/End + value: h6-text-align-end + - + id: other-typography-settings + title: 2.2.4 Other typography settings + title.zh: 2.2.4 其他排版设置 + type: heading + level: 3 + collapsed: true + - + id: file-line-width + title: Line width (in the mode of 'readable line length') + title.zh: 行宽(缩减栏宽模式下) + description: The maximum line width in rem units (1rem = Body font size) + type: variable-number + default: 45 + format: rem + - + id: line-height-main + title: Line height + title.zh: 行间距 + type: variable-number + default: 1.5 + - + id: toggle-paragraph-spacing + title: Toggle paragraph spacing in reading mode + title.zh: 开启阅读模式段间距 + description.zh: 开启后对多个
标记不再生效 + type: class-toggle + default: false + - + id: paragraph-spacing + title: Paragraph spacing + title.zh: 段间距 + type: variable-number-slider + default: 1 + min: 0 + max: 2 + step: 0.1 + - + id: letter-space-main + title: Letter spacing + title.zh: 字间距 + type: variable-number-slider + default: 0 + min: 0 + max: 2 + step: 0.1 + - + id: text-indentation-two-em + title: Slight indentation of the first line + title.zh: 段落首行缩进 + description.zh: 开启全局生效,单独生效只需要在,笔记yaml声明cssclass:indent。阅读模式缩进效果需要安装Contextual Typography插件 + description: Enable global effect, local effect only need to declare "cssclass:indent" in the YAML area. Contextual Typography plugin needs to be installed in Reading mode. + type: class-toggle + default: false + addCommand: true + - + id: justify-align + title: Alignment of both ends + title.zh: 段落两端对齐 + description.zh: 开启全局生效,单独生效只需要在,笔记yaml声明cssclass:text-justify。 + description: Enable global effect, local effect only need to declare "cssclass:text-justify" in the YAML area. + type: class-toggle + default: false + addCommand: true + - + id: reduce-bottom-padding + title: Reduce padding bottom of pages + title.zh: 缩减笔记下方预留空白大小 + type: class-toggle + default: false + - + id: bottom-padding-value + title: Adjust padding bottom of pages + title.zh: 调整笔记下方预留空白大小 + type: variable-text + default: 0em + - + id: toggle-left-aligned-content + title: Toggle Left-aligned note content + title.zh: 开启笔记内容居左 + description.zh: 开启后内容整体居左,而不是默认居中 + description: Left-aligned content when turned on, instead of centered by default + type: class-toggle + default: false + - + id: other-typography-settings + title: 2.2.5 *.md file in split pane + title.zh: 2.2.5 侧面拆分面板中的md文件 + type: heading + level: 3 + collapsed: true + - + id: font-size-split + title: Font size + title.zh: 字体大小 + type: variable-text + default: 0.85em + - + id: line-height-split + title: Line height + title.zh: 行间距 + type: variable-number + default: 1.3 + - + id: default-split-style + title: Toggle default style + title.zh: 切换默认样式 + type: class-toggle + default: false + - + id: inline-title-settings + title: 2.2.6 Inline title + title.zh: 2.2.6 页面内标题 + type: heading + level: 3 + collapsed: true + - + id: inline-title-font + title: Inline title font + title.zh: 页面内文件名字体 + type: variable-text + default: "" + - + id: inline-title-color + title: Inline title color + title.zh: 页面内标题颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: inline-title-size + title: Inline title size + title.zh: 页面内标题字体大小 + type: variable-text + default: 1.5625em + - + id: inline-title-line-height + title: Inline title line height + title.zh: 页面内标题行间距 + type: variable-number + default: 1.2 + - + id: inline-title-weight + title: Inline title weight + title.zh: 页面内标题字重 + type: variable-text + default: "700" + - + id: inline-title-toggle-underline + title: Toggle underline + title.zh: 开启页面内标题下划线 + type: class-toggle + default: false + - + id: inline-title-underline-width + title: Inline title underline width + title.zh: 页面内标题下划线宽度 + type: variable-text + default: 2px + - + id: inline-title-underline-style + title: Inline title underline style + title.zh: 页面内标题下划线样式 + description: solid, double, dotted, dashed, groove, ridge + type: variable-text + default: solid + - + id: inline-title-underline-color + title: Inline title underline color + title.zh: 页面内标题下划线颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: inline-title-toggle-short-underline + title: Toggle underline (Shorter) + title.zh: 开启页面内标题下划线 (短线) + type: class-toggle + default: false + - + id: toggle-inline-title-background + title: Toggle inline title background + title.zh: 开启页面内标题背景颜色 + type: class-toggle + default: false + - + id: inline-title-bg-color + title: Inline title background color + title.zh: 页面内标题背景颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: inline-title-text-align-settings + title: Inline title text-align + title.zh: 页面内标题位置 + type: class-select + allowEmpty: false + default: inline-title-text-align-start + options: + - + label: Default (Left/Start) + value: inline-title-text-align-start + - + label: Center + value: inline-title-text-align-center + - + label: Right/End + value: inline-title-text-align-end + - + id: style-change-options + title: 2.3 Element styles + title.zh: 2.3 其他元素样式 + type: heading + level: 2 + collapsed: true + - + id: activeline-background + title: Active line background color + title.zh: 所在行高亮颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: muted-activeline-bg + title: Mute active line + title.zh: 取消所在行高亮 + type: class-toggle + default: false + - + id: plain-file-title + title: Remove colorful background of active file title + title.zh: 取消激活文件标题的彩色背景 + description: Make it austere + type: class-toggle + default: false + - + id: title-justify-start + title: Toggle title navigation bar position to left + title.zh: 标题导航栏左对齐 + type: class-toggle + default: false + - + id: fancy-hr-folder + title: 2.3.1 Dividing line (Horizontal ruler, hr, ---) + title.zh: 2.3.1 分割线(hr,---) + type: heading + level: 3 + collapsed: true + - + id: fancy-hr + title: Fancy Dividing line (Horizontal ruler, hr, ---) + title.zh: 装饰性分割线(hr,---) + type: class-select + allowEmpty: false + default: default-hr + options: + - + label: Default + value: default-hr + - + label: with icons + value: fancy-hr-icon + - + label: without icons + value: fancy-hr-no-icon + - + label: with Numbers + value: fancy-hr-number + - + id: fancy-hr-folder-icon + title: 2.3.1.1 w/ icons + title.zh: 2.3.1.1 有图标的hr + type: heading + level: 4 + collapsed: true + - + id: hr-color-icon-1 + title: Line color 1 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: hr-color-icon-2 + title: Line color 2 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: hr-color-icon-3 + title: Line color 3 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: hr-color-icon-4 + title: Line color 4 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: fancy-hr-icon + title: Centre icon + title.zh: 分割线中间图标 + description: Do not remove the quotes + description.zh: 保留引号 + type: variable-text + default: "'😀'" + - + id: fancy-hr-rotate + title: Degree of icon rotation + title.zh: 图标旋转角度 + type: variable-number + default: 0 + format: deg + - + id: fancy-hr-folder-no-icon + title: 2.3.1.2 w/o icons + title.zh: 2.3.1.2 没有图标的hr + type: heading + level: 4 + collapsed: true + - + id: hr-color-1 + title: hr-color-1 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: hr-color-2 + title: hr-color-2 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: hr-color-3 + title: hr-color-3 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: hr-color-4 + title: hr-color-4 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: fancy-hr-folder-with-number + title: 2.3.1.3 w/ numbers + title.zh: 2.3.1.3 带数字的hr + type: heading + level: 4 + collapsed: true + - + id: hr-color-numbers-line-1 + title: Line color 1 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: hr-color-numbers-line-2 + title: Line color 2 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: hr-color-numbers-line-3 + title: Line color 3 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: hr-color-numbers-line-4 + title: Line color 4 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: hr-color-numbers-color + title: Number color + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: hr-color-numbers-bg-color + title: Number background color + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: hollow-number + title: Toggle hollow numbers + title.zh: 切换空心数字 + type: class-toggle + default: false + - + id: hr-numbers-text-fill + title: Fill color + title.zh: 数字颜色 + description: Color inside the numbers + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: hr-numbers-text-stroke + title: Stroke color + title.zh: 线条颜色 + description: Color of lines drawn around numbers + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: list-style-change-options-folder + title: 2.3.2 List + title.zh: 2.3.2 列表 + type: heading + level: 3 + collapsed: true + - + id: line-height-list + title: Line height of list + title.zh: 列表行间距 + type: variable-number-slider + default: 1.4 + min: 1 + max: 2 + step: 0.1 + - + id: list-spacing-bt + title: List Spacing + title.zh: 列表项间距 + type: variable-number-slider + default: 1 + min: 0 + max: 10 + step: 0.2 + - + id: list-indent + title: List indent + title.zh: 列表缩进间距 + type: variable-number-slider + default: 2 + format: em + min: 0 + max: 6 + step: 0.1 + - + id: list-style-change-options-folder + title: 2.3.2.1 Unordered list + title.zh: 2.3.2.1 无序列表 + type: heading + level: 4 + collapsed: true + - + id: colorful-unordered-list + title: Toggle colorful unordered list marker + title.zh: 启用彩色无序列表符号 + type: class-toggle + default: false + - + id: unordered-list-style-options + title: Unordered list marker style + title.zh: 无序列表样式 + type: class-select + allowEmpty: false + default: bt-default-unordered-list + options: + - + label: Blue Topaz Default + value: bt-default-unordered-list + - + label: Custom + value: custom-unordered-list + - + label: Obsidian default + value: default-list-marker + - + id: options-bt-default + title: 2.3.2.1.1 Options for 'Blue Topaz Default' + type: heading + level: 5 + collapsed: true + - + id: list-ul-marker-size + title: Bullet size + title.zh: 符号大小 + type: variable-text + default: 1em + - + id: list-ul-marker-color + title: Text color (1st level) + title.zh: 符号颜色(第一层) + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: options-for-custom + title: 2.3.2.1.2 Options for 'Custom' + type: heading + level: 5 + collapsed: true + - + id: list-ul-marker-1 + title: List symbol (1st level) + title.zh: 符号(第一层) + type: variable-text + default: '"\2022"' + - + id: list-ul-marker-size-1 + title: Bullet size (1st level) + title.zh: 符号大小(第一层) + type: variable-text + default: 1em + - + id: list-ul-marker-color-1 + title: Bullet color (1st level) + title.zh: 符号颜色(第一层) + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: list-ul-marker-2 + title: List symbol (2nd level) + title.zh: 符号(第二层) + type: variable-text + default: '"\25E6"' + - + id: list-ul-marker-size-2 + title: Bullet size (2nd level) + title.zh: 符号大小(第二层) + type: variable-text + default: 1em + - + id: list-ul-marker-color-2 + title: Bullet color (2nd level) + title.zh: 符号颜色(第二层) + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: list-ul-marker-3 + title: List symbol (3rd level) + title.zh: 符号(第三层) + type: variable-text + default: '"\25AA"' + - + id: list-ul-marker-size-3 + title: Bullet size (3rd level) + title.zh: 符号大小(第三层) + type: variable-text + default: 1em + - + id: list-ul-marker-color-3 + title: Bullet color (3rd level) + title.zh: 符号颜色(第三层) + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: list-ul-marker-4 + title: List symbol (4th level) + title.zh: 符号(第四层) + type: variable-text + default: '"\25E6"' + - + id: list-ul-marker-size-4 + title: Bullet size (4th level) + title.zh: 符号大小(第四层) + type: variable-text + default: 1em + - + id: list-ul-marker-color-4 + title: Bullet color (4th level) + title.zh: 符号颜色(第四层) + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: list-style-change-options-folder + title: 2.3.2.2 Ordered list + title.zh: 2.3.2.2 有序列表 + type: heading + level: 4 + collapsed: false + - + id: colorful-ordered-list + title: Toggle colorful ordered list marker + title.zh: 启用彩色有序列表符号 + type: class-toggle + default: false + - + id: ordered-list-style-options + title: Ordered List marker style + title.zh: 有序列表样式 + type: class-select + allowEmpty: false + default: default-ol-list-marker + options: + - + label: Custom + value: custom-ordered-list + - + label: 1.1.1 + value: ordered-list-style-1 + - + label: Obsidian default + value: default-ol-list-marker + - + id: list-ol-number-color + title: Number color of ordered list + title.zh: 有序列表数字颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: list-ol-marker-1 + title: List symbol (1st level) + title.zh: 有序列表第一层符号 + description: 数字:decimal,小写字母:lower-latin,小写罗马数字:lower-roman + type: variable-text + default: decimal + - + id: list-ol-marker-2 + title: List symbol (2nd level) + title.zh: 有序列表第二层符号 + description: 数字:decimal,小写字母:lower-latin,小写罗马数字:lower-roman + type: variable-text + default: lower-latin + - + id: list-ol-marker-3 + title: List symbol (3rd level) + title.zh: 有序列表第三层符号 + description: 数字:decimal,小写字母:lower-latin,小写罗马数字:lower-roman + type: variable-text + default: lower-roman + - + id: list-ol-marker-4 + title: List symbol (4th level) + title.zh: 有序列表第四层符号 + description: 数字:decimal,小写字母:lower-latin,小写罗马数字:lower-roman + type: variable-text + default: decimal + - + id: list-style-change-options + title: List style in reading view + title.zh: 阅读视图列表样式 + type: class-select + allowEmpty: false + default: list-no-border + options: + - + label: Bracket 1 + value: list-bracket-style + - + label: Bracket 2 (1.1.1) + value: list-bracket-style-two + - + label: Bracket 3 + value: list-bracket-style-three + - + label: Vertical line 1 (1.1.1) + value: list-vertical-line-one + - + label: Using Ob Settings + value: list-no-border + - + id: indentation-line-styles + title: 2.3.2.3 Indentation lines + title.zh: 2.3.2.3 层级线设置 + type: heading + level: 4 + collapsed: false + - + id: bt-connected-indent-hover + title: Toggle connected indent (Hovering) + title.zh: 启用Connected indent lines(鼠标悬浮) + description: Inspired from the CSS snippet by KillyMXI (https://gist.github.com/KillyMXI/cbef8edff6dd55d9e6ea4df66567e9b1) + type: class-toggle + default: true + - + id: bt-connected-indent-line-color + title: Connected indent line color (Hovering) + type: variable-themed-color + format: hex + opacity: true + default-light: '#FFA8A8' + default-dark: '#926a6a' + - + id: bt-colorful-connected-indent-hover + title: Toggle colorful indentation lines (Hovering) + title.zh: 启用彩色Connected indent lines(鼠标悬浮) + type: class-toggle + default: true + - + id: bt-indentation-width-hover + title: Width of indentation lines (Hovering) + title.zh: 层级线宽度 (Hovering) + type: variable-text + default: 3px + - + id: bt-list-indentation-margin-left-editing + title: Move to right by ?px (Editing) + title.zh: 向右移动 ?px (Editing) + type: variable-text + default: 1px + - + id: indentation-guide-color + title: Inactive line color (Editing) + type: variable-themed-color + format: rgb + opacity: true + default-light: 'rgba(0, 0, 0, 0.06)' + default-dark: 'rgba(255, 255, 255, 0.08)' + - + id: indentation-guide-color-active + title: Active line color (Editing) + type: variable-themed-color + format: rgb + opacity: true + default-light: 'rgba(0, 0, 0, 0.14)' + default-dark: 'rgba(255, 255, 255, 0.17)' + - + id: bt-colorful-indentation-lines-editing + title: Toggle colorful indentation lines (Editing) + title.zh: 启用彩色层级线 (编辑) + type: class-toggle + default: false + - + id: indentation-guide-width + title: Indent line width (Editing) + type: variable-number + default: 1 + format: px + - + id: bt-list-indentation-margin-left-reading + title: Move to right by ?px (Reading) + title.zh: 向右移动 ?px (Reading) + type: variable-text + default: 1px + - + id: bt-colorful-indentation-lines + title: Toggle colorful indentation lines (Reading) + title.zh: 启用彩色层级线 (阅读) + type: class-toggle + default: false + - + id: bt-colorful-indentation-line-options + title: Line styles (Reading) + title.zh: 层级线样式 (阅读) + type: class-select + allowEmpty: false + default: default-indentation-line + options: + - + label: Default + value: default-indentation-line + - + label: Gradient + value: bt-indentation-line-gradient + - + label: Image + value: bt-indentation-line-image + - + id: bt-indentation-gradient-color-1 + title: Indentation gradient color 1 + type: variable-themed-color + format: hex + opacity: true + default-light: '#' + default-dark: '#' + - + id: bt-indentation-gradient-color-2 + title: Indentation gradient color 2 + type: variable-themed-color + format: hex + opacity: true + default-light: '#' + default-dark: '#' + - + id: bt-colorful-indentation-width + title: Width of colorful indentation lines (Reading) + title.zh: 彩色层级线宽度 (阅读) + type: variable-text + default: 1px + - + id: folder-style-change-options-folder + title: 2.3.3 Folder + title.zh: 2.3.3 文件夹 + type: heading + level: 3 + collapsed: true + - + id: file-bg-shape-option + title: File background shape + title.zh: 文件背景形状 + type: class-select + allowEmpty: false + default: file-shape-default + options: + - + label: Rectangle + value: file-shape-default + - + label: Rounded Rectangle + value: file-bg-rounded-rectangle + - + label: Pill + value: file-bg-pill + - + id: file-name-style-option + title: File name style + title.zh: 文件名样式 + type: class-select + allowEmpty: false + default: file-name-non-wrapped + options: + - + label: Wrapped + value: file-name-wrapped + - + label: Non-wrapped + value: file-name-non-wrapped + - + label: File Name Scrolling When Hovering + value: file-name-animation + - + id: dark-background-file + title: Dark file background + title.zh: 当前文件背景变深 + type: class-toggle + default: false + - + id: unmuted-collapsed-folder + title: Unmute collapsed folder + title.zh: 未激活文件夹不再黯淡 + description: To normalize opacity of collapsed folder + description.zh: 统一激活/未激活文件夹亮度 + type: class-toggle + default: false + - + id: remove-file-icons + title: Remove file icons + title.zh: 移除文件前图标 + description: To remove the icons before .md files + description.zh: 移除md文件前图标 + type: class-toggle + default: false + - + id: text-folder-file-icon + title: Color of file icons + title.zh: 文件前图标颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: folder-icons + title: Toggle folder icons + title.zh: 激活文件夹图标 + type: class-toggle + default: true + - + id: remove-arrow + title: Toggle arrows (Collapse Indicator) + title.zh: 文件夹图标开启后,移除箭头图标(折叠图标) + description: To be effective after toggling the option above + description.zh: 开启上面选项后起效 + type: class-toggle + default: true + - + id: remove-first-folder-icon + title: Remove the first-layer folder icons + title.zh: 去除第一层文件夹前图标 + type: class-toggle + default: true + - + id: folder-style-change-options-colorful-folder + title: 2.3.3.1 Colorful folder + title.zh: 2.3.3.1 多彩文件夹 + type: heading + level: 4 + collapsed: false + - + id: bt-toggle-colorful-folder + title: Toggle colorful folders + title.zh: 启用彩色文件夹 + type: class-toggle + default: true + - + id: folder-style-change-options-colorful + title: Select folder colorful mode + title.zh: 彩色化类型 + type: class-select + allowEmpty: false + default: folder-style-change-options-colorful-tab-liked + options: + - + label: Default non-colorful + value: folder-style-change-options-colorful-default + - + label: folder colorful with "0-9" or "A-Z" + value: folder-style-change-options-colorful + - + label: folder colorful by order + value: folder-style-change-options-colorful-order + - + label: folder title colorful + value: folder-style-change-options-colorful-title + - + label: Tab-liked + value: folder-style-change-options-colorful-tab-liked + - + id: folder-style-change-options-colorful-subfolder + title: Folder color palette + title.zh: 文件夹配色 + type: class-select + allowEmpty: false + default: folder-colorful-six + options: + - + label: Style 1 (high transparency) + value: folder-colorful-one + - + label: Style 2 (low transparency) + value: folder-colorful-two + - + label: Style 3 + value: folder-colorful-three + - + label: Style 4 + value: folder-colorful-four + - + label: Style 5 + value: folder-colorful-five + - + label: Style 6 + value: folder-colorful-six + - + label: Custom + value: folder-colorful-custom + - + id: folder-colorful-custom-color + title: Custom color of folder + title.zh: 自定义文件夹配色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: blockquote-style-change-options-folder + title: 2.3.4 Blockquote + title.zh: 2.3.4 引用框 + type: heading + level: 3 + collapsed: true + - + id: blockquote-style-change-options + title: Blockquote + title.zh: 引用框样式 + type: class-select + allowEmpty: false + default: blockquote-style-default + options: + - + label: Default + value: blockquote-style-default + - + label: With quotation mark + value: blockquote-style-quotation-mark + - + label: Speech Bubble 1 + value: blockquote-style-speech-bubble-one + - + label: Speech Bubble 2 + value: blockquote-style-speech-bubble-two + - + label: Outline + value: blockquote-style-outline + - + label: Border left + value: blockquote-style-border-left + - + id: export-pdf-style-folder + title: 2.3.5 Exported PDF style + title.zh: 2.3.5 导出PDF样式 + type: heading + level: 3 + collapsed: true + - + id: hr-for-pagination + title: Use hr (---) for paging + title.zh: 使用分隔符(---)分页 + type: class-toggle + default: false + - + id: all-dark-pdf + title: All dark (Experimental, may or may not be desirable) + description: Export PDF with dark mode color scheme + description.zh: 导出黑暗配色的PDF + type: class-toggle + default: false + - + id: show-url-after-link + title: Print URL after links + title.zh: 显示地址超链接 + type: class-toggle + default: false + - + id: print-strong-color + title: Strong color + title.zh: 粗体颜色 + type: variable-themed-color + opacity: false + format: hex + default-light: '#' + default-dark: '#' + - + id: print-em-color + title: Italic type color + title.zh: 斜体颜色 + type: variable-themed-color + opacity: false + format: hex + default-light: '#' + default-dark: '#' + - + id: embed-folder + title: 2.3.6 Embeds + title.zh: 2.3.6 嵌入样式 + type: heading + level: 3 + collapsed: true + - + id: adjustable-embed-content-height + title: Fixed embedded content height + title.zh: 固定嵌入页面高度 + type: class-toggle + default: false + - + id: embed-content-height + title: Height of embedded content + title.zh: 嵌入页面高度 + description: Switch on the above button to activate + type: variable-number + default: 600 + format: px + - + id: naked-embed + title: Transparent embedded background + title.zh: 嵌入背景透明 + type: class-toggle + default: false + - + id: hide-embed-title + title: Hide embedded title + title.zh: 隐藏嵌入文档标题 + type: class-toggle + default: false + - + id: hide-embed-banner + title: Hide embedded banner + title.zh: 隐藏嵌入文档banner + type: class-toggle + default: false + - + id: embed-hd + title: Hide embedded headers + title.zh: 隐藏嵌入文档中的H1 H2 H3标题 + type: class-toggle + default: false + - + id: embed-hover + title: Floating effect of embedded note when hovering + title.zh: 嵌入笔记浮动效果 + type: class-toggle + default: false + - + id: table-styles + title: 2.3.7 Table + title.zh: 2.3.7 表格 + type: heading + level: 3 + collapsed: true + - + id: toggle-table-transition + title: Toggle table zooming effect + title.zh: 移除表格悬浮放大效果 + type: class-toggle + default: false + - + id: table-format-options + title: Table format + title.zh: 表格格式 + type: class-select + allowEmpty: false + default: default-table + options: + - + label: Defaut table + value: default-table + - + label: Wrapped table (break all) + value: wrapped-table + - + label: Non-wrapped table (limited cell width) + value: no-wrapped-table-cell + - + label: Non-wrapped table + value: no-wrapped-table + - + id: show-border-table + title: Show borders + title.zh: 显示表格框线 + type: class-toggle + default: false + - + id: table-width + title: Table width + title.zh: md表格默认宽度 + type: class-select + default: table-width-100 + options: + - + label: 100% + value: table-width-100 + - + label: auto + value: table-width-auto + - + id: full-width-table + title: Full-width table display + title.zh: md表格全宽显示 + description: for Reading View, require Contextual Typography plugin + description.zh: 阅读模式下,实现效果需要安装Contextual Typography插件 + type: class-toggle + default: false + - + id: table-style-options + title: Table Style + title.zh: 表格样式 + type: class-select + allowEmpty: false + default: table-style-default + options: + - + label: Default + value: table-style-default + - + label: Style I + value: table-style-one + - + label: Style II + value: table-style-two + - + label: Style III + value: table-style-three + - + id: cloze-style + title: 2.3.8 Cloze style + title.zh: 2.3.8 挖空涂黑 + type: heading + level: 3 + collapsed: true + - + id: remove-cloze-style + title: Cancel cloze Style + title.zh: 取消挖空涂黑功能 + description: In this theme, you can use ==~~your words~~==, *==~~your words~~==* and *~~your words~~* to obtain a cloze-style, active this option to cancel it + description.zh: 当前主题下,使用以下格式可以对文本进行涂黑或挖空 ==~~your words~~==, *==~~your words~~==* 或 *~~your words~~*,激活该选项以取消 + type: class-toggle + default: false + - + id: cloze-bg-color + title: Cloze background color + title.zh: 涂黑背景颜色 + description: Cloze Style One, i.e. ==~~your words~~==, hovering to find "your words", should declare "cssclass:cloze" in the YAML area if you want to use them in the Live Preview mode + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: cloze-decoration + title: Underline decoration style + description: Can type 'solid', 'dotted', 'dashed', 'wavy' or 'double' for Cloze Style One, i.e. ==~~your words~~==, hovering to find "your words", should declare "cssclass:cloze" in the YAML area if you want to use them in the Live Preview mode + type: variable-text + default: none + - + id: cloze-decoration-color + title: Underline decoration color + description: For Cloze Style One, i.e. ==~~your words~~==, hovering to find "your words", should declare 'cssclass:cloze' in the YAML area if you want to use them in the Live Preview mode + type: variable-themed-color + opacity: false + format: hex + default-light: '#' + default-dark: '#' + - + id: cloze-decoration-2 + title: Underline decoration style for Cloze style TWO + description: Can type 'solid', 'dotted', 'dashed', 'wavy', 'double' or 'none' for Cloze Style TWO, i.e. *==~~your words~~==*, pressing down the primary mouse button to find "your words", should declare 'cssclass:cloze' in the YAML area if you want to use them in the Live Preview mode + type: variable-text + default: dashed + - + id: cloze-decoration-color-2 + title: Underline decoration color for Cloze style TWO + description: For Cloze Style TWO, i.e. *==~~your words~~==*, pressing down the primary mouse button to find "your words", should declare 'cssclass:cloze' in the YAML area if you want to use them in the Live Preview mode + type: variable-themed-color + opacity: false + format: hex + default-light: '#' + default-dark: '#' + - + id: cloze-decoration-3 + title: Underline decoration style for Cloze style THREE (*~~your words~~*) + description: Can type 'solid', 'dotted', 'dashed', 'wavy', 'double' or 'none' for Cloze Style THREE, i.e. *~~your words~~*, pressing down the primary mouse button to find "your words", should declare 'cssclass:cloze' in the YAML area if you want to use them in the Live Preview mode + type: variable-text + default: dashed + - + id: cloze-decoration-color-3 + title: Underline decoration color for Cloze style THREE + description: For Cloze Style THREE, i.e. *~~your words~~*, pressing down the primary mouse button to find "your words", should declare 'cssclass:cloze' in the YAML area if you want to use them in the Live Preview mode + type: variable-themed-color + opacity: false + format: hex + default-light: '#' + default-dark: '#' + - + id: link-style + title: 2.3.9 Links + title.zh: 2.3.9 链接 + type: heading + level: 3 + collapsed: true + - + id: link-underline-internal + title: Toggle internal link underline + title.zh: 开启内部链接下划线(默认:无) + type: class-toggle + default: false + - + id: link-underline-external + title: Disable external link underline + title.zh: 关闭外部链接下划线(默认:有) + type: class-toggle + default: false + - + id: link-underline-unresolved + title: Toggle unresolved link underline + title.zh: 开启未创建链接下划线(默认:有) + type: class-toggle + default: false + - + id: colorful-link-animation + title: Toggle colorful link background (hovering) + title.zh: 开启彩色链接背景颜色 (鼠标悬浮时) + type: class-toggle + default: false + - + id: internal-link-color + title: Internal link color + title.zh: 内链颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: remove-external-link-icon + title: Toggle icon after external link + title.zh: 去除外部链接后面的图标 + type: class-toggle + default: false + - + id: external-link-color + title: External link color + title.zh: 外链颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: default-unresolved-link + title: Toggle default unresolved link color + title.zh: 使用默认的未创建链接颜色 + type: class-toggle + default: false + - + id: unresolved-link + title: Unresolved Link Color + title.zh: 未创建链接颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: link-click + title: Cancel click the link to trigger auto-jump + title.zh: 取消编辑模式下点击链接自动跳转 + type: class-toggle + default: false + description: You can click on the link by holding down the ctrl key to jump + description.zh: 可以通过按住ctrl键点击链接跳转 + - + id: cursor-style-folder + title: 2.3.10 Cursor + title.zh: 2.3.10 输入光标 + type: heading + level: 3 + collapsed: true + - + id: cursor-color + title: Cursor color + title.zh: 光标颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: checkbox-style-folder + title: 2.3.11 Checkbox + title.zh: 2.3.11 勾选框 + type: heading + level: 3 + collapsed: true + - + id: circular-checkbox + title: Circular checkbox + title.zh: 圆形勾选框 + type: class-toggle + default: false + - + id: toggle-checked-decoration + title: Add strikethrough for checked items + title.zh: 添加完成任务时的删除线 + type: class-toggle + default: false + - + id: checklist-done-color + title: Checked text color + title.zh: 完成任务的文字颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: checkbox-size + title: Checkbox Size + title.zh: 勾选框大小 + type: variable-text + default: 1rem + - + id: unmute-checkbox-animation + title: Deactivate checkbox animation + title.zh: 取消勾选框摇摆动画 + type: class-toggle + default: false + - + id: extend-checkbox-list + title: Extend checkbox list (unavailable) + title.zh: 扩充勾选框类型 (不可用) + type: class-toggle + default: false + - + id: icons-style-folder + title: 2.3.12 Icons + title.zh: 2.3.12 图标 + type: heading + level: 3 + collapsed: true + - + id: remove-custom-svg-icons + title: Toggle default icons + title.zh: 还原默认图标 + type: class-toggle + default: false + - + id: default-icons + title: Toggle default collapse icons + title.zh: 还原折叠图标 + type: class-toggle + default: false + - + id: enable-icon-anima + title: Enable clickable-icons' hovering animation + title.zh: 开启按钮图标的鼠标悬浮动画效果 + description.zh: 是否开启图标背景动画以及图标悬浮动画效果 + type: class-toggle + default: false + - + id: icons-style-folder + title: 2.3.13 Images + title.zh: 2.3.13 图片 + type: heading + level: 3 + collapsed: true + - + id: image-zoom + title: Deactivate image zooming + title.zh: 取消点击图片放大效果 + type: class-toggle + default: false + - + id: obsidian-default-image + title: Obsidian default image position + title.zh: Obsidian默认图片位置 + type: class-toggle + default: false + - + id: image-max-width + title: Image max-width + title.zh: 图片最大宽度 + type: variable-text + default: 100% + - + id: image-border + title: Image borders + title.zh: 图片添加边框 + type: class-toggle + default: false + - + id: icons-style-folder-1 + title: Intro to basic image position + title.zh: 基本图片位置简介 + description: You can add 🔸|Left (can also use `left`, `LEFT` or `L` to replace the `Left` before), 🔸|Right (right/RIGHT/R) and 🔸|Inline (inline/INLINE/inl/INL/Inl) 🔸|Centre/Center (CENTRE/CENTER/centre/center/C) (the “centre” one is for the “Obsidian Default Image Position above only, because Topaz's default image position is in the centre) into a image format to adjust the image position, e.g. ![[*.jpg|L]], ![[*.png|Right|200]] and ![|inl](...*.jpg) + description.zh: 在图片格式里添加 🔸|Left (can also use `left`, `LEFT` or `L` to replace the `Left` before), 🔸|Right (right/RIGHT/R) and 🔸|Inline (inline/INLINE/inl/INL/Inl) 🔸|Centre/Center (CENTRE/CENTER/centre/center/C) (这个选项只在开启 “Obsidian默认图片位置” 后生效,因为Topaz默认图片位置就是居中) 来改变图片位置, e.g. ![[*.jpg|L]], ![[*.png|Right|200]] and ![|inl](...*.jpg) + type: heading + level: 4 + collapsed: true + - + id: icons-style-folder-2 + title: Intro to image caption + title.zh: 图片标题介绍 + description: You can add 🔸#Left|your captions (can also use `left`, `LEFT` or `L` to replace the `Left`), 🔸#Right (or right/RIGHT/R)|your captions, 🔸#center/centre (CENTRE/CENTER/Center/Centre/C) |your captions and 🔸#inl (Inline/INLINE/inline/INL/Inl) |your captions into a image format to adjust the image position with a image caption, e.g. ![[*.jpg#left|Figure 1]], ![[*.png#right|Figure 2|200]], ![[*.jpg#centre|Figure 3]] and ![[*.jpg#inl|Figure 4|100]] + description.zh: 在图片格式里添加 🔸#left (can also use `left`, `LEFT` or `L` to replace the `Left`) |your captions, 🔸#right (or right/RIGHT/R) |your captions, 🔸#center/centre (CENTRE/CENTER/Center/Centre/C) |your captions and 🔸#inl (Inline/INLINE/inline/INL/Inl) |your captions 来改变图片位置,并添加图片标题, e.g. ![[*.jpg#left|Figure 1]], ![[*.png#right|Figure 2|200]], ![[*.jpg#C|Figure 3]] and ![[*.jpg#inl|Figure 4|100]] + type: heading + level: 4 + collapsed: true + - + id: icons-style-folder-3 + title: Intro to image grid + title.zh: 图片横排介绍 + description: You can add 🔸|+grid into some images to grid these images in a line, e.g. ![[*.jpg|+grid]] Or type ❗cssclass:img-grid❗ in YAML to make images arrange in a grid in the preview mode. require Contextual Typography plugin + description.zh: 在图片格式里添加 🔸|+grid 使复数的图片排成一行, e.g. ![[*.jpg|+grid]] 。或者在YAML种输入 ❗cssclass:img-grid❗最好安装 Contextual Typography 插件实现更好的并排效果 + type: heading + level: 4 + collapsed: false + - + id: img-grid + title: Enable global image grid + title.zh: 开启全局图片横排显示 + description: Enable the Contextual Typography plugin to control side-by-side images via blank lines + description.zh: 开启后,不需要在笔记上方声明cssclass:img-grid,通过图片空行控制是否并排 + type: class-toggle + default: false + - + id: loading-page-style-folder + title: 2.3.14 Loading page + title.zh: 2.3.14 加载页面 + type: heading + level: 3 + collapsed: true + - + id: loading-page-style-option + title: Loading page style + type: class-select + allowEmpty: false + default: default-loading-page + options: + - + label: Default Loading Page + value: default-loading-page + - + label: Shapes + value: loading-page-style-default + - + label: Custom Text + value: loading-custom-text + - + label: Default Text w/ Icons Before and After + value: loading-add-icons + - + label: Cat (GIF) + value: loading-animation-cat + - + label: Adding Image or Animation (GIF) + value: loading-animation-custom + - + label: Animation with Position Changing + value: loading-shape-with-custom-gif + - + label: Jumping Mario + value: loading-page-style-mario + + - + id: loading-custom-text-folder + title: 2.3.14.1 Custom text + type: heading + level: 4 + collapsed: true + - + id: loading-diy-text + title: Custom text + title.zh: 自定义文字 + type: variable-text + default: "'快乐摸鱼又一天,人生还剩多少天?'" + - + id: font-loading-text + title: Font family of custom text + title.zh: 字体 + type: variable-text + default: var(--font-monospace-theme) + - + id: font-size-loading-diy-text + title: Font size + type: variable-text + default: 3em + - + id: loading-diy-text-color + title: Text color + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: loading-text-typing-style + title: Typing style + title.zh: 打字效果 + type: class-toggle + default: true + - + id: loading-text-moving-style + title: Moving style + title.zh: 移动效果 + type: class-toggle + default: false + - + id: loading-text-shinning-style + title: Shinning style + title.zh: 闪烁效果 + type: class-toggle + default: false + - + id: loading-text-color-changing-style + title: Color-changing style + title.zh: 变色效果 + type: class-toggle + default: false + - + id: loading-add-icons-folder + title: 2.3.14.2 Custom image/animation + type: heading + level: 4 + collapsed: true + - + id: loading-text-before + title: Adding things before + type: variable-text + default: "'❀✿'" + - + id: loading-text-after + title: Adding things after + type: variable-text + default: "'✿❀'" + - + id: font-size-loading-add + title: Font size + type: variable-text + default: 1.5em + - + id: loading-add-text-color + title: Text color + type: variable-themed-color + opacity: true + format: hex + default-light: '#D3959B' + default-dark: '#D3959B' + - + id: loading-add-text-color-alt + title: Text color + type: variable-themed-color + opacity: true + format: hex + default-light: '#BFE6BA' + default-dark: '#BFE6BA' + - + id: loading-animation-custom-folder + title: 2.3.14.3 Custom image/animation + type: heading + level: 4 + collapsed: true + - + id: loading-page-custom-gif-caption + title: Image caption + type: variable-text + default: " " + - + id: loading-shape-with-custom-gif-folder + title: 2.3.14.4 Custom image/animation with position changing + type: heading + level: 4 + collapsed: true + - + id: loading-page-custom-gif-caption-alt + title: Image caption + type: variable-text + default: " " + - + id: loading-shape-with-custom-high-contrast-bg + title: High contrast background + title.zh: 高对比度背景 + type: class-toggle + default: false + - + id: tag-color-settings + title: 2.3.15 Tags + title.zh: 2.3.15 标签 (#Tag) + type: heading + level: 3 + collapsed: true + - + id: tag-click + title: Cancel click the tag to trigger auto-jump + title.zh: 取消实时预览模式下点击标签自动跳转 + type: class-toggle + default: false + description: You can jump by clicking on the # marks in the tags + description.zh: 可以通过点击标签中的#号跳转 + - + id: head-tag-style + title: Label superscript in the header + title.zh: 标题中的标签上标样式 + type: class-toggle + default: false + description.zh: 标题出现标签自动上标,也可以用 或者包裹实现不一样的样式。 + - + id: tag-style-option + title: Tag Style + title.zh: 标签样式 + type: class-select + allowEmpty: false + default: tag-default + options: + - + label: Rainbow tag + value: rainbow-tag + - + label: Rainbow tag alt (No influence on emojis) + value: rainbow-tag-no-filter + - + label: Outlined + value: tag-pill-outlined + - + label: Clear + value: tag-clear-style + - + label: Obsidian default + value: tag-default + - + label: Customised colorful tag + value: colorful-tag-bt + - + id: customised-colorful-tag + title: 2.3.15.1 Customised colorful tag + type: heading + level: 4 + collapsed: true + - + id: tag1 + title: Tag-1 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: tag2 + title: Tag-2 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: tag3 + title: Tag-3 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: tag4 + title: Tag-4 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: tag5 + title: Tag-5 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: tag-text + title: Tag text + type: variable-themed-color + opacity: false + format: hex + default-light: '#f8f8f8' + default-dark: '#e4e4e4' + - + id: outlined-style + title: 2.3.15.2 Outlined + type: heading + level: 4 + collapsed: true + - + id: tag-border-width + title: Tag border width + title.zh: 标签边框宽度 + type: variable-text + default: 1px + - + id: tag-color-settings + title: 2.3.16 Setting, Menu, Option panes + title.zh: 2.3.16 设置、菜单、选项面板 + type: heading + level: 3 + collapsed: true + - + id: setting-etc-pane-style + title: Pane style + type: class-select + allowEmpty: false + default: setting-style-traditional + options: + - + label: Frosted Glass + value: setting-default-frosted-glass + - + label: Traditional + value: setting-style-traditional + - + label: Translucent (only for setting panel) + value: translucent-setting-panel + - + id: titlebar-settings + title: 2.3.17 Titlebar style + title.zh: 2.3.17 标题栏样式 + type: heading + level: 3 + collapsed: true + - + id: simple-titlebar + title: Simple title bar + title.zh: 简单的Title bar + description: To remove the background image of title bar + description.zh: 自定义title bar背景 + type: class-toggle + default: false + - + id: custom-titlebar-bg + title: Title bar background color + title.zh: 自定义标题栏背景色 + description: custom-titlebar-bg + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: titlebar-blur-depth + title: Title bar blur radius + title.zh: Title bar 模糊程度 + description: To adjust the radius of blur + description.zh: 调整Title bar 背景模糊程度 + type: variable-number-slider + default: 8 + format: px + min: 0 + max: 30 + step: 1 + - + id: titlebar-brightness + title: Title bar brightness of image + title.zh: Title bar 背景亮度 + description: To adjust the brightness + description.zh: 调整Title bar 背景亮度 + type: variable-number-slider + default: 1 + min: 0.1 + max: 1.5 + step: 0.1 + - + id: titlebar-close-button + title: Titlebar close button + title.zh: Ob标题栏关闭按钮 + type: class-select + allowEmpty: false + default: default-titlebar + options: + - + label: Default + value: default-titlebar + - + label: Reversal + value: reversal-titlebar + - + id: hide-titlebar-text + title: Hide text in title bar + title.zh: 隐藏Obsidian标题栏中的文字 + type: class-toggle + default: false + - + id: hide-titlebar-close-btn + title: Auto-hide title bar close button + title.zh: 自动隐藏关闭按钮 + type: class-toggle + default: false + - + id: outline-settings + title: 2.3.18 Outline + title.zh: 2.3.18 侧边栏大纲 + type: heading + level: 3 + collapsed: true + - + id: outline-style + title: Outline style + title.zh: 大纲样式 + type: class-select + allowEmpty: false + default: default-outline-style + options: + - + label: Default + value: default-outline-style + - + label: Logseq + value: logseq-outline-style + - + id: nowrap-outline + title: Nowrap + title.zh: 不换行 + type: class-toggle + default: false + - + id: prompt-settings + title: 2.3.19 Prompt (ctrl p) + title.zh: 2.3.19 提示框 (ctrl p) + type: heading + level: 3 + collapsed: true + - + id: prompt-options + title: Prompt styles + title.zh: 提示框唤出样式 + type: variable-select + allowEmpty: false + default: default-prompt-style + options: + - + label: Default + value: default-prompt-style + - + label: Fancy prompt 1 + value: fancy-prompt-1 + - + label: Slide Up Large + value: slideUpLarge + - + label: Quick Scale Down + value: quickScaleDown + - + label: Blow Up Modal + value: blowUpModal + - + label: Road Runner In + value: roadRunnerIn + - + label: Road Runner Out + value: roadRunnerOut + - + label: Unfold In + value: unfoldIn + - + label: Pop-swirl + value: pop-swirl + - + id: stack-settings + title: 2.3.20 Stack tabs + type: heading + level: 3 + collapsed: true + - + id: stack-tabs-text-ori-options + title: Text orientation styles + title.zh: stack 模式汉字竖排 + type: class-select + allowEmpty: false + default: stack-tab-text-ori-mixed + options: + - + label: Default + value: default-stack-text-ori-style + - + label: Mixed orientation + value: stack-tab-text-ori-mixed + - + id: stack-tabs-background-blur-depth + title: stack tabs background blur radius + title.zh: 堆叠模式下笔记背景模糊程度 + description: To adjust the radius of blur + description.zh: 调整背景模糊程度 + type: variable-number-slider + default: 40 + format: px + min: 0 + max: 200 + step: 10 + - + id: tabs-settings + title: 2.3.21 Tabs + type: heading + level: 3 + collapsed: true + - + id: tab-head-style + title: Tab style + type: class-select + allowEmpty: false + default: default-tab + options: + - + label: Default + value: default-tab + - + label: Underline + value: underline-tab-style + - + label: Safari-style + value: safari-tab-style + - + label: Transparent-style + value: transparent-tab-style + - + id: mermaid-styles + title: 2.3.21 Mermaid + type: heading + level: 3 + collapsed: true + - + id: resizable-mermaid + title: Resizable mermaid in reading mode + title.zh: 阅读模式可调整mermaid大小 + type: class-toggle + default: false + - + id: metadata-styles + title: 2.3.22 Metadata (Yaml) + type: heading + level: 3 + collapsed: true + - + id: show-full-metadata + title: Show full metadata in Reading mode + title.zh: 阅读模式下显示完整的metadata信息 + description.zh: 需要先在设置中开启显示front-matter,笔记cssclass中声明show-full-metadata 可单独控制是否显示yaml + type: class-toggle + default: false + addCommand: true + - + id: canvas-styles + title: 2.3.23 Canvas + title.zh: 2.3.23 白板 Canvas + type: heading + level: 3 + collapsed: true + - + id: canvas-card-focus-mode + title: Canvas card focus mode (Unavailable) + title.zh: 开启Canvas聚焦模式 (不可用) + description: clicking on a card will highlight all cards and lines of the same color on the canvas When turned on + description.zh: 开启后 点击卡片会突出显示画布上所有相同颜色的卡片和线条 + type: class-toggle + default: false + addCommand: true + - + id: zoom-multiplier + title: Canvas card size for "Zoom to selection" + title.zh: “聚焦”时卡片大小 + type: variable-number-slider + default: 1 + min: 0.5 + max: 2 + step: 0.05 + - + id: canvas-card-text-middle + title: Canvas card text center align + title.zh: 卡片文字默认居中 + type: class-toggle + default: false + - + id: canvas-card-opacity + title: Canvas card opacity + title.zh: 卡片透明度 + type: variable-number-slider + default: 0.1 + min: 0 + max: 1 + step: 0.05 + - + id: canvas-workplace-background-heading + title: 2.3.23.1 canvas workplace background settings + title.zh: 2.3.23.1 canvas页面背景设置 + type: heading + level: 4 + collapsed: true + - + id: toggle-canvas-grid + title: Toggle canvas grid + title.zh: 关闭Canvas网格显示 + type: class-toggle + default: false + - + id: canvas-workplace-background + title: Toggle canvas workplace background + title.zh: 关闭Canvas工作区背景 + description.zh: 如果开启了1.2.1工作页面背景,编辑画板也会带有背景,这里可以关闭画板背景 + type: class-toggle + default: false + - + id: canvas-background-image + title: Canvas background image + title.zh: canvas背景图案 + type: class-select + allowEmpty: false + default: default-canvas-background + options: + - + label: Default + value: default-canvas-background + - + label: Stardust + value: stardust-canvas-background + - + label: Dark Mosaic + value: mosaic-canvas-background-dark + - + label: Woven (Dark) + value: woven-canvas-background-dark + - + label: Woven (light) + value: woven-canvas-background + - + label: Wood + value: wood-canvas-background + - + label: Retina Wood + value: retina-wood-canvas-background + - + label: Matrix grid + value: matrix-grid-canvas-background + - + label: Notebook + value: notebook-canvas-background + - + label: Project Paper + value: paper-canvas-background + - + label: Blackboard + value: blackboard-canvas-background + - + id: canvas-background + title: Custom canvas background color + title.zh: 自定义canvas背景色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: tab-stack-folder + title: 2.3.24 Tab stack + title.zh: 2.3.24 堆叠标签页 + type: heading + level: 3 + collapsed: true + - + id: tab-stacked-pane-width + title: Tag stacked pane with + type: variable-number + default: 700 + format: px + - + id: tab-stacked-header-width + title: Spine width + type: variable-number + default: 40 + format: px + - + id: highlight-bg-color-folder + title: 2.3.25 Highlights (==xx==) + title.zh: 2.3.25 高亮 (==xx==) + type: heading + level: 3 + collapsed: true + - + id: text-highlight + title: Highlight text color + title.zh: 高亮文本颜色 + description: ==XXXXX== color + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: highlight-style + title: Highlight styles + title.zh: 高亮样式 + type: class-select + allowEmpty: false + default: bt-default-highlight + options: + - + label: Default + value: bt-default-highlight + - + label: All rounded corners (@Mon & @TheGodOfKing) + value: all-rounded-corners-highlight + - + label: No rounded corners + value: no-rounded-corners-highlight + - + id: highlight-bg-color-head + title: Highlight background color + title.zh: 高亮背景颜色 + type: heading + level: 4 + collapsed: true + - + id: text-highlight-bg-h-light + title: Hue (Light mode) + description: To adjust Hue + description.zh: 调整颜色 明亮模式 + type: variable-number-slider + default: 34 + min: 0 + max: 360 + step: 5 + - + id: text-highlight-bg-s-light + title: Saturation (Light mode) + description: To adjust Saturation + description.zh: 调整饱和度 明亮模式 + type: variable-number-slider + default: 100 + min: 0 + max: 100 + step: 5 + format: "%" + - + id: text-highlight-bg-l-light + title: Lightness (Light mode) + description: To adjust Lightness + description.zh: 调整亮度 明亮模式 + type: variable-number-slider + default: 80 + min: 0 + max: 100 + step: 5 + format: "%" + - + id: text-highlight-bg-a-light + title: Opacity (Light mode) + description: To adjust Alpha + description.zh: 调整透明度(Alpha)明亮模式 + type: variable-number-slider + default: 0.80 + min: 0 + max: 1 + step: 0.05 + - + id: text-highlight-bg-h-dark + title: Hue (Dark mode) + description: To adjust Hue + description.zh: 调整颜色 黑暗模式 + type: variable-number-slider + default: 57 + min: 0 + max: 360 + step: 5 + - + id: text-highlight-bg-s-dark + title: Saturation (Dark mode) + description: To adjust Saturation + description.zh: 调整饱和度 黑暗模式 + type: variable-number-slider + default: 40 + min: 0 + max: 100 + step: 5 + format: "%" + - + id: text-highlight-bg-l-dark + title: Lightness (Dark mode) + description: To adjust Lightness + description.zh: 调整亮度 黑暗模式 + type: variable-number-slider + default: 38 + min: 0 + max: 100 + step: 5 + format: "%" + - + id: text-highlight-bg-a-dark + title: Opacity (Dark mode) + description: To adjust Alpha + description.zh: 调整透明度(Alpha)黑暗模式 + type: variable-number-slider + default: 0.55 + min: 0 + max: 1 + step: 0.05 + - + id: colorful-highlight-head + title: Colorful highlight setting + title.zh: 多彩高亮背景颜色 + type: heading + level: 4 + collapsed: true + - + id: remove-colorful-highlight-bg + title: Deactivate colorful-highlight + title.zh: 取消多彩高亮颜色 + description: In this theme, *==xxx==*, **==xxx==** and ***==xxx==*** possese different background colors by default, active this option to cancel it. Even with this option actived, you can still type "cssclass:colorful-highlight" into yaml to make the colorful-highlight style available to individual documents + description.zh: 当前主题下,*==xxx==*, **==xxx==** and ***==xxx==*** 默认情况下具有不同高亮背景色,激活该选项以取消。即使取消了该功能,你依旧可以在yaml中键入"cssclass:colorful-highlight",使单个文档激活多彩高亮功能 + type: class-toggle + default: false + - + id: bg-color-highlight-1 + title: Highlight background color Plus 1 (*==xx==*) + title.zh: 高亮颜色 Plus 1 (*==xx==*) + type: variable-themed-color + opacity: true + format: hex + default-light: '#ff000034' + default-dark: '#c865656f' + - + id: color-highlight-1 + title: Highlight text color Plus 1 (*==xx==*) + title.zh: 高亮文字颜色 Plus 1 (*==xx==*) + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: font-weight-highlight-1 + title: Font weight of highlight text Plus 1 (*==xx==*) + title.zh: 字重 Plus 1 (*==xx==*) + description: Can type normal, bold, lighter or bolder to change the font weight + description.zh: 可以输入 normal, bold, lighter 或者 bolder 去改变字重 + type: variable-text + default: normal + - + id: bg-color-highlight-2 + title: Highlight background color Plus 2 (**==xx==**) + title.zh: 高亮颜色 Plus 2 (**==xx==**) + type: variable-themed-color + opacity: true + format: hex + default-light: '#0fc41835' + default-dark: '#54b9476f' + - + id: color-highlight-2 + title: Highlight text color Plus 2 (**==xx==**) + title.zh: 高亮文字颜色 Plus 2 (**==xx==**) + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: font-weight-highlight-2 + title: Font weight of highlight text Plus 2 (**==xx==**) + title.zh: 字重 Plus 2 (**==xx==**) + description: Can type normal, bold, lighter or bolder to change the font weight + description.zh: 可以输入 normal, bold, lighter 或者 bolder 去改变字重 + type: variable-text + default: normal + - + id: bg-color-highlight-3 + title: Highlight background color Plus 3 (***==xx==***) + title.zh: 高亮颜色 Plus 3 (***==xx==***) + type: variable-themed-color + opacity: true + format: hex + default-light: '#4ca6ff51' + default-dark: '#1e83d086' + - + id: color-highlight-3 + title: Highlight text color Plus 3 (***==xx==***) + title.zh: 高亮文字颜色 Plus 3 (***==xx==***) + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: font-weight-highlight-3 + title: Font weight of highlight text Plus 3 (***==xx==***) + title.zh: 字重 Plus 3 (***==xx==***) + description: Can type normal, bold, lighter or bolder to change the font weight + description.zh: 可以输入 normal, bold, lighter 或者 bolder 去改变字重 + type: variable-text + default: normal + - + id: highlight-bg-color-folder + title: 2.3.26 Popover + title.zh: 2.3.26 悬浮预览弹窗 + type: heading + level: 3 + collapsed: true + - + id: background-popover + title: Hover popover background color + title.zh: 悬浮弹窗背景色 + description: --background-popover + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: popover-width-factor + title: Popover width + title.zh: 弹窗宽度 + type: variable-number-slider + default: 1 + min: 0.5 + max: 2.5 + step: 0.05 + - + id: popover-height-factor + title: Popover height + title.zh: 弹窗宽度 + type: variable-number-slider + default: 1 + min: 0.5 + max: 2 + step: 0.05 + - + id: tab-stack-folder + title: 2.3.27 PDF + title.zh: 2.3.27 PDF + type: heading + level: 3 + collapsed: true + - + id: ob-pdf-style-selection-light + title: PDF styles (Light) + title.zh: PDF 样式 (明亮) + type: class-select + allowEmpty: false + default: pdf-style-default-light + options: + - + label: Default + value: pdf-style-default-light + - + label: Invert colors + value: pdf-style-invert-color-light + - + label: Green + value: pdf-style-green-bg-light + - + label: Warm + value: pdf-style-warm-bg-light + - + label: Custom + value: pdf-style-custom-bg + - + id: ob-pdf-style-selection-dark + title: PDF styles (Dark) + title.zh: PDF 样式 (黑暗) + type: class-select + allowEmpty: false + default: pdf-style-default-dark + options: + - + label: Default + value: pdf-style-default-dark + - + label: Invert colors + value: pdf-style-invert-color-dark + - + label: Green + value: pdf-style-green-bg-dark + - + label: Warm + value: pdf-style-warm-bg-dark + - + label: Custom + value: pdf-style-custom-bg + - + id: custom-bg-pdf-style + title: Custom PDF background + title.zh: 自定义PDF背景颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: style-options-for-other-plugins + title: 3. For Plugins + title.zh: 3. 插件样式 + type: heading + level: 1 + collapsed: true + - + id: style-options-for-admonition-plugin-header + title: 3.1 Admonition & Callout style + type: heading + level: 2 + collapsed: true + - + id: admonition-bg-color + title: Admontion codebock and Callout background + title.zh: Admonition 和 Callout背景色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#FFFFFF00' + default-dark: '#11111100' + - + id: admonition-bg-color-same + title: The same as the title color + title.zh: 背景色与标题色一致 + description.zh: Obsidian 默认callout样式 + type: class-toggle + default: false + - + id: callout-style-settings + title: callout style settings + title.zh: Callout 外观样式设置 + type: class-select + allowEmpty: false + default: admonition-bg-color-same + options: + - + label: Default + value: admonition-bg-color-same + - + label: Traditional + value: traditional-callout-style + - + label: Border + value: border-callout-style + - + label: Shade + value: shade-callout-style + - + id: full-width-callout + title: Full-width layout for callout & admonition + title.zh: callout和ad块全宽显示 + description.zh: 不收缩减栏宽影响,全宽显示callout块 + type: class-toggle + default: false + - + id: style-options-for-admonition-plugin + title: Admonition special style support + title.zh: 是否开启Admonition特别样式支持 + type: class-toggle + default: true + description : 目前支持ad类型:blank 全透明框🔸def definition🔸thm theorem🔸lem lemma🔸cor corollary🔸pro proposition 🔸hibox 自动隐藏框🔸col2 col3 col4内容分多栏🔸kanban 伪看板🔸table 表格单行全部显示❗使用方法❗下面以thm类型为例,在admonition插件的设置页面中,类型填 thm,标题填 定理,图标选择hand-point-right,颜色自己选比如浅绿色,添加成功后,在正文中使用代码块```ad-thm 即可激活。其他类型以此类推。 + - + id: style-options-for-calendar-plugin-header + title: 3.2 Calendar + type: heading + level: 2 + collapsed: true + - + id: toggle-calendar-shadow + title: Toggle shadow of current date + title.zh: 开启日历中当前日期的阴影 + type: class-toggle + default: false + - + id: toggle-calendar-transparent + title: Transparent calendar background + title.zh: 日历背景透明 + type: class-toggle + default: false + - + id: style-options-for-calendar-plugin + title: Calendar + type: class-select + allowEmpty: false + default: style-options-for-calendar-plugin-default + options: + - + label: Default + value: style-options-for-calendar-plugin-default + - + label: Style 1 + value: style-options-for-calendar-plugin-style-one + - + label: Style 2 + value: style-options-for-calendar-plugin-style-two + - + id: rainbow-checklist-folder + title: 3.3 Checklist plugin + type: heading + level: 2 + collapsed: true + - + id: rainbow-checklist + title: Rainbow checklist + title.zh: 彩虹色条目 + type: class-toggle + default: false + - + id: style-options-for-kanban-plugin-header + title: 3.4 Kanban + type: heading + level: 2 + collapsed: true + - + id: style-options-for-kanban-plugin-static + title: Static + type: class-select + allowEmpty: false + default: style-options-for-kanban-plugin-static-default + options: + - + label: Default + value: style-options-for-kanban-plugin-static-default + - + label: All color (instead of images in light mode) + value: style-options-for-kanban-plugin-static-all-color + - + label: All image-1 + value: style-options-for-kanban-plugin-static-all-image-one + - + label: All image-2 abstract + value: style-options-for-kanban-plugin-static-all-image-two + - + label: Plain + value: style-options-for-kanban-plugin-static-plain + - + label: Little color + value: style-options-for-kanban-plugin-static-little-color + - + id: style-options-for-kanban-plugin-dynamic + title: Dynamic + type: class-select + allowEmpty: false + default: style-options-for-kanban-plugin-dynamic-default + options: + - + label: None + value: style-options-for-kanban-plugin-dynamic-default + - + label: Neon-1 + value: style-options-for-kanban-plugin-dynamic-neon-one + - + label: Neon-2 + value: style-options-for-kanban-plugin-dynamic-neon-two + - + label: Neon-3 + value: style-options-for-kanban-plugin-dynamic-neon-three + - + id: style-options-for-buttons-plugin-heading + title: 3.5 Buttons + type: heading + level: 2 + collapsed: true + - + id: style-options-for-buttons-plugin + title: Buttons special style support + title.zh: 是否开启Buttons特别样式支持 + type: class-toggle + default: true + description : 目前内置class:🔸circle_btn 圆形按钮🔸blank 透明按钮🔸grad_button渐变按钮🟣g_purple 紫色🔵g_blue蓝色🟢g_green 绿色💚g_lightgreen 浅绿🟡g_yellow黄色 + - + id: style-options-for-buttons-plugin-heading + title: 3.6 Dataview + type: heading + level: 2 + collapsed: true + - + id: style-options-for-dataview-plugin-heading + title: 3.6.1 Dataview list + type: heading + level: 3 + collapsed: true + - + id: folder-dataview-list-style + title: Style + title.zh: 样式 + type: class-select + allowEmpty: false + default: dataview-list-style-pacman + options: + - + label: Pac-man + value: dataview-list-style-pacman + - + label: Normal + value: dataview-list-style-normal + - + id: style-options-for-dataview-table-plugin-heading + title: 3.6.2 Dataview table + type: heading + level: 3 + collapsed: true + - + id: dvtable-style-options + title: Dataview table format + title.zh: Dataview 表格格式 + type: class-select + allowEmpty: false + default: default-dvtable + options: + - + label: Defaut table + value: default-dvtable + - + label: Wrapped table (break all) + value: wrapped-dvtable + - + label: Non-wrapped table (limited cell width) + value: no-wrapped-dvtable-cell + - + label: Non-wrapped table + value: no-wrapped-dvtable + - + id: auto-serial-number-dvtable + title: Automatically add serial numbers to tables + title.zh: Dataview表格自动添加序号 + type: class-toggle + default: false + - + id: full-width-dvtable + title: Full-width dvtable display + title.zh: dataview表格全宽显示 + description: for Reading View, require Contextual Typography plugin + description.zh: 阅读模式下,实现效果需要安装Contextual Typography插件 + type: class-toggle + default: false + - + id: style-options-for-dialogue-plugin-heading + title: 3.7 Dialogue & Chatview + type: heading + level: 2 + collapsed: true + - + id: dialogue-style + title: Dialogue & Chatview Style + title.zh: 聊天框样式 + type: class-select + allowEmpty: false + default: dialogue-style-default + description.zh: Wechat样式适合titleMode:all ,chat样式适合 titleMode:first + description: Wechat options is for ’titleMode:all‘ ,chat options is for ‘titleMode:first’ + options: + - + label: Default + value: dialogue-style-default + - + label: Wechat + value: dialogue-style-wechat + - + label: Chat + value: dialogue-style-chat + - + id: style-options-for-dialogue-plugin-heading + title: 3.9 Obsidian Memos + description: Adapted from @Quorafind's CSS snippet + type: heading + level: 2 + collapsed: true + - + id: memos-inputbox + title: Put input box to bottom + title.zh: PC端memos输入框置于页面底部 + type: class-toggle + default: false + - + id: heatmap-light + title: Heatmap in Light mode + description: Change the color of heatmap + type: class-select + allowEmpty: false + default: memos-default-light + options: + - + label: Theme color + value: memos-default-light + - + label: Grass + value: grass-light + - + label: olive + value: olive-light + - + label: Frame + value: frame-light + - + label: Ice + value: ice-light + - + label: Magenta + value: magenta-light + - + title: Heatmap in Dark mode + description: Change the color of heatmap + id: heatmap-dark + type: class-select + allowEmpty: false + default: memos-default-dark + options: + - + label: Theme color + value: memos-default-dark + - + label: Grass + value: grass-dark + - + label: Olive + value: olive-dark + - + label: Frame + value: frame-dark + - + label: Ice + value: ice-dark + - + label: Magenta + value: magenta-dark + - + id: style-options-for-backlinks-panel + title: 3.10 backlinks panel + title.zh: 3.10 反链面板 + type: heading + level: 2 + collapsed: true + - + id: full-width-backlinks + title: Full-width backlinks panel display + title.zh: 笔记中的反链面板全宽度显示 + type: class-toggle + default: false + - + id: style-options-for-quiet-outline + title: 3.11 Quiet outline + title.zh: 3.11 Quiet outline + type: heading + level: 2 + collapsed: true + - + id: quiet-outline-optimize + title: Optimize quiet-outline plugin + title.zh: 美化 quiet-outline 插件 + type: class-toggle + default: true + - + id: build-in-style-folder + title: 4. Built-in style intro + title.zh: 4. 内置样式介绍 + description: There are some built-in CSS classes that should be manually declared in the YAML area. Details refer to the TIPS demo vault for Blue Topaz on Github. + description.zh: 主题内置css类,手动在文档YAML区域进行cssclass声明,详细用法可以参考主题tips库,可以在主题QQ群(社区)获取。 + type: heading + level: 1 + collapsed: true + - + id: built-in-style-kanban + title: Pseudo-kanban + title.zh: 伪看板 kanban + type: heading + level: 2 + collapsed: false + description: ❗cssclass:kanban❗ A kind of kanban-liked style for unordered lists. (Adapted from Spectrum theme by @Wiktoria Mielcarek) + description.zh: ❗cssclass:kanban❗ 实现类似看板样式并排显示,只对无序列表生效。改自Spectrum theme by @Wiktoria Mielcarek + - + id: simple-p-kanban + title: Simple pseudo-kanban + title.zh: 单色伪看板 + description: Remove colors of pseudo-kanban + description.zh: 移除伪看板头部颜色 + type: class-toggle + default: false + - + id: remove-shadow-p-kanban + title: Remove shadow of pseudo-kanban + title.zh: 移除伪看板触发阴影 + type: class-toggle + default: false + - + id: colorful-p-kanban + title: Colorful pseudo-kanban + title.zh: 多彩伪看板 + type: class-toggle + default: false + - + id: blur-p-kanban-frosted-glass + title: Blur radius (For Frosted Glass Style) + title.zh: 模糊程度 (毛玻璃效果) + type: variable-number-slider + default: 2 + min: 0 + max: 8 + step: 1 + - + id: p-kanban-color-1 + title: pseudo-kanban color 1 + type: variable-themed-color + opacity: true + format: hex + default-light: '#52aaf365' + default-dark: '#3496e652' + - + id: p-kanban-color-2 + title: pseudo-kanban color 2 + type: variable-themed-color + opacity: true + format: hex + default-light: '#84ecec65' + default-dark: '#2ec4c452' + - + id: p-kanban-color-3 + title: pseudo-kanban color 3 + type: variable-themed-color + opacity: true + format: hex + default-light: '#94ec8c65' + default-dark: '#38ce2a52' + - + id: p-kanban-color-4 + title: pseudo-kanban color 4 + type: variable-themed-color + opacity: true + format: hex + default-light: '#dce28765' + default-dark: '#d2dd3852' + - + id: p-kanban-color-5 + title: pseudo-kanban color 5 + type: variable-themed-color + opacity: true + format: hex + default-light: '#eeb36f65' + default-dark: '#eb973752' + - + id: p-kanban-color-6 + title: pseudo-kanban color 6 + type: variable-themed-color + opacity: true + format: hex + default-light: '#f18e8e65' + default-dark: '#f3424252' + - + id: p-kanban-color-7 + title: pseudo-kanban color 7 + type: variable-themed-color + opacity: true + format: hex + default-light: '#e677e065' + default-dark: '#e45bdd52' + - + id: p-kanban-color-8 + title: pseudo-kanban color 8 + type: variable-themed-color + opacity: true + format: hex + default-light: '#ba8be165' + default-dark: '#b962ff52' + - + id: p-kanban-card-color-1 + title: pseudo-kanban-card subitem color + title.zh: 伪看板子项背景色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#f9f9f99b' + default-dark: '#0000003f' + - + id: p-kanban-border-color + title: pseudo-kanban-border color + title.zh: 伪看板边框颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#a0a0a060' + default-dark: '#00000000' + - + id: built-in-style-code-wrap + title: Code Wrap + title.zh: 代码行自动换行 code-wrap + type: heading + level: 2 + collapsed: true + description.zh: ❗cssclass:code-wrap❗实现代码块中的代码行自动换行。 + description: ❗cssclass:code-wrap❗ Can be used to wrap code in code blocks for individual .md file + - + id: built-in-style-inline-list + title: List in a horizontal row (inline list) + title.zh: 行内列表 inline-list + type: heading + level: 2 + collapsed: true + description.zh: ❗cssclass:inline-list❗列表项横向排布。 + description: ❗cssclass:inline-list❗ To make the list show in a horizontal row. Meanwhile, it makes the list show inline which can be used with inline images (like ![[xxx.jpg|inlineR]]) + - + id: built-in-style-img-grid + title: Image grid + title.zh: 图片自适应横排显示 img-grid + type: heading + level: 2 + collapsed: true + description.zh: ❗cssclass:img-grid❗实现图片类似网格一样自适应横排显示。也可以使用类似格式单独调整![[obsidian_image.png|inl|100]] (adapted from https://github.com/iEchoxu/obsidian_orange/blob/main/.obsidian/snippets/image-grid.css) + description: ❗cssclass:img-grid❗ To make images arrange in a grid in the preview mode. (adapted from https://github.com/iEchoxu/obsidian_orange/blob/main/.obsidian/snippets/image-grid.css) + - + id: built-in-style-matrix + title: Eisenhower matrix + title.zh: 表格四象图分布 matrix + type: heading + level: 2 + collapsed: true + description: ❗cssclass:matrix❗ Usage https://forum.obsidian.md/t/theme-spectrum-version-1-0-0-and-resise-graphs-controls/12688/34 (Adapted from Spectrum theme by @Wiktoria Mielcarek) + description.zh: ❗cssclass:matrix❗ 实现N*2表格四象限分布。表格内容使用![[XXX]]引入 见 https://forum.obsidian.md/t/theme-spectrum-version-1-0-0-and-resise-graphs-controls/12688/34。改自Spectrum theme by @Wiktoria Mielcarek + - + id: built-in-style-full-width + title: full-width layout + title.zh: 全宽显示元素 (i.e. wide-dataview, wide-table, wide-callout and wide-backlinks) + type: heading + level: 2 + collapsed: true + description: ❗cssclass:fullwidth wide-dataview wide-table wide-callout wide-backlinks❗ (Adapted from https://github.com/efemkay @ Faiz Khuzaimah) + description.zh: ❗cssclass:fullwidth wide-dataview wide-table wide-callout wide-backlinks❗ 分别实现整页,dv表格 md表格 callout 反链面板全宽度布局。改自https://github.com/efemkay @ Faiz Khuzaimah + - + id: topaz-community + title: Supported by Topaz Community 😁 + title.zh: 感谢Topaz社区支持😁,欢迎来访,QQ群:908688452 + type: heading + level: 1 + collapsed: false + - + id: bt-buyacoffe + title: Support me + description: "[https://www.buymeacoffee.com/whyi](https://www.buymeacoffee.com/whyi)" + type: info-text + markdown: true + - + id: bt-github + title: Star the theme + description: "[https://github.com/PKM-er/Blue-Topaz_Obsidian-css](https://github.com/PKM-er/Blue-Topaz_Obsidian-css)" + type: info-text + markdown: true +*/ + +/* @settings +name: 🥑Blue Topaz Codebox Settings +id: Blue-Topaz-Codebox-Highlight +settings: + - + id: code-header-theme + title: Codebox highlighting + title.zh: 代码框高亮语法设置 + type: heading + level: 1 + collapsed: false + - + id: code-theme-selection + title: Codebox highlighting schemes + title.zh: 代码高亮主题 + type: class-select + allowEmpty: false + default: code-theme-bt-default + options: + - + label: bt-default + value: code-theme-bt-default + - + label: Solarized Light + value: code-theme-solarized-light + - + label: Material Palenight + value: code-theme-material-palenight + - + label: Dracula + value: code-theme-dracula + - + label: Gruvbox Dark + value: code-theme-Gruvbox-dark + - + label: monokai + value: code-theme-monokai + - + label: sublime + value: code-theme-sublime + - + label: Custom + value: code-theme-custom + - + id: code-style-settings + title: Codebox style settings + title.zh: 代码框样式设置 + type: heading + level: 1 + collapsed: true + - + id: mute-code-indent-line + title: Mute codebox indent line + title.zh: 取消代码块缩进参考线 + type: class-toggle + default: false + - + id: code-line-number + title: Code box showing line numbers (Editing mode) + title.zh: 代码显示行号 (编辑模式) + description: csslass declares code-line-number to be available for the current document + description.zh: csslass 声明code-line-number 可对单篇note生效 + type: class-toggle + default: false + - + id: whole-code-wrap + title: Code wrap (Reading mode) + title.zh: 代码换行 (阅读模式) + type: class-toggle + default: true + addCommand: true + - + id: remove-language-type + title: Toggle showing types of code languages + title.zh: 移除阅读模式下代码名称 + type: class-toggle + default: false + - + id: nowrap-edit-codebox + title: Non-wrap Codebox (Live preview) + title.zh: 代码不换行 (Live preview) + type: class-toggle + default: false + addCommand: true + - + id: letter-space-code + title: Letter spacing for code + title.zh: 代码字间距 + type: variable-number-slider + default: 0 + min: 0 + max: 2 + step: 0.1 + - + id: code-box-style-option + title: Codebox style + type: class-select + allowEmpty: false + default: codebox-default-style + options: + - + label: Default + value: codebox-default-style + - + label: Frosted Glass + value: codebox-frosted-glass + - + id: blur-codebox-frosted-glass + title: Blur radius (For Frosted Glass Style) + title.zh: 模糊程度 (毛玻璃效果) + type: variable-number-slider + default: 2 + min: 0 + max: 8 + step: 1 + - + id: code-background-colors + title: Codebox highlighting background colors + title.zh: 代码框高亮背景色设置 + type: heading + level: 1 + collapsed: true + - + id: background-code + title: Codebox background color + title.zh: 代码块背景色 + type: variable-themed-color + format: hex + opacity: true + default-light: '#292d3e' + default-dark: '#292d3e' + - + id: muted-code-activeline-bg + title: Mute codebox active line + title.zh: 取消代码块当前行高亮 + type: class-toggle + default: false + - + id: code-active-line-background-color + title: Codebox active line background color + title.zh: 代码块当前行背景色 + type: variable-themed-color + format: hex + opacity: true + default-light: '#353a50' + default-dark: '#353a50' + - + id: code-selection-background + title: Codebox selection line background color + title.zh: 代码块选中背景色 + type: variable-themed-color + format: hex + opacity: true + default-light: '#353a50' + default-dark: '#353a50' + - + id: code-block-colors + title: Custom codebox syntax highlighting colors + title.zh: 自定义语法高亮颜色 + type: heading + level: 1 + collapsed: true + - + id: code-normal + title: Code block normal color + description.zh: 代码框普通字体颜色 + type: variable-themed-color + format: hex + opacity: true + default-light: '#d4d4d4' + default-dark: '#d4d4d4' + - + id: code-keyword + title: Code block keyword color + type: variable-themed-color + format: hex + default-light: '#c792ea' + default-dark: '#c792ea' + - + id: code-value + title: Code block number color + type: variable-themed-color + format: hex + default-light: '#ff5370' + default-dark: '#ff5370' + - + id: code-type + title: Code block type color + type: variable-themed-color + format: hex + default-light: '#decb6b' + default-dark: '#decb6b' + - + id: code-property + title: Code block property color + type: variable-themed-color + format: hex + default-light: '#c792ea' + default-dark: '#c792ea' + - + id: code-variable + title: Code block variable color + type: variable-themed-color + format: hex + default-light: '#f07178' + default-dark: '#f07178' + - + id: code-variable-2 + title: Code block variable-2 color + type: variable-themed-color + format: hex + default-light: '#eeffff' + default-dark: '#eeffff' + - + id: code-variable-3 + title: Code block variable-3 color + type: variable-themed-color + format: hex + default-light: '#f07178' + default-dark: '#f07178' + - + id: code-qualifier + title: Code block qualifier color + type: variable-themed-color + format: hex + default-light: '#decb6b' + default-dark: '#decb6b' + - + id: code-operator + title: Code block operator color + type: variable-themed-color + format: hex + default-light: '#89ddff' + default-dark: '#89ddff' + - + id: code-hr + title: Code block hr color + type: variable-themed-color + format: hex + default-light: '#98e342' + default-dark: '#98e342' + - + id: code-builtin + title: Code block builtin color + type: variable-themed-color + format: hex + default-light: '#ffcb6b' + default-dark: '#ffcb6b' + - + id: code-tag + title: Code block tag color + type: variable-themed-color + format: hex + default-light: '#ff5370' + default-dark: '#ff5370' + - + id: code-string-2 + title: Code block string-2 color + description: class-name + type: variable-themed-color + format: hex + default-light: '#f07178' + default-dark: '#f07178' + - + id: code-punctuation + title: Code block punctuation color + description: code punctuation, bracket color + type: variable-themed-color + format: hex + default-light: '#ff5370' + default-dark: '#ff5370' + - + id: code-comment + title: Code block comment color + type: variable-themed-color + format: hex + default-light: '#676e95' + default-dark: '#676e95' + - + id: code-string + title: Code block string color + type: variable-themed-color + format: hex + default-light: '#c3e88d' + default-dark: '#c3e88d' + - + id: code-attribute + title: Code block attribute color + type: variable-themed-color + format: hex + default-light: '#c792ea' + default-dark: '#c792ea' + - + id: code-function + title: Code block function color + type: variable-themed-color + format: hex + default-light: '#c792ea' + default-dark: '#c792ea' + - + id: code-important + title: Code block important color + type: variable-themed-color + format: hex + default-light: '#c792ea' + default-dark: '#c792ea' + - + id: cm-atom + title: Code block atom color + description: Frontmatter keys color + type: variable-themed-color + format: hex + default-light: '#f78c6c' + default-dark: '#f78c6c' + - + id: code-meta + title: Code block meta color + description: Frontmatter punctuation color + type: variable-themed-color + format: hex + default-light: '#ffcb6b' + default-dark: '#ffcb6b' + - + id: code-language + title: Code block language color + type: variable-themed-color + format: hex + default-light: '#ff5370' + default-dark: '#ff5370' + - + id: codeblock-folder + title: Inline code + title.zh: 行内代码 + type: heading + level: 1 + collapsed: true + - + id: background-code-2 + title: Inline code background color + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: text-color-code + title: Inline code color + title.zh: 行内代码颜色 + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: font-weight-inline-code + title: Font weight of inline code + title.zh: 行内代码字重 + type: variable-text + default: bold +*/ + +@font-face { + font-family: 'Lucida Handwriting'; + src: url('data:font/woff2;charset=utf-8;base64,d09GMgABAAAAAC48AA0AAAAAS8gAAC3kAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABlYAXAiDYAmIGgrxUON6C4ESAAE2AiQDgiAEIAWObQeBQAyCCht2Q0VGhI0DQMCn7cj+Px1oIVe/XcEwPK06XcllLaTKLSw8vNi59NYycKp6Dyx9xoZgRwg+7FlrvJvuKE6iG9WwdKFi/PzY9XhOYIgCFpSRd4jCPwJrKXvCDOPPhlJshCSzFq2V1Ti9dxdCUABokYVMJMo4RgsIksCByt8MwLahn7eooCjigzshc4LDCM4iiAoOePOYm7l5lZmdzdq+NvNXunTPhHIIT7m8DJKMqLF0MpIUPBmAqgBeuGmA14CViyZFjyVVqf1jmy+0N2TqmhA6vphnfty/TtxO7g+Sli91OlWe9/92t70/ok6EAQWUkPT/v9Oq6/f0hE8MlkG2Y0dO2D01nQwuoRRZe9SVBk51NVB1DRDV7icwf+3n8mdOeslLnB2tluNtd6Cw7ouSlJbsuWRPCoxBMThDzdunVkm63ztVByXwpMwByNg/60xokqoAFcAWgRK4ASqC6rHP/Mx0m+ue7Tz37R5NAqkgmhsk+j+bZrsrHaztECgECvHrgZsyRZdy9v/Z0c6MLFjpQCvdZa09sBS0fQSrQx3rwtW9awNcpbN9hLYPGNpQdVXKvFRX5qXLS1FUBB1w0XUpqizL2WIEKqK0/e7OD3+zvqKrzrYsTcnEmImRkHL7d8+kGSDdRc2QAfSxWgIgja805g+CuIGUpIWuFNyf8NGMumspIEHk7i3urTamae5t26wyF7ysISnQqdKY0NLaCDAcbcG5ixAl9/8PoXqqHaQS867zx3wzX8+b+WK+IBFn/fjbfMROA3Z/s6CgBZBtEZhaNdwmgmpV4wea/c7xw/zTYh1PjYiEMkYzwZ1hubmSF7kUTnUGkpWbNWn/cx4AbpNJ0Css+NUzeop5Qy/Qji4cAVtJ3387FsFVjC/r2EXCL4O6LKe72UL3IzBu8B2ugSmbbjOe00Vbw03KDtsZe+ckElIvjfCg4CVXxJbjCC9ISqkxDIpBs+zHK6Ij71RgXq7nHWROv6RI1XXSGM4NABrwLDNiEIdO80ne5LfiobLa0bg+LvvnU/+ehvGdUHSNjTiK87hXKMKTw3Jb0VqkLfpQn5mtCW3e9dzeA5zn5/1WIiZ+ughJ2i6b8sXuea8fSfjUEjuiaZBexyAhLsfLwv2PuLZvbVdMtzyD+CNkOesv12HorpP8azRaBScyxcrPy83Jzso0DT0jPS1VC11ml1RamFh5YkWKlarZ9uTMFRQ1gREaq601q3EWyO2DlECqo3Gb00jFdjR0q1p3NtjKams1kSi0HMpNg3JG8avD6C650uaNyrPzfIp//E2JCG2pJsZV9TKRjqeGHY0R0TUd3cVhyYVjGmStHGczeyDONGAtLl55PPePLpteI24lmTlhLi+tOkIk7lZzrGcOKHUgvg8MD/GgH1tNy7hzVlV900Bi97FeBFaNyfrXCbBFXIZuY7RFR0xpPjyha8aBzF0FeoWe0M/6g2sehgf+lZOiYw1ejDWrv7w+dsnrOR7G2q0CDe1B/SHW6m45jn/pLchwLuXDQ4k21tDuqdw5y/hTqhyZoV665MmpLNPYReWpGeaADyw+O8QoxVhWzYblqAgonpEI7Svq+pl6a+/wm3pOZafHVKw6y/zAObd2DGT7ykadRetq86axpqTQp3cnJiU/ICExOlCP5xVKCmrMEBTkshmsDi2BtI8itHsMw0LFDzUGikH2Fftw1ZlE+uUjGGsLqZTiewwspDAq/0Mi2J/fO60DxYmFN/AC6kn43iaohbqOGRnuz0bbGKWzrKyaBW5Wi9jAphWKDZwitHo3HL8065SxVNV1uSe7FvROuuCtNm+r0EbOroOVpfsYJmrbHJQf72pzK3RsR8FUJzdzb/fjGKPdfUiTlRNH+XApkhNfiYElRE09lNO1iMiQbPX0pvLJWU3Ip77T0WVub8q6I3WlzjvYPbzVy6jC5FpDg5zmwhx9zzzwj6HF+WFSasJNeS1oL6H6GkDcjssouTC9TQLg+H9hIEh+Ybf4nkZgQNO71YN6aBz2FZuODrMx2DuiLxvEMAYV+/3pUd+jqS1JHt0XC2kVbJVbk/uKQREezhRnxw1GzjjaCo/205mru7QvbYcjyeanY1HYiWhCF+E370dqJoVSHgmzY3s5iJaUJXV5qjmx6g6lpJuye+MxyVNBQWO0G5LyN/0Flg/VXopY1L7ORVGYglYlTTDhIwkhQJdFaY9lE3qjcbG5LDt12x1LEZpVddgz9LpyJOkHRYTmVlSdz2Ex2bNDIi0R6lIC1AeSAi6EJTdiXU3gbD8Wj7QORSBgMEgnQgAuRRzDn3DNWAsR45B7zerwtEqgvnasfZJNt2iiGcYJxHFNt6URAEWJonIFNZaixsE777ZVFW7rq3PVBrm1wjECPry8iZ02UTC1f+J03GbQ8zi3MTAdf8P0c1UQS+oecktGEu8BAICRX4AskYKLfqw4SsSK6TuoYTtjA8KSs8yOwjTwS0a5/Kk1Qmql3CQ1tonhu5E7GiQBZUZ9Aj8pImHakrDtvIMoEoct0USRxkgFISYvtjfjGUsQwmPiV4sSQFoZtWc+cVv7TkD0Yo8/KurcrOJfNYyTRCMH0GqjOOAK7hERCJyFfPRJQEl6hikJxwpEWYzAsvIDxZ1Ig486ZChojjmMOZV/6VMS1yKAHvlFqjDUJSC7Z5swtb4LSM+yoTi1TLYHOIPpjlGZVSl86dzCOexZBjgVcKwWgDZPQpnq5cyya/1DM58MnR94i37hEhLX9C5JHzvigI9I7TUhXtx0k/i+JfwW4NL2YZ7xd8fJfhl+Ym72SXLkckGkWvZobq2Bh5KwQH6UyrV+GEGZMm9kUt2++JrkdnLSGkFFlEq1ylZNW7debGuWBlrdzc723jb5IQ+SgHslbo7xMJX4/p12RmKL2PPOuo1MbZ2qM+7zyGaNyLsZrtZPdXXAceAiYkHm4a5lId3ISES/LmEYOpr6RRWTmeYZhNuFlWNVeEaSH0weDJCAhaPV2cQMnh9Nkt5o5wBmPVeRHQAby7mHok9A0hwS93/roeBTmdn/4ppmlZDhreCJSce9H7gXV1mBekJ2aiC3ibOV23a0ti+5bnZTYy5Ebs82K986gjLgF3WSmVhWWVQ6nnrX3/iHZGMXwH7ZgHI/7o3/YGxzry0a6MQB87xRsmF/6DR7dNTBb2ZjMQ2uI4DVb5u1JG3MNFcOuXEHScZev+2DPdldTHToy7lm2PrBTYYJYmLwEI+JgrrC8vkgO1YzJ/RPyIdPJtdO99fJeqJCo+jJ9NHKU2d+dLhtql1vImT9pX1KKOCC1zT4HLWu+lDU7/94KtvjjTdBankYK4si6hQ3Ua8bUmrJY3loEHaWFEHIAYGQxqDAWEBP6jAXuLazm0Ya65K77e4Bm4Ck7D1JYkSAAjQpC83f7JEBRg34b5byr1KBCjuJSOxSwOJwOUquwGhinNKuvJSTmP8U2v/jGyX/GJh/tTbl5oYPFlobPvFEx7xLmA+ldaSSInqOkcFR7JEIqdeKQwbaRbs9OjHvkw2bpSZmTFQiuT8rEomaWYK6LlGZhAQsbsq4Llb/63zjxjZlaGQ2N9u7BkXRZSKnODaEqVXTWi61J7mEyJELJYaxjcRlpmJ6XlqJukCfUJBghmTBb97sSRQ1i0ZFC1pwQjbS+d3epR9UC9B121Goh1z8V5Fb04CkNO623uy0WUDy0GCPqifaP+omfAqvUBOAEq7F9QwVscZ7tywYdI3VR9wZx77h6XoK2z3aAxFW+Qpnb6PPSnCq6S9uiqU9IJ4GU2mqbnDIR4TuYGwf1UYDkyEaUwLY7LjA5p4QEg/vFDoEUWDhUgUcbiMlnlih4Qf1NsYM10yRXxjiE/TC2EJYSJBGzvM8HILTQG8acO7Y34qzMSeAba0hZJE+73WjW2QmCVy8Q7vNkM30/V4nO/B8xoT0SH1ndhYcb5bi3g3W0kW7I1T+jCSls8lZuEPGLCXTimVmZup3O8DjiPttruwirf/5cPtCX9pTcN4UELMaR+TI56eCIoyai9Irc2ebJYwYuQFjTdZlYPP4FEpqnVAm5kVfXaY4uVmCYUj56/FdgRrdfaEb8VHWba4Q2MpX/GQYaA0+lqyHJspTdlj7ONeabrww+9lzkeV18SVMsudq4PvkY+Z/KC9sjhn/CHoBwXLeq40x+Soe5czAHFQou16tWR0ln67OgCWrH3R34gv0lK+FjgZGN6+ClgLK3PecDKcWG3RjZW9chZxmKAEJTFAc9f5z1saxG5/3aR0wzcZeWR0+0VskcngySoM/GudEeEic82nLtrlgH/0xojIzUZxWIxu/lDo6eXqw8r82YM/QvByg/afwnG5Ae+fz4btHGgUlWWKzI07BdJTQwLDXZD6UMECEeoVnucAOWV3rUdwAu9ZpGpCcLZRItgOZNyOBLvamWFvwqhzE5asmuagNruwLsywsQ0SEmIIqVMk4N/Bx6GBkuPJ4DlpoWAZrW68xaPt30BuaP8Qdbs9UiwqhKbs+1FO98crf81f6VR23vs774kevJ/ovLy+l+stfrzv/fXb76cwTPPXepiTiy95xb5/qESYR2JwfO3nQIAn76jGKy6yuKT+tupBT25HymxLScRq2jtTpWlPzViHc1D9enXh0I2P8TeDfY4Li+9XGrtrhO8P2kBAdSECNOCCB2uloLv6xemTd7tOHe8qnx9R6H54YHh/+efr0ytZk1Y5e4s3EC9zasqTI4tyQgo3hjGGjiY+ik5OVhXO7cwZBZ0gE6ue6C99nnz6d2SIEaXfO/LjPzocm6c0VsHevgviBxezazn8D4iLmW1SFqQ5INVY7tS3Hc6g0cze0Jln1uZLv0dM7oNJozZk7+7//MI07X1xBQsZopBUdBvbys5Z+jW2RHb7lQExyNIhBOxTkNlRE0WlFp5Rn+qM8NW3iwa+dC16VmB3PohkKoDh03TToieNoiANi98U8yYn+16hGfmWSb68+aLGvL3LM8XkiKiIcPcgAj6rvPp17RnpToAyPfA4g7RDWbf6LPsRRgh7stJ+2AVNWtxtE1xGr87anj+Z9UqZlas5YgjvrN9ToptD8MntnH7wGZKC0WTsNWvjhBPCJOL+vbhmG1KPo80CJwcQYvdZrfT3LWodjQ437bfRL176/AlhYSvXo+mV0byb540Jo2R8ffE74EXTz1q8DXkglqb0i1yUYKDx5FK2fhQNPd8oefrs95WN2tKRejQaD5pfbO/kQ1I0G+CYWl1y8Aq1Sk14ewP9l21p8HHpOL9tyAKRidIUk4BibjniTbVcbOv62h9EoKlCVE2ntkoTzpBjHvAEfGMiwFwfD0SZRVvpzrv75uc4X0LFvNm8Xu6ALExw3Yk6m1yxoRIJAm3EOdCcrHU1O5zfV0HgruwSSF9Ugi6FzpzjTbCDKCW0aK2d2zNGbX0moZwIcMhm3zpQ62Kbme+/jRUMRA8RoLjvzprKgLXfn9XNbz2yc3uZX+g9pp9hGCXq1sWO3oVObXtdu/V3c9f6j+blc5wN0WFECal09f0ebot+Vc/kZmmHm2utxDlRnK21Nbu0By7b+IMvsGloflCvLVCIPgjbxnrniD4bV0yqRe3gX3VMjPGt2SKi/UY011fAX4XSPTtqA+2Yge4ksb5UTX41W2o3HG9zHIlXT764DA0uXCcAg/1SVLXCOmj0dGyCbgDOjWMWoqJbfS1IPqB1O8CTU6A2AR8HMKq2lXG9KlPKTLJ+vEYpSmRHXN29v3n6Vc6HcP6oyQNRYlbu4okbKVoJeajSAFasM7fcJWIZFaxXrRyWHMdWyQ7yykcy0qzwVjQgwaJPrQHWy0tHiqZoeZyqSB8AX8R65Pd/Azbe8KjihDQQaYjTndscKK2I2mpubusPv8lAsII6GvAOJOX+ejzq384638aSS4w01OszECyDofuYobAlga6QC7e8IM9HZ0mZgIcHvJd/Ym0sN83yufJVuUYC94guP9CK5+k/zYrRwt9S7VtPyVs5rPEs2dY7lm+qMaLfLh2DqZDG+pwLtuHhi1ne2SqOMyDOTk/WtPf1xaI7ZF3phEXQ5os7fNdTELzU+NvNfewGI4jHIMurBWaBR+dI806UIbCnZ9Vemfww2IOtYb2Ke9y1OdAH/W/6FJ6i+9Hj3CsPei/9u63l8yolISt3BilQ2rR67GLXX6oL5rY+6brelG16j1078b2m7+W403SWGr0mgsEvCxErMlQCkhM1Jk8tT/OOWotuWxOoxx4TEHu0JBL4zsVEQgcGD3PX2gWv6VQXQLpC054NoiQ9F5BT3ZfD45vdbur4/gNHPXVrNAS+x+AnCINLLidkwvVDZ0FhFaNWux2FrsBsWj97Kmj9W7+mg4wKxjmuDEw997c+qrR790Fmxur9MTqgZ5pqtrLmv0XfcwQj1wavn2g150TvITFh8EUGBfmIp/JV8gb+1tq7pWpfhQbzgf+Rqdsu3E19UN25xHGhOVjo6XCWp0/Erdip8lChq5miEm2nnK4aPLBwYrL8wkZbz5KqAc+X42BHr7y/yukhens6U4ImN3PHOFJILpbE0hPp1e+VagM7/H30gzqU57VxGqGglhBT0kJ/YKtszdW+nbCDlKb6HxtSZG1ampUP+0QhVlH/LIZt5k4Fz2/Mx6niqKj6CGa4mJHlkYUpMovcmlRaPcRp1dHLlmc+qH14KTd/7TG6zMCCR7qqEGRFFKwfbxf4z00hq98/66vqGujvYJS4JVZjW0aFx3hyNd7Xh0dxYgZQKZrhty+Clci68x1KPM9ZZ+IG9xgEiUF55iGeEGEg8Ze5K5dHAblVagK6vOaZPMg2AzhKWVql22nbOBXfi1T3D/bhFfW/28I+r/eUKw/+6FShJfthVqAoh4Fqo3ri91YeoSepQIdfHiSAfMd0n7MeK2pswMcWW72Qj6hoIFSZyVfHzVoV6iTNIYy/vnYUKaRfFN12j1wdW2RnFgaGwTznHMrMXz3r4HocY+vo5OCzFvMPNOsxJLv+h6mhxk+291L6dKSLzCC5H1KDqG9MWIpKlCh1mT2XG1J2yDz+eK5d+oZ9INq3TphT4BXhrZwmVNJCywWhtDTp2rl6MJfobaTTKjcjBH/ZrSJFC07iFpssmamlmNCSyu9taSgFFM7sHCcW70lgAnkbFZXA3uugMEW8ADApwSHD+RgAPa45bSp+0s3/s3u0Ro/s0rP8SElodKJVb2xTr9Fg3zmYVV2hwndS6gkC4Bs/lGwPc8deN03bBGq1FSME+Fbbdwz9t+ThDnAm7SD5TWJdYuDbgnnv3Z9dchF74qtKQWzC4U40Oali/y+Vn8pZ0KM77iXf3T93i+TkJLlfXdd1N/nO2vKlNhKcEfTpwyfF3lPDd7J3N0Szr+wplgfKwGw+R3k0FmztVNoZ0ssLzSrp5A3dAZ+MgkQWWQxW+JivKWvXXSryb27pYDoEzZbfY6UlS9h87wFdeHH0vd1VnoF83rTkYnbzq0qUzPN3xi3xy1/jZytS3v1ywQmIfkE6oTCpYHfDKuvOzYy4yUZ+p7sEKogLT8HYdB6bQyqME030l07HR60fbvwY57sVqSYjPYiopQ5vVtZ13Un6fLW9sEyXyr4hhP27K9Gz60xHHBcKHekuXnp8xye1TLOktESzOaqpGXVKwut1ULKx+CvXUuwrS6kgm6haFYzrMIKOogNa25X33g/MC3D2KSdDu4q2Yt9b3I96n6Nkm5Fr935JGQoF5EZ5iNsSFFkGEjJPRCyHRp1LgrYKatkytkWs/itsImlF+9r2qlH6cvxJnWuKFEs3prqEW1UxS5Zff29jEo5d0Og7UpwqGRu5ntJIVuxn1JTX97TLCy+2CxMhoY9PW+diQYx2oFAazkP91xXLQJV9w8QUgyy1MmijpkzCqToXvQnYeLM9LeioTguC1bbU/7SLrmZ8mhAS4+mgDdbOUrsmjgJhjT6PwRYujeAW0J5zFEXBCFx0e111Y359a3ZIF14zRFti9jXbXLAEbk3gUUJPZMVC9VX5CgXj0GMoh7dQllOSvYhzKuiYlfLLBy8Ie53NRaKbkGxLtXc84BKOiw4NX7N5FuUsVg01ICWQ7cxEREyasWb5zJ6Qi0AXjFvxTT5P6XeRLVcx/iXGz8bB9C8yP8BBzjJ2okUTImCr9ShjENyMBqskiEOIrloKVr/EGDqWZ+9t6VMQoUI8nJf5uWGPtLqybKh+hN1Jtl/07+ttzoxFRjC3bi9W71ndlNC21UsEdSqJXHPCzI7pZ6K6uVJJK+aLhLu/J/OxPKloHUIzI+O9aOXN+jrKeiNmUvPXa7gWkzbZhn0E9JptxpOEMDWEA9cdsqoSanzSoMagzsbbh60z/qXST9bliuW0YEWIArhqasLwK30ag7fmXSy8VkbQ/xyN4qSpgLZ1riilR2XIiSzsWD6b7to3OjX1ncH+/RPYVqyH34Dvq3wZodncHw1pqi7hfbQHVqGW5U7mpCr4YQ67wAp7osuCkQvT+21ylhpz4Bwe4nr/QS6XF1iaB1vrYXNO4akbuzB/AhXGMByaseiM7xc+au56OpS5lVPnb0weTJ1JSSqlArIuVyR5Z+43GwZWCyc/0N9ScU96ENGB+hKc4DuJMQ/iI0sCuBat7MqlUYCrBruPAHjS5ZHJkRXz1w5JeRZdSC/JWXEbb/Dfzaz11h1LrRwaSsKVkVhwksWBt0D37zs/2uQhQ2AbYPVq/SmVJzNVH1efpS9U18aaVNf0vnuD3WxZtZMkNRUBX7H/A7yd5yPKgKFyIq/1LN5O15MLOftcAHziuSwTzxxVtKOdMLMaR8c5Ho439sD3/g9Ochnii/zHxtiCguOVV+fo9UZVjQOo0N+0ya9d62tHhtskAuxtGUgawASY1iyXIjHTD7/xYPwSLJb2pzu68PrkWGwqfmEx8657g5xzWpYmB9xQJi1UlKGzaa7U6AhTIpfqkOTQHZPddeTERfLaFRXTg1YBo7CpBVU/eYMIYKM3Q0KQGEIK1dj8Hwr2xXolu504ABl4HNmktBum4s1yUs31e6qtjj4SLIaPN9xJfxbfR7PVGtOlPG/yY5vraTOT3y4z6rmBrbPIjpF337P2tmyp7OjzJGMOHE9eD4lM84Re0gcwMgxooOznMwpPf8c1go/XQudncHXLBRggmStvkRJGTDFrWn61bnLnQoXAoEhaCpWSvqh/mTLie2SqWfZH6v3i2cA9TTDmnayedRfTrdaPgsvJDKdSTxhyNlT4baeu9SvPDSnyP5qK89ueTcAafZvugISP+8BZuWsZK8Y5SYQ3R2x/Nykat8AwdXwTpGDTN6oVFezCWf1w2HCB1VKYhCmKCYLb4D73GTHdp3uDj8qkyzsX4xEDT8DYx0Ua5ONTEmdK58n90FpitGCB/VpvB0l0vSjobcszP18XTKzg+cf7R6FWkPLxPFJn7TzmN6nAvKlSs6D/gGkZGNcs67vYTnSPhZmY/TVDe+BmO+Yffqw+W/NVQhhHZ8omPVH9y7D/+F19vfeYm/kWhxwj3tBp1XE3/EIIIv5R/Co+BX3pXhwOU//G26bxen6rXgy0XvZvdzVOdrkFvWQyyVWG1Ep7E5TWF2cnJi5x/45we3HV6IcQ93cbYZFXc8dSsVcer45hX09czrEopPJI6PadXpXZpIztg36OXV5h3m3m4zoWTkyuPVbmBbJQeuuGudGO1s4TuNDW0hINISjqk1QhcDKJkWBEjKFUQwNNCeYn5xrVXcHJirDZzAka77XG6IwkoLlKhVdPWB8YaMUWHbqMe8lXsy8BI1IpHXB6yjZFXjmN8IlRnvhGKwUvpSC+0HQZ3wLzNXR4tv2Z5tnx8+cqSdf1iuntA9OmvcUDtJFuy+o/uWrv+b3JyMcooDm03wUL4vCk0GMgSj5qtLXzwpFleGirbguhFfyt9BScbqCx9Cuc6fgp73em8R7B0T4Z7bdxHTZHvMPJbM+1kLJsEmzL0RMkldtRoGvmCXW6QUFaAJSifMflfbMqZavZ480KvFQ/yaM3brZLXCPEK5mVTJ5B6jZQ2hOhfkOZWcnrAOVRwvQNW2jWfw87ydBCFftzTWJ3XHo6R3iUoTngf8z1WxeBbzDl8olRuCGjjK/mJQbP0CJYtm3O2ayOQ7IwJRms2WGuYlT82ZRLnjRA3stuYkwZj2XxaiFG+1z6gC+lAjzmPPYhQnVt2q0TrXOGxgT3L4KUm0Q16WPqC7lx6Hr+mIkFUl21/Y98+HEOHajKu9Ys31O4frSZ/OHs/XEffM19Lv9P/RrI82bfNYdLkN82z4d3pA8rqzH+kPFN+N8pNKkUvRQGNS30JGyvKpZAtith1x4vAKmbYnAxBJYKeMePcbNVJOx7nAc7lIIuAWAUzx7PhoppXkYIrKZKyV3SvCQNRPGd2IYpVYx8KaDL4IT7aGbaaONveY3a6uXXUzjWCcc328MF2nPsuoLwy4sotzuWDijdcHsvfj4ISOErfk0LWkxvvRDEbbGf506b+S1+Vp8j1ZWQ5MtLA8GpirCVMZEAaVuxz5SVMos5SYLrTc4+hIDybn54Wv/RVv6g/kNFwzGfFMwSOhyd5LU9agmXHApRWalBZo4q3VP4zyP4epZJQXnjhttfpwVYUuBZHJuC2hlUEbYZITTODDjCVtx7hqsEECmx9KCoqv/J0XCnK4Jnofwj4Zv+NYvYhddh6D66k5hPmrzNduf0C24ZKuCHIrTGgDRei0OASzBnFZxMgQzzAqmtSS0ieUT/kDirL+iyuBCFxyyUvnDQBNMWFNSkwK5tvYIvIlrt2YILCWPOCZgFrZTlxopqnTsszCmaA+VyX1fxK+5REMLPQkOjYAd8aeaNg5hh7qrxDDjiIiwVjtLJlOXWAduoD+UAO8OgD3KIYlUBiHGHV57FKjqpydrO8u/fdo+i8A/U03s3Rl9VyY6XKtJWmsjSW+OxCedmOcj3BHfoFo27H3/9Y70nr5d4di/HSAKw+Hjg91cRYJxTXnF5Tpw0G9Wl6Eaj0glMDFPw6R6FHTMtj+0+r5VUYTe1aG769+SkI1trfv6TCnzqduP/X+yO3lFZ6SVPozlg+ip7SX0J3dcaOXNBT3Ddbt1+fRheqi9zfaw948bbcEtBtnIo309+qlZdoQpyROCQLwKGO8dwRq6foY9Hj8V3KuJoBdtRnUqoY1j3tQlJqA3FklFIj1UZAqGW7ftQXcgzt/BWtZFFwcDw634AX/+8b3mnLPUXzoUatXxONyIpbcUZFKXwiDXtlwkSpJRyg9oD5WtcJwyDyhvbOy8bL5gvWC/bLO6KqA42WTOITbor3thLsP7y3p3/gVJ8+VchAKF6ouBKiRbE8zxZVUWSfSbU0pZgrAFVCZNtZGeyPKr50sePf5PYC6xHjyelLcKd4bcJ9F/SAqiGjcyR2fnSotzGOf2MoG1ZRkBD72L2Zn/lN+rIAD1D6iIobaRAbInUDIK29PSeLX7ZUV6ITkf7ps37C0Ey73PGWeYQ0Q0agpDiwWj7oEOblFNxYryS3IkoMmZy8r5CxMg6X3qzB1nv4jQlgHBpUEGzNcMeMn5Cl/yWOQrJeDtslt4U5bTzBCjVcjCsBSILDyu5XC1tYfErJS7I9rEeMSIR9zBvn+GHlndrv/VWJduPGzvKnZ5NOaNGwfFQEjpEf7okg7oHo9hdkSge8Gre6PO0Qprw6WDDjeRqAG/eZ+QNlUFnjipBSfJ9VFFGoXF0qJdHMer2bSUqhM/EQedtr1ms2WsJuqLh0ZBa7fk47k4q2HzPuw2HehmZBcKFonGjHON2HKUobbrmqpiN/v9qebnNYexWtjaHoZOexxKMW9JrdUQ9ZpdAEbLcKxm3f1BO4OWTPEq+REkl/eggEXUAIOE3AbLECGeHAUC+oXBvIsH+Qk23iYqgofSSO0u57VfGy2NIRVOV1mIp/KBAwDO6xx+BJ7g5313unTzSq5CDYNaIhJ9ALoVZQ1iqIFnIeDhONmxoVgWmVJGT4aWocDFoIjIbZSuuruIf1zxZzsm4ywvtB1lUZOLlC6rmN7PdyHkdiY6xhXbavNuaM5EPM7SjGl6JuTufcb0MumyCrCtog+BAHiCo7Vr7HFx8kJ5/hK7fqdxPQoo8AENtbeHRneWfnzi4B0Q6T4ZzTZ902v411jGWl0QGLuh0OOdavsmz+/expckLbrNkQsdrdaQyEqqYXcPodTgZieoxDcSU4TSREL6nqE1Zd/2ajFaYKfuuuh/fSto9ARZ10j29V6jYjqEyWN+N0xA5f0jdiI8v5+4JOO/29MUV9nAEVcUtaC8S1aqkAKqEWBr6BW/owBqXXopvPUibAARhA0Jn6MVJe74ABjE+MaV3MNkyZDcbM1m8BS6ggMrErorIXAi/UcE8QZdlbUP7HHE5uXKVz1uXp6JYHP+gzA2fSYaeLJVnFgzbGAodFXw1A6mMrHVds8C6rSm+x5b+lKKMu1AV7BH4GMfvPm1VTH4ymM0Yu/DWRbsvvlpFcqxfmhd5LoGjnc6L3iDidoUES9c1zSeo7DT+CqJk9gR7r8/3n1PISch1/grDB8PaO+HoGTq5iCqdj1LRPWAxKgA2vxsZa4LAUAFU0u2K1hlJ4mR3Rswy4809PIU5GTBHMO0xNJXi4LxWtwOmvN19uK+9WkFJjQcF9s9cX7XMa2wlII+zpg1nFJre8ZvAuHACSnlvlZm268kgwU+pGFcRobqK9BiAsDlAtBGuVE0TCGranb99rDIN9hc7wW+ZGnPq6yeZ4GDu9ljVbdkhh6MQJzmwOJgUztis+q8Zj/0l8OkcUVCnMw1F9FNesE9BNa0wmi+XRyFl0WJqsFbwCwtE6Pg50B3uKNIYRs6TnyrLyQDE9xtrfqtj9KsusH2a/KYKUE5PTTjbaySX7MRTN3ZX3gUSxLYSx0Kl2h7jheHIxv7g9fvcYjetZT0VjPItFiaVkfj4MwTca4jcpSekfdx3vE0JCjQQEidUJFj3omyEBWyAHWQ2jmPWy20OvxmIWwjjSHVlyGlavJAle1BcORxwEHE03y52CoiUpGZO1n98e+4oCFCWTp2hloJtG/kxk9WuVzIHRMmgWexW1AbhBOi5YpU9mHLWUfjebcas1MS6ctdXjROecUiBulI7ZwtBwVbxP+F5oaTcCJXYVGcKZFQvD2VtqHIDkdli4Lb1bQlKtXSh/+MRXDMBiALZxLtgVy8KL8kgFvcXursqICF+Xjs+pyhpYQ+cYf83X9YGzHebwRmHef7+39XXfWymanSf2Hxa5w4dFbwtxW6Lt0IJjRjfgG+77mredBpWeVnTULJhq/77m9Buqt71tsa9T4vxp/g2JSqV0sr5JiwTcsv3e07lG3uB4X/S+4OPpIiSOM4dP1MX3ZnynUqdTM8RlokQok0AZTYvcbIyGiZq8bAqmoB/MB3qvPNzAIjTulauRkqamyhqjQkST2VCdH6FhLpYbxcsGHa+JB3YbWKacrSUp0L9IRNdDsh4lzFQdVLwJ08p7Dj2m/iQf2yVEkoESS5NPqKZwHLVG9+u26WQzPMlJwlFTgXyd0EntcV5i+wVklpzJKUC8sgTb5+Xm1qMmFMIn9fIyMecyX14ZQweByDCWnmR3HE9FGkKcW8ihfxh5h8S4RQ7POQqIVsjIRlYRrzIM+UnSW0NURSKCwGcDFm7Wk+TbRg+MAEfy96LoYZtDYuAZoPYlRq0EwXu6XzHlZsGOwvQEPaiyOw3ehFOQLMcPIi6TMu1XiR84YEiaETFISRreapTgMdQMlMGzfGZnCkkdyC030F61sbdjz9EVKPqB3lK26AglDiaidxYgiPuDYCSJfFAZxqji+fgZJduhSrjUnaZd0gJa+OPrLtgBKic7u2xWeh0uu/19nHFY3NnNE4gOqehUrFqJUZUfNgtxkePdD7KeDisMLW94ewe6jRA36Al4Aj0mMESUVYb7IkiARNkg6ovcGSk3bI9+KD674uBQOBRroRYZIqp6fzDnuAjutay5L07lfmrOVRmQiMnWWSBXZtqMzNGnOXhColLXwN4wSjdIP25Y1bD8OOGlsOv3kcSiOHGBlVTDZ2W9cZHcCK6QfJoZt3rGrJVlOluu8BW+R9YUsOgxNOgsylmAReoR5b3Oe4AD6XAkLwUeGm8NbXsL2UG82CbZFERlydCDNTGKLUy76ZRkLFEW2wiyLZyLhl0sybGyG2i7DZ8nvL11i5lhknV7Z8foQtGlBbRYF2GCKIx1MYxfeNj4zQ25T5Tq9VfeKAA3lxx4UXqABi+OvH+pGnnNFfelafAFMveJ6F9jCVCMOtH+99WLEEfLPD+h3wDzkuQL9zeRd/TJuHgQJ69WfaPC1VecAKqlOqsqzoqWhHjqQBBWHkdtz2i+xVnoN+zpc9KyQ9j21/OfRxGY0qCsZi+wrtuESoX45WUk4z/wxQpx3Z/hq/OwW/NQYQEk40+wZeHYnzpx2XLRqtMYMGNkJ4SOyRdS1oW4oQDMXwa+Gwr/tJXkfDq+6yx+8DYqbAWP7T8m9URiQnXG7EhDkCQZe6jQ06nQIvBct1FmOviudLKUFDyUcmTtTnLXcjz0Rfw0GFlrb76vP8kcEgAm4JHBHNJg1KXJDSB9wwYkQQC61rMp3Gib0PcgoT5hkOHYGhR0VBtUNDMbNFRwJ+ho6mo+YbjXv9CmTL1ThTpNL1P0L3uZ6vyL/cmf0nMB4BPtmgYJHbsiyKjwsaBgQi/rz07sv0FD07ENOvoO/rKELZN17RIYteWnWjp94PzkZTy9YeBq+fTh8VUrp9dNnlo5fXDq1LqZ2nptBhAV2RQNZhUmvgYVR724YVdv37C41fR2rRLReB4e+45TH624ovvtK8UVHVtXxLHfamfxUCPxHH5KFkSDEKb4Ao4IUjfJRvyxfJ156aL/VahUYJBexQeSBzwyYQdvDb8cOvT/Ez6Mi1qNC+yEuJg/1bTxM8vsr342BnZdGLKs40FRWm2pjsPWbPzUNZEzEC6u3ukocO4T74b8mfU9v3UL/tJr+HXVh47CLCBJBiGRBJnII2ebmnFiQBBqnow864wYnh6/OFk8CPN49WtZOOWT85Q995zbI0et+47HwZcii6QZAE8BLtjhoqgmUTI2BHFf5PxWUtnTPOlNgsqilymhTJVxTKlAMSf0VXC0gUuv1Bfagcu/mC5Hqg5+msjQWsfXPJmIzWr4CeHEPhWDH40HNoGFzNKDNtsM4ZV1Y0RDyGCdw6KuIsiDEFy4Dst87ODa81kQCaSgBlwIMr4q0uUgORwyEqPG5DgEYoAnrSddCm4wFKMDanzEdLuQvTAkZQrLeM4IZtbKSwVPM+OX4wja4gVoKaAjon0hu7d7k5aDSwnMQB//4/HClj+kWd+SQP551b+XOuQbHKTrAohJIKudpUWbDl1AevQZAIEyBWPGnAVLVqzZgEOwZceeA0dOnIP0EHPjzoMnL9587ISEgoGFg0dAROKHjMJfgEBBqGjoGIIxsYQIFSZcxMavyUnl2T/17WDNQl5NcKBxVo1WWSpTYTT8YdHB0HM++MkgJ5a8D1SOylYjlGAnmkCZrMR/QQGMewAAzLhiTAIShgEK/QCGTmiFRqiFSlSiFBEeGhwI0OSzR9jw+yD4jzbYJYWZi+ZloKPIfP0G8HtRwD1IpKvbamN9VS8QKAFurJZauY91wZso9jhbgo5CxTpEtDkdYD09PZ1Y1wTMM3bF/AvoG1kXPQ9hGJQdky+xVdVEBbR+Zb+GOgAAAA==') format('woff2'); + font-weight: normal; + font-style: italic; + font-display: swap; +} + +@font-face { + font-family: 'boxicons'; + src: url('data:font/woff2;charset=utf-8;base64,d09GMgABAAAAAAUQAAwAAAAACcgAAATCAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhYGYABcEQgKizCJEgsWAAE2AiQDIAQgBYJKB20bvAfIjsK22bOwIjmQDyeRhxX00NzbvN1Nmu62nLQHQCDL9ufY3SlWLCy602dZsQLOD3n6L92cdrLTQfkrT6MySDfJpw9OaT98nP5JmH4/V2cmpe/6WhKztuSGJ/ESuA4hvX1EJEJolEji6JTI0tpue1NL4JWIHgIq4OgbhCi/3NpClyACc5XyAoCL6n70EWwlhmpONTB1FlpfjQVO/p/gZZEPIDSpXtxo4LaSYhHSHYt+SxUJhpheH+5uX9ye3VV/Gfy/gOQ3Fu8zRRlHGQfpRqmPgCzFCBUF1Uh/SQrUgH4DZhk6yeGXoC8cBhsxFq7pb0yj9ZTXp1KXLMmRQUixqcS8vOSggBJukKH1ydDZR4IPYZr5Euhg83gIFk9pP/Clx0I87acK8hy24z0qvcx2nb/0Cdoa+Ii0XgVzgN6r+iK0nkGLXR2X+z/gex7bxsateRzxFtwXn/LeVSySZJFoZH5I+4HvqJZKR+o4Dur6t87I2TrM6j9XdbrRcY44fLSlI+3ubuzuV5Hdvmmca2jI1uvoSDsmADmD6IHuGenUM5hVdZIFkpwkXs2bzaqVg5ig21xnZ9bUpK4udbC3keseVkdfg/zQ+QTxrilf2khRYnFlXQ3oFA9wOU5xw2nnctiCmtR0SRXZXYGyoKwnVewY+LjeTGHwbDzaORny7Ubx7umQd2bik2Sobg3K+RPl9l33+SOXNRX7Rzyyh3xsi93O6bABkL+k7Qg6sJdNW4lpYOrJSeqY8Y5wNiV/TaCTQbNh4pWu3ptEMLym787heHiFV1iqrfSZGuEmx6pMFUnBWUPZprrSuqbVv4VrsZIKU9XLvSABx5PYHh7sJLorocDdi5VC+fTknXoQAxapG1EZ7VJcvB7ywPCse5ZoWiXhxg3VDtXKzdUSo1yu6AlFbyjzB3Pl5lRYKqpMFQC6zlNVwVQBoO3DfBetL/3fZHyLEH875zoW9LUhTUVOcYUwA6fRgIBbTtKvA2yR+LMPYlIc5SLq732uzjZsbz84PdW809uR351YPvDkeGS/e1mcsIKQurCaoLCpnHWQjeFEVjhOEDgAvBQ5jVYIczAa5Qa864uU+J0mG9FJzq7mz8ye7ie0vQGl5woLR5VRhY1FYIfw4VmMLCL8P4DJY4JBvrso7cAWqDglK65rDHcKgpDsOnEZo+/qSKSJPI5BruiogT4dVdX60tQ816e755+W0fkD9Kn+1ymZhUg7aIxqABL9F1JVtE7bwhtlS+iC/gaPfES5EmhGRPcKfzdjw4z8RBxP5HiAThQ/8i1/7/VOSbevCeoAeBVmJ+lNFB8tT6ATuAU6O9hvowFoaKlY+maXjJ1P0vq4gXpOO6ynCtbAAgG8fQ61ZUvrtSoegKYKJ8usGcpIYLktWu4idUSgenkMV3u60AWLXDmihnGgNlQxb7mF5Q7UEQ2sWR6D18uFQ3uIogdmMPf3es536ZyNhdVX/kVvRrnAOOLfKX4a7IGgiBTiIMgklwgSSCKfdGLIgU0COeSSUjGpxRhGMIoFieY8tDhIAtqr9WPII4H4zj0Uo8XiwfKhEM12YYFBf70HGYwsVk6RYpUpiQ8eK85KthbJP5FiReyeEPPGMJafL53oZ03CnHJ0G2cA') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: swap; +} + + +body { + --font-size-obsidian-titlebar: 13px; + --font-size-vault-name: 1em;/*左侧库名字体大小*/ + --font-size-file-header-title: 0.9em;/*文件抬头标题,只在非Andy mode plugin时生效*/ + --font-size-file-header-title-andy-plugin: 1em;/*文件抬头标题for Andy mode plugin*/ + --font-size-embed-title-size: 1.3em; + --font-size-embed-file: 1.25em; + --font-size-folder-and-file: 0.9em;/*左侧边栏文件字体大小*/ + --font-size-edit-normal: 1em;/*编辑正文字体大小*/ + --font-size-preview-normal: 1em;/*预览正文字体大小*/ + --h1-size: 1.5625em; + --h2-size: 1.4375em; + --h3-size: 1.3125em; + --h4-size: 1.1875em; + --h5-size: 1.0625em; + --h6-size: 1em; + --font-size-tag: 0.85em; + --font-size-emoji-after-tag: 1.5625em; + --font-size-list: 1em; + --font-size-preview-blockquote: 1em; + --font-size-edit-blockquote: 1em; + --font-size-outline:var(--nav-item-size); + --font-size-code: 1em; + --font-size-latex: 1em; + --font-size-cloze: 0.9375em; + --font-size-better-footnote: 1.3em; + --font-size-checklist: 0.85em; + --font-size-split: 0.85em; + --font-size-loading-diy-text: 3em; + --font-size-loading-add: 1.5em; + --table-header-size: inherit; + + /*font family*/ + --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-family-list: ;/*列表字体*/ + --font-text-theme: Bookerly, 'Inter', "Segoe UI", "霞鹜文楷 GB", "LXGW WenKai", "Microsoft YaHei"; /*主体(包括列表)字体,除代码框等少数部分*/ + --h1-font: var(--font-default); + --h2-font: var(--font-default); + --h3-font: var(--font-default); + --h4-font: var(--font-default); + --font-family-title: ;/*文件抬头标题*/ + --font-family-folder-file-title: Arlrdbd, "Source Han Sans", "Noto Sans CJK", "Source Sans Pro", "Segoe UI Emoji", sans-serif;/*左侧边栏文件、文件夹字体*/ + --font-monospace-theme: 'JetBrains Mono', Consolas, Monaco, "等距更纱黑体 SC", "Source Han Mono", "Microsoft Yahei Mono", "Segoe UI Emoji", "Microsoft YaHei", "Source Code Pro", monospace; + --font-family-inline-code: var(--font-monospace-override), var(--font-monospace-theme); + --font-family-tag: Bookerly, 'Inter', "Segoe UI", "Microsoft YaHei", STzhongsong, STSong, "Segoe UI Emoji", Serif; + --font-family-vault: "Lucida Handwriting", "Segoe UI Emoji";/*左侧库名字体*/ + --font-family-special-tag: "Lucida Handwriting", "Segoe UI Emoji"; + --mermaid-font-family: Segoe UI, "Microsoft YaHei", "Segoe UI Emoji", "trebuchet ms", verdana, Arial, cursive; + --font-family-better-footnote: Arlrdbd, "Source Han Sans", "Segoe UI Emoji"; + --font-family-strong: Bookerly, 'Inter', "Segoe UI", "LXGW WenKai Screen", "LXGW WenKai Screen R", "霞鹜文楷 GB", "LXGW WenKai", "Segoe UI Emoji", var(--font-interface); + --font-family-em: ; + --font-loading-text: var(--font-monospace-theme); + + /*radius*/ + --radius-xs: 3px; + --radius-s: 5px; + --radius-m: 7px; + --radius-l: 15px; + + --blur-depth: 10px; + --blur-depth-cp: 10px; + --saturate-4-bg: 1; + --saturate-4-bg-cp: 1; + --brightness-4-bg: 0.9; + --brightness-4-bg-cp: 0.9; + --opacity-cp: 0.25; + --bg-panel-page-opacity-cp:0.25; + --titlebar-brightness: 1; + --titlebar-blur-depth: 8px; + --stack-tabs-background-blur-depth:40px; + + --fancy-hr-icon: '😀'; + --fancy-hr-rotate: 0deg; + --line-height-main: 1.5; + --line-height-list: 1.4; + + --line-height-split: 1.3; + --letter-space-main: 0; + --letter-space-code: 0; + + --file-line-width: 45rem; + --embed-content-height: 600px; + + --bottom-padding-value: 0em; + + --font-weight-highlight-1: normal; + --font-weight-highlight-2: normal; + --font-weight-highlight-3: normal; + --font-weight-inline-code: bold; + --image-max-width: 100%; + + --checkbox-size: 0.9rem; + + --loading-diy-text: "快乐摸鱼又一天,人生还剩多少天?"; + --loading-diy-text-color: var(--text-normal); + --loading-page-custom-gif-caption: " "; + --loading-page-custom-gif-caption-alt: " "; + --loading-text-before: "❀✿"; + --loading-text-after: "✿❀"; + --loading-add-text-color: #d47e86; + --loading-add-text-color-alt: #a4e39c; + --pixel: 20px; + --c-1: #da2400; + --c-2: #ffb623; + --c-3: #8c6e22; + + --nord0: #2E3440; + --nord1: #3B4252; + --nord1-1: #3B425251; + --nord2: #434C5E; + --nord3: #4C566A; + --nord3-1: #717a91; + + --nord4: #d8dee9; + --nord4-1: #d8dee95c; + --nord5: #E5E9F0; + --nord5-1: #E5E9F053; + --nord6: #ECEFF4; + --nord6-1: #ECEFF46c; + --nord6-2: #ECEFF43c; + + --nord7: #8fbcbb; + --nord7-transparent: #8fbcbb2f; + --nord8: #88C0D0; + --nord8-0: #65afc4; + --nord9: #81a1c1; + --nord9-1: #81a1c16c; + --nord9-2: #81a1c13c; + --nord10: #5e81ac; + + --nord11: #BF616A; + --nord11-1: #BF616A4b; + --nord12: #D08770; + --nord13: #EBCB8B; + --nord13-0: #e2b65e; + --nord13-1: #ebca894b; + --nord14: #A3BE8C; + --nord14-0: #95b677; + --nord15: #B48EAD; + + --hr-color-icon-1: var(--theme-color); + --hr-color-icon-2: var(--theme-color); + --hr-color-icon-3: var(--theme-color); + --hr-color-icon-4: var(--theme-color); + --hr-color-1: var(--theme-color); + --hr-color-2: var(--theme-color); + --hr-color-3: var(--theme-color); + --hr-color-4: var(--theme-color); + --hr-color-numbers-line-1: var(--theme-color); + --hr-color-numbers-line-2: var(--theme-color); + --hr-color-numbers-line-3: var(--theme-color); + --hr-color-numbers-line-4: var(--theme-color); + --hr-color-numbers-bg-color: var(--theme-color-translucent-015); + --hr-color-numbers-color: var(--theme-color); + --hr-numbers-text-fill: transparent; + --hr-numbers-text-stroke: var(--text-normal); + + --cloze-bg-color: var(--accent-strong); + --cloze-decoration: none; + --cloze-decoration-color: red; + --cloze-decoration-2: dashed; + --cloze-decoration-color-2: var(--theme-color); + --cloze-bg-color-3: transparent; + --cloze-decoration-3: dashed; + --cloze-decoration-color-3: var(--theme-color); + + --custom-titlebar-bg: var(--background-secondary-alt); + + --text-highlight-bg-h-dark: 57; + --text-highlight-bg-s-dark: 40%; + --text-highlight-bg-l-dark: 38%; + --text-highlight-bg-a-dark: 0.541; + + --text-highlight-bg-h-light: 34; + --text-highlight-bg-s-light: 100%; + --text-highlight-bg-l-light: 80%; + --text-highlight-bg-a-light: 0.847; + + --cursor-color: var(var(--text-normal)); + + --fancy-cursor-width: 2px; + --cursor-color-temp: var(var(--text-normal)); + + --print-strong-color: ; + --print-em-color: var(--accent-em); + + --tag-border-width: 1px; + --paragraph-spacing: 1; + --blur-codebox-frosted-glass: 2; + --blur-p-kanban-frosted-glass: 5; + + --status-bar-bg: var(--background-secondary-alt); + --status-bar-text-color: var(--text-muted); + + --list-ol-marker-1: decimal; + --list-ol-marker-2: lower-latin; + --list-ol-marker-3: lower-roman; + --list-ol-marker-4: decimal; + --list-ul-marker-1: '\2022'; + --list-ul-marker-2: '\25E6'; + --list-ul-marker-3: '\25AA'; + --list-ul-marker-4: '\25E6'; + --list-ul-marker-color: var(--list-marker-color); + --list-marker-color-collapsed: var(--theme-color); + + --list-ul-colorful-marker-content: '\2022'; + + --he-title-bar-active-bg: var(--theme-color-translucent-005); + --he-title-bar-active-pinned-bg: var(--theme-color-translucent-005); + --he-title-bar-inactive-bg: var(--theme-color-translucent-001); + --he-title-bar-inactive-pinned-bg: var(--theme-color-translucent-001); + --he-title-bar-inactive-action: var(--text-normal); + --he-title-bar-active-action: var(--theme-color); + --he-title-bar-active-fg: var(--text-normal); + --he-title-bar-inactive-fg: var(--text-muted); + + --list-spacing-bt: 1; + + --font-weight-strong: bold; + --font-style-em: italic; + --code-background: var(--background-code); + --canvas-card-opacity: 0.1; + + --popover-width-factor: 1; + --popover-height-factor: 1; + + /*bubble*/ + --bt-bubble-layout-padding: 8px; + --bt-bubble-background-color: transparent; + --bt-bubble-border-color: var(--background-modifier-border); + --bt-indentation-gradient-color-1: var(--theme-color); + --bt-indentation-gradient-color-2: transparent; + --bt-colorful-indentation-width: 1px; + + --h1-bg-color: color-mix(in srgb, var(--h1-color) 15%, transparent); + --h2-bg-color: color-mix(in srgb, var(--h2-color) 15%, transparent); + --h3-bg-color: color-mix(in srgb, var(--h3-color) 15%, transparent); + --h4-bg-color: color-mix(in srgb, var(--h4-color) 15%, transparent); + --h5-bg-color: color-mix(in srgb, var(--h5-color) 15%, transparent); + --h6-bg-color: color-mix(in srgb, var(--h6-color) 15%, transparent); + --inline-title-bg-color: color-mix(in srgb, var(--h1-color) 15%, transparent); + + --ribbon-background: var(--background-secondary-alt);--ribbon-background-collapsed: var(--background-secondary-alt); + + --bt-indentation-width-hover: 3px; +} + + +body.all-dark-pdf .print.theme-light, +.theme-dark { + --background-primary: var(--background-primary-bg-4-bt,#202020); + --background-primary-alt: var(--background-primary-alt-bg-4-bt,#444444); + --background-secondary: var(--background-secondary-bg-4-bt,#151515); + --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#000000); + --background-modifier-border: #343434; + --background-modifier-success: #539126; + --background-modifier-success-rgb: 83, 145, 38; + --background-modifier-error: #9b4343; + --background-modifier-error-rgb: 155, 67, 67; + --text-accent: var(--color-accent); + --text-accent-hover: var(--color-accent-2); + --text-normal: #c6c6c6; + --text-highlight: var(--text-normal); + --background-modifier-box-shadow: rgba(228, 228, 228, 0.08); + + --text-muted: #8a8a8a; + --text-muted-rgb: 138, 138, 138; + --text-faint: #797979; + --text-folder-file: #b3b3b3; + --accent-strong: #e7e7e7; + --accent-em: #a4ca8e; + --text-error: #e16d76; + --text-error-hover: #c9626a; + --text-selection: #3b767160; + --text-on-accent: #e4e4e4; + --interactive-normal: #2b2b2b; + --interactive-hover: #373737; + --accent-h: 208; + --accent-s: 64%; + --accent-l: 49%; + --accent-l-alt: calc(var(--accent-l) * 1.05); + --interactive-accent-rgb: 45, 130, 204; + --interactive-accent-hover: var(--color-accent-2); + --panel-border-color: #18191e; + --search-text: #e0e0e0; + --folder-title: #ffffff; + + --text-highlight-bg: hsla(var(--text-highlight-bg-h-dark), var(--text-highlight-bg-s-dark), var(--text-highlight-bg-l-dark), var(--text-highlight-bg-a-dark)); + --mark-highlight-strong-em: #fff7603a; + --strong-em-highlight-color: #a7b4ff; + --text-search-highlight-bg: #bb4361; + --strong-em-color-1: #43d3ff; + --strong-em-color-2: #baaaff; + + --background-search-result: var(--background-secondary-bg-4-bt); + --search-result-file-matched-bg: #023774; + --page-border-bottom: var(--background-secondary-alt); + --background-asymm-split-left: var(--background-secondary-alt); + --background-mobile-drawer-1: #1b1b1b; + --background-mobile-drawer-2: #1b1b1b69; + --background-modifier-border-hr: #3f3f3f; + --background-modifier-border-asymm: #343434; + --background-modifier-border-checkbox: #7b7b7b; + --background-transparent-black-or-white-1: #1b1b1b9a; + --background-transparent-black-or-white-2: #1e1e1ebd; + --background-transparent-black-or-white-3: #2f2f2f6c; + --background-transparent-black-or-white-3-1: #00000064; + --background-transparent-black-or-white-4: #7e7e7e1d; + --background-transparent-black-or-white-5: #0f0f0f6c; + --background-black-or-white-1: #353535; + --background-modifier-border-1: #000000; + --background-transparent-blue: #003e759a; + --scrollbar-thumb-bg: #3f3f3f7e; + --scrollbar-active-thumb-bg: #4d4d4d88; + --gray-1: #5C6370; + --gray-2: #abb2bf; + --red: #db7c84; + --red-1: #d05a63; + --orange: #d1945b; + --orange-1: #da904b; + --green: #abd58e; + --darkgreen: #568060; + --aqua: #35bed0; + --purple: #c594d4; + --blue: #a0c7e9; + --darkblue: #478fee; + --yellow: #d6b87f; + --light-yellow: #cac685; + --white: #ffffff; + --variable-2: #0072d0; + --variable-3: #5a96f7; + + --embed-color: hsla(calc(var(--accent-h) * 1),calc(var(--accent-s) * 1.2),calc(var(--accent-l) * 2),0.055); + --search-result-file-title-color: var(--text-normal); + --theme-color: var(--interactive-accent); + --theme-color-translucent-06: hsla(var(--interactive-accent-hsl),0.6); + --theme-color-translucent-04: hsla(var(--interactive-accent-hsl),0.4); + --theme-color-translucent-02: hsla(var(--interactive-accent-hsl),0.2); + --theme-color-translucent-015: hsla(var(--interactive-accent-hsl),0.15); + --theme-color-translucent-01: hsla(var(--interactive-accent-hsl),0.1); + --theme-color-translucent-005: hsla(var(--interactive-accent-hsl),0.05); + --theme-color-translucent-001: hsla(var(--interactive-accent-hsl),0.01); + + --background-blockquote: #9191911c; + --background-code: #1111118c; + --background-code-2: #4c4c4cb0; + --text-color-code: #d58000; + --code-normal: #d0d0d0; + --list-ul-block-color: #e19742a9; + --list-ul-disc-color: #eb9563; + --green-1: #79c142; + --list-ul-hover: #e28915de; + --list-ol-block-color: #2685bbb4; + --list-ol-number-color: var(--list-marker-color); + --list-ol-hover: #2c7bd6; + --list-marker-color-collapsed: var(--theme-color); + + --tag-text: #e4e4e4; + --stag1: #f08383; + --stag1-bg: #bd1919; + --stag2: #e7b263; + --stag2-bg: #ac6700; + --stag3: #77df89; + --stag3-bg: #058c1c; + --tag1: #3674bb; + --tag2: #3685ad; + --tag3: #2a8f91; + --tag4: #43804f; + --tag5: #5f932e; + + --tag-dailynote: #98c8ff; + --tag-dailynote-bg: #0f60bd; + --tag-weeklynote: #d1e6ff; + --tag-weeklynote-bg: #3971b1; + --tag-questions: #d4bdff; + --tag-questions-bg: #6640ae; + --tag-ideas: #fcfcc0; + --tag-ideas-bg: #565656d8; + + --h1-color: var(--print-h1-color,hsl(78, 62%, 47%)); + --h2-color: var(--print-h2-color,hsl(118, 42%, 49%)); + --h3-color: var(--print-h3-color,hsl(180, 53%, 48%)); + --h4-color: var(--print-h4-color,hsl(216, 69%, 68%)); + --h5-color: var(--print-h5-color,hsl(258, 79%, 77%)); + --h6-color: var(--print-h6-color,hsl(290, 85%, 81%)); + + --graph-text-color: #B5B5B5; + --graph-tag: #88d842bb; + --graph-attach: #b2cfe0bb; + --graph-circle: #55a2d6bb; + --graph-line: #8c8c8c; + --graph-unresolved: #f08080de; + --graph-arrow: #c23917; + --graph-control-bg: #00000080; + --graph-circle-outline: transparent; + --graph-canvas-bg: var(--background-primary); + --graph-circle-fill-highlight: var(--interactive-accent); + --graph-line-fill-highlight: rgb(var(--interactive-accent-rgb)); + + --unresolved-link: var(--graph-unresolved); + --link-unresolved-decoration-color: var(--graph-unresolved); + --internal-link-color: var(--text-accent); + --external-link-color: var(--internal-link-color); + + /*mermaid*/ + --mermaid-active-task-color: #187ef1; + --mermaid-seq-dia-color: #1371be; + + /*table*/ + --table-background-color: #2f2f2f32; + --table-background-color-odd: #00000033; + --table-border-color: #4a4a4a; + --table-thead-background-color: var(--theme-color-translucent-01); + --table-hover-raw-color: #08569a21; + --table-hover-color: #1f65a221; + --table-hover-thead-color: #21395bc7; + --table-header-color: var(--text-normal); + + /*calendar*/ + --calendar-week-color: #a2df94; + --calendar-week-hover: #61815c; + --calendar-week-background-color: #4a5842; + --calendar-today-background-color: #8c4545; + --calendar-hover-color: var(--theme-color-translucent-02); + --calendar-active-color: var(--theme-color-translucent-04); + + /*day planner*/ + --day-planner-pie: #f19c1c; + --day-planner-timeline: #000000; + --day-planner-line: #dfcf77; + --day-planner-dot: #dfcf77; + --day-planner-item-hover: #053c85; + --event-item-color1: #283493bb; + --event-item-color2: #1565c0bb; + --event-item-color3: #00838fbb; + --event-item-color4: #2e7d32bb; + --event-item-color5: #9e9d24bb; + --event-item-color6: #ff8f00bb; + --event-item-color7: #d84315bb; + --event-item-color8: #c62828bb; + --event-item-color9: #ad1457bb; + --event-item-color10: #6a1b9abb; + + --kanban-color-1: #0065d852; + --kanban-color-2: #30e4e441; + --kanban-color-3: #1cb54f44; + --kanban-color-4: #97b82b49; + --kanban-color-5: #bb722d41; + --kanban-color-6: #d12e2e42; + --kanban-color-7: #8f36cb3f; + + /*colourful notes*/ + --text-gray: #acacac; + --text-brown: #be9684; + --text-orange: #ffa344; + --text-yellow: #ffdc51; + --text-yellow-2: #cca217; + --text-green: #52c7b2; + --text-blue: #7c94ff; + --text-purple: #b386f1; + --text-pink: #ff6bba; + --text-red: #ff4f4f; + + --background-gray: #535353; + --background-brown: #493a3a; + --background-orange: #53422f; + --background-yellow: #585536; + --background-green: #32503e; + --background-blue: #2f5264; + --background-purple: #443f57; + --background-pink: #533b4a; + --background-red: #683c3c; + + --note-important: #d64545; + --note-cloze: #ffffff; + + /* stickies */ + --stickies-color-1: #84c584; + --stickies-color-2: #c7a3cf; + --tape-color: #99999967; + + /*Sliding panes*/ + --sliding-panes-header-color: #f1a634d0; + --background-4-sliding-pane: #252525ed; + --bg-sliding-pane-header: #00000043; + --bg-sliding-pane-leaf: #0f0f0f36; + + /*admonition*/ + --admonition-bg-color: #11111100; + + /*checklist*/ + --checklist-bg: #1d1d1d96; + --checklist-bg-hover: #08080896; + + --color-view-header-gradient-1: #060813de; + --color-view-header-gradient-2: #00285dc0; + + --checkbox-color-0: #3187d3; + --checkbox-color-1: #a9a608; + --checkbox-color-2: #1dac10; + --checkbox-color-3: #ffd1d1; + --checkbox-color-4: #625d4c; + --checkbox-color-5: #9a67ae; + --checkbox-color-6: #5f5f5f; + --text-checked-checkbox: #8e8e8e; + + --activeline-background: var(--theme-color-translucent-005); + + /*pseudo-kanban*/ + --p-kanban-bg-color: #6c6c6c42; + --p-kanban-border-color: transparent; + --p-kanban-card-color-1: #0000003f; + --p-kanban-card-color-2: #41414136; + --p-kanban-color-6: #f3424252; + --p-kanban-color-5: #eb973752; + --p-kanban-color-4: #d2dd3852; + --p-kanban-color-3: #38ce2a52; + --p-kanban-color-2: #2ec4c452; + --p-kanban-color-1: #3496e652; + --p-kanban-color-8: #b962ff52; + --p-kanban-color-7: #e45bdd52; + --p-kanban-color-simple: #8e8e8e41; + --p-kanban-color-shadow: #0000004d; + + /*style settings*/ + --background-secondary-translucent: #2c2c2c26; + --background-secondary-translucent-1: #2c2c2c26; + + /*rainbow-checklist*/ + --checklist-color-1: #005aa486; + --checklist-color-2: #00798986; + --checklist-color-3: #12781586; + --checklist-color-4: #897b0086; + --checklist-color-5: #a4620086; + --checklist-color-6: #ab100586; + --checklist-color-7: #7f1f9086; + + --table-color-calendar-2: rgb(0, 91, 144); + --table-color-rgb: 0, 91, 144; + + --mjx-inline-math-color: var(--text-normal); + --mjx-math-color: var(--text-normal); + --background-leaf-resize-handle: var(--background-secondary-alt-bg-4-bt); + --text-folder-file-icon: var(--theme-color); + + --color-highlight-1: var(--text-normal); + --color-highlight-2: var(--text-normal); + --color-highlight-3: var(--text-normal); + --bg-color-highlight-1: #c865656f; + --bg-color-highlight-2: #54b9476f; + --bg-color-highlight-3: #1e83d086; + + --background-popover: var(--color-base-10); + + --cursor-red: #ff3939; + --cursor-yellow: #fff955; + --cursor-green: #7dff7d; + --cursor-blue: #8ac7ff; + --cursor-violet: #bf76ff; + + --bg-color-settings-0: #07070747; + --bg-color-settings-0-1: #ffffff00; + --bg-color-settings-1: #7c7c7c6d; + --bg-color-settings-2: #1f1f1f52; + --bg-color-settings-3: #141414be; + --bg-color-settings-4: #2e2e2e9d; + --bg-color-settings-5: #424242aa; + --bg-color-settings-6: #191919c7; + + --background-waves-color:#4A75DB8C; + + --tab-stacked-shadow: #0e0e0e; + --divider-color: #000000; + --tab-outline-color: #151515; + + --bg-color-notebook: #2a2825; + --grid-notebook-line-color-1: #c7c7c71f; + --grid-notebook-line-color-2: #74747440; + --dotted-notebook-dot-color: #c7c7c71f; + --background-nonoverlapping-note: #000000; + --stripe-notebook-stripe-color: #162419; + --prompt-box-shadow: #555555; + --background-titlebar-inner: hsla(var(--accent-h), var(--accent-s), var(--accent-l), 10%); + --window-shadow: 0 1px 3px hsla(207, 10%, 10%, 0.1); + --window-shadow2: 0 0 9px hsla(212, 17%, 0%, 0.3); + --bt-connected-indent-line-color: #926a6a; + --list-colorful-marker: #ff8686; +} + +.theme-light { + --background-primary: var(--background-primary-bg-4-bt,#ffffff); + --background-primary-alt: var(--background-primary-alt-bg-4-bt,#e9e9e9); + --background-secondary: var(--background-secondary-bg-4-bt,#fcfcfc); + --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#f3f3f3); + + --background-modifier-border: #dddddd; + --background-modifier-form-field: #fff; + --background-modifier-form-field-highlighted: #fff; + --background-modifier-box-shadow: rgba(0, 0, 0, 0.08); + --background-modifier-success: #A4E7C3; + --background-modifier-error: #e68787; + --background-modifier-error-rgb: 230, 135, 135; + --background-modifier-error-hover: #FF9494; + + --text-accent: var(--color-accent); + --text-accent-hover: var(--color-accent-2); + --text-normal: #0e0e0e; + --text-muted: #7f7f7f; + --text-highlight: var(--text-normal); + --text-faint: #7f7f7f; + --text-folder-file: #272727; + --accent-strong: #000000; + --accent-em: #099d4e; + --text-error: #e75545; + --text-error-hover: #f86959; + + --text-selection: #a9d1c859; + --text-on-accent: #ffffff; + --interactive-normal: #efefef; + --interactive-hover: #e6e6e6; + --accent-h: 207; + --accent-s: 77%; + --accent-l: 54%; + --accent-l-alt: calc(var(--accent-l) * 0.9); + --interactive-accent-rgb: 70, 142, 235; + + --interactive-accent-hover: var(--color-accent-2); + --panel-border-color: #dbdbdc; + --search-text: #000000; + --folder-title: #000000; + + --strong-em-highlight-color: #237add; + --mark-highlight-strong-em: #ff880049; + --text-highlight-bg: hsla(var(--text-highlight-bg-h-light), var(--text-highlight-bg-s-light), var(--text-highlight-bg-l-light), var(--text-highlight-bg-a-light)); + --text-search-highlight-bg: #ffd1dd; + --strong-em-color-1: #1048ff; + --strong-em-color-2: #14c8ff; + + --background-search-result: var(--background-secondary-bg-4-bt); + --search-result-file-matched-bg: #ffd9d9e5; + + --page-border-bottom: var(--background-secondary-alt); + --background-asymm-split-left: var(--background-secondary-alt); + + --background-mobile-drawer-1: #ffffff; + --background-mobile-drawer-2: #ffffff; + --background-modifier-border-hr: #bfbfbf; + --background-modifier-border-asymm: #d8d8d8; + --background-modifier-border-checkbox: #9c9c9c; + --background-secondary-alt-bg-4-bt-publish: #f6f6f6; + + --background-transparent-black-or-white-1: #ffffffb0; + --background-transparent-black-or-white-2: #ffffffca; + --background-transparent-black-or-white-3: #eeeeee91; + --background-transparent-black-or-white-3-1: #fafafac3; + --background-transparent-black-or-white-4: #a7a7a765; + --background-transparent-black-or-white-5: #f0f0f091; + --background-black-or-white-1: #e4e4e4; + --background-modifier-border-1: #e1dfdf; + --background-transparent-blue: #c6e5ffde; + --bg-color-settings-0: #7d7d7d6b; + --bg-color-settings-0-1: #ffffff77; + --bg-color-settings-1: #ffffff17; + --bg-color-settings-2: #ffffff5a; + --bg-color-settings-3: #ffffffda; + --bg-color-settings-4: #ffffffd2; + --bg-color-settings-5: #d4d4d464; + --bg-color-settings-6: #ffffff85; + + --scrollbar-thumb-bg: #dcdcdcbe; + --scrollbar-active-thumb-bg: #ddddddd9; + + --gray-1: #383a42; + --gray-2: #383a42; + --red: var(--nord11); + --red-1: #f16464f5; + --green: var(--nord14); + --darkgreen: #068a5e; + --blue: var(--nord10); + --darkblue: #3b84e4; + --purple: #c74df7; + --aqua: var(--nord8); + --yellow: #e48100; + --light-yellow: #ab9a02; + --orange: #db9600; + --orange-1: #cc7523; + --light-purple: #b74ff3; + --blue-green: #3bd4da; + --white: #ffffff; + --variable-2: #0072d0; + --variable-3: #5a96f7; + + --embed-color: hsla(calc(var(--accent-h) * 1),calc(var(--accent-s) * 0.8),calc(var(--accent-l) * 1),0.035); + --search-result-file-title-color: var(--text-normal); + --theme-color: var(--interactive-accent); + --theme-color-translucent-06: hsla(var(--interactive-accent-hsl),0.6); + --theme-color-translucent-04: hsla(var(--interactive-accent-hsl),0.4); + --theme-color-translucent-02: hsla(var(--interactive-accent-hsl),0.2); + --theme-color-translucent-015: hsla(var(--interactive-accent-hsl),0.15); + --theme-color-translucent-01: hsla(var(--interactive-accent-hsl),0.1); + --theme-color-translucent-005: hsla(var(--interactive-accent-hsl),0.05); + --theme-color-translucent-001: hsla(var(--interactive-accent-hsl),0.01); + + --background-blockquote: #d5d5d52c; + --background-code: #e6e6e671; + --background-code-2: #cccccc62; + --text-color-code: #e95d00; + --code-normal: #000000; + + --list-ul-block-color: #b9751b; + --list-ul-disc-color: #f39c55; + --green-1: #3dc730; + --list-ul-hover: #dd922f; + --list-ol-block-color: #3573a5; + --list-ol-number-color: var(--list-marker-color); + --list-ol-hover: #2c7bd6; + --list-marker-color-collapsed: var(--theme-color); + + --tag-text: #f8f8f8; + --stag1: #fa8787; + --stag1-bg: #eb2727; + --stag2: #fdbd5c; + --stag2-bg: #ee9002; + --stag3: #50ce3a; + --stag3-bg: #22ac09; + --tag1: #2573f0; + --tag2: #2193f0; + --tag3: #17a5e7; + --tag4: #14acc7; + --tag5: #10bdbd; + --tag-dailynote: #0077ff; + --tag-dailynote-bg: #277CDD; + --tag-weeklynote: #4b9fff; + --tag-weeklynote-bg: #6aafff; + --tag-questions: #b68fff; + --tag-questions-bg: #b085ff; + --tag-ideas: #ceb900; + --tag-ideas-bg: #444444d8; + + --h1-color: var(--print-h1-color,hsl(216, 88%, 26%)); + --h2-color: var(--print-h2-color,hsl(212, 100%, 33%)); + --h3-color: var(--print-h3-color,hsl(210, 86%, 39%)); + --h4-color: var(--print-h4-color,hsl(208, 58%, 49%)); + --h5-color: var(--print-h5-color,hsl(209, 70%, 62%)); + --h6-color: var(--print-h6-color,hsl(209, 65%, 72%)); + + --graph-text-color: #696969; + --graph-tag: #77d425cc; + --graph-attach: #afcfe0cc; + --graph-circle: #1f78b4cc; + --graph-line: #b1b1b1; + --graph-unresolved: #db4e4ecc; + --graph-arrow: #e25300; + --graph-control-bg: #ffffff9a; + --graph-circle-outline: transparent; + --graph-canvas-bg: var(--background-primary); + --graph-circle-fill-highlight: var(--interactive-accent); + --graph-line-fill-highlight: rgb(var(--interactive-accent-rgb)); + + --unresolved-link: var(--graph-unresolved); + --link-unresolved-decoration-color: var(--graph-unresolved); + --internal-link-color: var(--text-accent); + --external-link-color: var(--internal-link-color); + + /*mermaid*/ + --mermaid-active-task-color: #44bbff; + --mermaid-seq-dia-color: #76c8ff; + + /*table*/ + --table-background-color: #f1f1f176; + --table-background-color-odd: #ffffff70; + --table-border-color: #7d7d7d; + --table-thead-background-color: var(--theme-color-translucent-01); + --table-hover-raw-color: #85bfee2f; + --table-hover-color: #5dacec34; + --table-hover-thead-color: #ddefff; + --table-header-color: var(--text-normal); + + /*calendar*/ + --calendar-week-color: #48b432; + --calendar-week-hover: #e9ffe3; + --calendar-week-background-color: #d6e6bf; + --calendar-today-background-color: #aaeec6; + --calendar-hover-color: var(--theme-color-translucent-01); + --calendar-active-color: var(--theme-color-translucent-02); + + /*day planner*/ + --day-planner-pie: #eca95c; + --day-planner-timeline: #d62f2f; + --day-planner-line: #ffd900; + --day-planner-dot: #ffd900; + --day-planner-item-hover: #8fccff; + --event-item-color1: #65ace6; + --event-item-color2: #52a4e7; + --event-item-color3: #2e96eb; + --event-item-color4: #2786da; + --event-item-color5: #1275cc; + --event-item-color6: #2664c0; + --event-item-color7: #1652ac; + --event-item-color8: #0c469c; + --event-item-color9: #0a3c86; + --event-item-color10: #072f6b; + + /*colourful notes*/ + --text-gray: #37352f99; + --text-brown: #855a46; + --text-orange: #d9730d; + --text-yellow: #d4a300; + --text-yellow-2: #a78000; + --text-green: #00927f; + --text-blue: #0083bb; + --text-purple: #5d1fb9; + --text-pink: #c40075; + --text-red: #ff4343; + --background-gray: #ebeced; + --background-brown: #e9e5e3; + --background-orange: #faebdd; + --background-yellow: #fbf3db; + --background-green: #ddedea; + --background-blue: #ddebf1; + --background-purple: #eae4f2; + --background-pink: #f4dfeb; + --background-red: #ffe3e3; + + --note-important: #fd4141; + --note-cloze: #000000; + + /* stickies */ + --stickies-color-1: #b3e2b3; + --stickies-color-2: #e9c6f1; + --tape-color: #acacac65; + + /*Sliding panes*/ + --sliding-panes-header-color: #0e64bb; + --background-4-sliding-pane: #ffffffef; + --bg-sliding-pane-header: #ffffff97; + --bg-sliding-pane-leaf: #ffffff88; + + /*admonition*/ + --admonition-bg-color: #FFFFFF00; + + /*checklist*/ + --checklist-bg: #dfdfdf8e; + --checklist-bg-hover: #ffffffcc; + + --color-view-header-gradient-1: #ffffffce; + --color-view-header-gradient-2: #ffffffce; + + /*checkbox*/ + --checkbox-color-0: #2f92e4; + --checkbox-color-1: #c4c116; + --checkbox-color-2: #4bbf40; + --checkbox-color-3: #ffe9e9; + --checkbox-color-4: #fff8b7; + --checkbox-color-5: #ad7fbf; + --checkbox-color-6: #5f5f5f; + --text-checked-checkbox: #9b9b9b; + + --activeline-background: var(--theme-color-translucent-005); + + /*pseudo-kanban*/ + --p-kanban-bg-color: #d3d3d32d; + --p-kanban-border-color: #a0a0a060; + --p-kanban-card-color-1: #ffffff80; + --p-kanban-card-color-2: #ffffff; + --p-kanban-color-6: #f18e8e65; + --p-kanban-color-5: #eeb36f65; + --p-kanban-color-4: #d1d77f65; + --p-kanban-color-3: #8ce38465; + --p-kanban-color-2: #7cdddd65; + --p-kanban-color-1: #52aaf365; + --p-kanban-color-8: #ba8be165; + --p-kanban-color-7: #e677e065; + --p-kanban-color-simple: #cdcdcd2c; + --p-kanban-color-shadow: #cfcfcf4d; + + /*style settings*/ + --background-secondary-translucent: #ffffff3d; --background-secondary-translucent-1: #ffffff5d; + + /*rainbow-checklist*/ + --checklist-color-1: #bbdefbab; + --checklist-color-2: #b2ebf2ab; + --checklist-color-3: #c8e6c9ab; + --checklist-color-4: #f8ef99ab; + --checklist-color-5: #ffe0b2ab; + --checklist-color-6: #ffcdd2ab; + --checklist-color-7: #e1bee7ab; + + --table-color-calendar-2: rgb(167, 223, 251); + --table-color-rgb: 167, 223, 251; + + --mjx-inline-math-color: var(--text-normal); + --mjx-math-color: var(--text-normal); + --background-leaf-resize-handle: var(--background-secondary-alt-bg-4-bt); + --text-folder-file-icon: var(--theme-color); + + --color-highlight-1: var(--text-normal); + --color-highlight-2: var(--text-normal); + --color-highlight-3: var(--text-normal); + --bg-color-highlight-1: #ff000034; + --bg-color-highlight-2: #0fc41835; + --bg-color-highlight-3: #4ca6ff51; + + --background-popover: var(--color-base-10); + + --cursor-red: #ff0000; + --cursor-yellow: #d5ca00; + --cursor-green: #008000; + --cursor-blue: #1791e2; + --cursor-violet: #ee82ee; + + --background-waves-color:#4A75DB8C; + + --tab-stacked-shadow: #d6d6d6; + --divider-color: #e3e3e3; + --tab-outline-color: #e3e3e3; + + --bg-color-notebook: #fef9f1; + --grid-notebook-line-color-1: #c7c7c740; + --grid-notebook-line-color-2: #afafaf40; + --dotted-notebook-dot-color: #c7c7c780; + --stripe-notebook-stripe-color: #f5f2e6; + --background-nonoverlapping-note: #ffffff; + --prompt-box-shadow: #bebebe; + --background-titlebar-inner: hsla(var(--accent-h), var(--accent-s), var(--accent-l), 10%); + --window-shadow: 0 1px 3px hsla(212, 17%, 80%, 0.2); + --window-shadow2: 0 0 9px hsla(217, 15%, 83%, 0.7); + --bt-connected-indent-line-color: #FFA8A8; + --list-colorful-marker: #fd4949; +} + +body.color-scheme-options-avocado-topaz .theme-light, +body.color-scheme-options-avocado-topaz.theme-light { + --background-primary: var(--background-primary-bg-4-bt,#ffffff); + --background-primary-alt: var(--background-primary-alt-bg-4-bt,#e9e9e9); + --background-secondary: var(--background-secondary-bg-4-bt,#fcfcfc); + --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#e8f0e8); + + --background-modifier-border: #e1dfdf; + + --accent-em: #620ac6; + --text-selection: #7fbffe59; + --accent-h: 143; + --accent-s: 34%; + --accent-l: 45%; + --interactive-accent-rgb: 122, 189, 148; + + --search-text: #000000; + --folder-title: #000000; + + --strong-em-highlight-color: #08ae84; + --mark-highlight-strong-em: #dbe72849; + --text-highlight-bg: #ecf56ed8; + --text-search-highlight-bg: #ffd1dd; + --strong-em-color-1: #08ae84; + --strong-em-color-2: #01531d; + + --background-primary-bg-4-bt: #ffffff; + --background-primary-alt-bg-4-bt: #e9e9e9; + --background-secondary-bg-4-bt: #ffffff; + --background-secondary-alt-bg-4-bt: #e8f0e8; + + --background-mobile-drawer-1: #ffffff; + --background-mobile-drawer-2: #ffffff; + --background-secondary-alt-bg-4-bt-publish: #f6f6f6; + + --background-transparent-blue: #c6e5ffde; + + --scrollbar-thumb-bg: #c6c6c6a8; + --scrollbar-active-thumb-bg: #c6c6c6; + --search-result-file-title-color: var(--text-normal); + + --background-blockquote: #b6b6b62c; + --background-code: #ebebeb71; + --background-code-2: #cccccc62; + --text-color-code: #e95d00; + + --list-ul-block-color: #b9751b; + --list-ul-disc-color: #f39c55; + --green-1: #3dc730; + --list-ul-hover: #dd922f; + --list-ol-block-color: #35a569; + --list-ol-number-color: #429a71; + --list-ol-hover: #31b870; + + --tag-text: #f8f8f8; + --stag1: #fa8787; + --stag1-bg: #eb2727; + --stag2: #fdbd5c; + --stag2-bg: #ee9002; + --stag3: #50ce3a; + --stag3-bg: #22ac09; + --tag1: #79a26b; + --tag2: #7eb56b; + --tag3: #56b15b; + --tag4: #2db37b; + --tag5: #17b198; + --tag6: #19bb8b; + --tag7: #15bf1d; + --tag8: #61c108; + --tag9: #6ab607; + --tag-dailynote: #0077ff; + --tag-dailynote-bg: #277CDD; + --tag-weeklynote: #4b9fff; + --tag-weeklynote-bg: #6aafff; + --tag-questions: #b68fff; + --tag-questions-bg: #b085ff; + --tag-ideas: #ceb900; + --tag-ideas-bg: #444444d8; + + --h1-color: var(--print-h1-color,#02401f); + --h2-color: var(--print-h2-color,#034f27); + --h3-color: var(--print-h3-color,#034924); + --h4-color: var(--print-h4-color,#14452b); + --h5-color: var(--print-h5-color,#0e4728); + --h6-color: var(--print-h6-color,#19452e); + + /*graph*/ + --graph-text-color: #696969; + --graph-tag: #da9ee2cc; + --graph-attach: #88b0d6cc; + --graph-circle: #6fbf8ecc; + --graph-line: #b1b1b1; + --graph-unresolved: #db4e4ecc; + --graph-arrow: #e25300; + --graph-control-bg: #ffffff9a; + + /*mermaid*/ + --mermaid-active-task-color: #44bbff; + --mermaid-seq-dia-color: #76c8ff; + + /*table*/ + --table-border-color: #7d7d7d; + --table-thead-background-color: #dbe4dac7; + --table-hover-raw-color: #dbe4da57; + --table-hover-color: #dbe4da37; + --table-hover-thead-color: #dbe4da; + + /*calendar*/ + --calendar-week-color: #48b432; + --calendar-week-hover: #e9ffe3; + --calendar-week-background-color: #d6e6bf; + --calendar-today-background-color: #aaeec6; + + /*day planner*/ + --day-planner-pie: #eca95c; + --day-planner-timeline: #d62f2f; + --day-planner-line: #ffd900; + --day-planner-dot: #ffd900; + --day-planner-item-hover: #5ca35c; + --event-item-color1: #7c9f14; + --event-item-color2: #659f14; + --event-item-color3: #529f14; + --event-item-color4: #3d9f14; + --event-item-color5: #2d9f14; + --event-item-color6: #1d9f14; + --event-item-color7: #149f1f; + --event-item-color8: #149f2d; + --event-item-color9: #149f39; + --event-item-color10: #149f44; + + /*Sliding panes*/ + --sliding-panes-header-color: #02401f; + + --color-view-header-gradient-1: #d9f7d9ef; + --color-view-header-gradient-2: #e9f3edef; + + /*checkbox*/ + --checkbox-color-0: #4cb385; + --checkbox-color-1: #c4c116; + --checkbox-color-2: #4077bf; + --checkbox-color-3: #ffe9e9; + --checkbox-color-4: #fffbd4; + --checkbox-color-5: #ad7fbf; + --checkbox-color-6: #5f5f5f; + + --table-color-calendar-2: rgb(182, 221, 191); + --table-color-rgb: 182, 221, 191; +} + +body.color-scheme-options-avocado-topaz .workspace-leaf.mod-active .view-header-title { + color: var(--h1-color); +} + +body.color-scheme-options-avocado-topaz.all-dark-pdf .print.theme-light, +body.color-scheme-options-avocado-topaz.theme-dark { + --background-primary: var(--background-primary-bg-4-bt,#181818); + --background-primary-alt: var(--background-primary-alt-bg-4-bt,#000000); + --background-secondary: var(--background-secondary-bg-4-bt,#181818); + --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#000000); + --accent-h: 140; + --accent-s: 52%; + --accent-l: 41%; + --interactive-accent-rgb: 50, 159, 86; + + --text-selection: #0080ff59; + --text-highlight-bg: #47893b8a; + --mark-highlight-strong-em: #47893b7a; + --strong-em-highlight-color: #9c8ce6; + --text-search-highlight-bg: #bb4361; + --strong-em-color-1: #9c8ce6; + --strong-em-color-2: #23d05c; + + --background-mobile-drawer-1: #1b1b1b; + --background-mobile-drawer-2: #1b1b1b69; + --background-transparent-blue: #003e759a; + --scrollbar-thumb-bg: #8282827e; + --scrollbar-active-thumb-bg: #828282; + --search-result-file-title-color: var(--text-normal); + + --background-blockquote: #9191911c; + --background-code: #1111118c; + --background-code-2: #4c4c4cb0; + --text-color-code: #d58000; + + --list-ul-block-color: #e19742a9; + --list-ul-disc-color: #eb9563; + --green-1: #79c142; + --list-ul-hover: #e28915de; + --list-ol-block-color: #26bb32b4; + --list-ol-number-color: #95c49d; + --list-ol-hover: #2cd62c; + + --graph-text-color: #B5B5B5; + --graph-tag: #b992ddbb; + --graph-attach: #76c1f0bb; + --graph-circle: #44d07ebb; + --graph-line: #8c8c8c; + --graph-unresolved: #f08080de; + --graph-arrow: #c23917; + --graph-control-bg: #00000080; + + /*mermaid*/ + --mermaid-active-task-color: #187ef1; + --mermaid-seq-dia-color: #1371be; + + /*table*/ + --table-thead-background-color: #557f5c43; + --table-hover-raw-color: #557f5c23; + --table-hover-color: #557f5c23; + --table-hover-thead-color: #557f5c53; + + /*calendar*/ + --calendar-week-color: #a2df94; + --calendar-week-hover: #61815c; + --calendar-week-background-color: #4a5842; + --calendar-today-background-color: #8c4545; + + /*day planner*/ + --day-planner-pie: #f19c1c; + --day-planner-timeline: #000000; + --day-planner-line: #dfcf77; + --day-planner-dot: #dfcf77; + --day-planner-item-hover: #059429; + --event-item-color1: #347703; + --event-item-color2: #077703; + --event-item-color3: #03771e; + --event-item-color4: #037737; + --event-item-color5: #03774d; + --event-item-color6: #03775a; + --event-item-color7: #03776c; + --event-item-color8: #037377; + --event-item-color9: #036877; + --event-item-color10: #035e77; + + /*Sliding panes*/ + --sliding-panes-header-color: #27b822; + --background-4-sliding-pane: #252525ed; + + --color-view-header-gradient-1: #000000de; + --color-view-header-gradient-2: #002900c0; + + /*checkbox*/ + --checkbox-color-0: #25c648; + --checkbox-color-1: #a9a608; + --checkbox-color-2: #1061ac; + --checkbox-color-3: #ffd1d1; + --checkbox-color-4: #625d4c; + --checkbox-color-5: #9a67ae; + --checkbox-color-6: #5f5f5f; + + --table-color-calendar-2: rgb(5, 158, 5); + --table-color-rgb: 5, 158, 5; + --divider-color: #000000; +} + +body.color-scheme-options-monochrome-topaz.all-dark-pdf .print.theme-light, +body.color-scheme-options-monochrome-topaz.theme-dark { + --background-primary: var(--background-primary-bg-4-bt,#1e1e1e); + --background-primary-alt: var(--background-primary-alt-bg-4-bt,#000000); + --background-secondary: var(--background-secondary-bg-4-bt,#151515); + --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#000000); + --accent-em: #ffffff; + --accent-h: 0; + --accent-s: 0%; + --accent-l: 47%; + --interactive-accent-rgb: 120, 120, 120; + + --text-highlight-bg: #89853b8a; + --mark-highlight-strong-em: #fff7603a; + --strong-em-highlight-color: #ffffff; + --text-search-highlight-bg: #bb4361; + + --search-result-file-title-color: var(--text-normal); + + --background-blockquote: #9191911c; + --background-code: #1111118c; + --background-code-2: #4c4c4cb0; + --text-color-code: #d58000; + + --internal-link-color: #3197eb; + --list-ul-block-color: #d0d0d0a9; + --list-ul-disc-color: #eb9563; + --green-1: #79c142; + --list-ul-hover: #e28915de; + --list-ol-block-color: #878787b4; + --list-ol-number-color: #c6c6c6; + --list-ol-hover: #2c7bd6; + --tag-text: #e4e4e4; + --stag1: #f08383; + --stag1-bg: #bd1919; + --stag2: #e7b263; + --stag2-bg: #ac6700; + --stag3: #77df89; + --stag3-bg: #058c1c; + --tag1: #cccccc; + --tag2: #cccccc; + --tag3: #cccccc; + --tag4: #cccccc; + --tag5: #cccccc; + --tag-dailynote: #98c8ff; + --tag-dailynote-bg: #0f60bd; + --tag-weeklynote: #d1e6ff; + --tag-weeklynote-bg: #3971b1; + --tag-questions: #d4bdff; + --tag-questions-bg: #6640ae; + --tag-ideas: #fcfcc0; + --tag-ideas-bg: #565656d8; + + --h1-color: var(--print-h1-color,#ebebeb); + --h2-color: var(--print-h2-color,#ebebeb); + --h3-color: var(--print-h3-color,#ebebeb); + --h4-color: var(--print-h4-color,#ebebeb); + --h5-color: var(--print-h5-color,#ebebeb); + --h6-color: var(--print-h6-color,#ebebeb); + + /*graph*/ + --graph-text-color: #B5B5B5; + --graph-tag: #88d842bb; + --graph-attach: #5cb5e9bb; + --graph-circle: #ebebebb9; + --graph-line: #8c8c8c; + --graph-unresolved: #f08080de; + --graph-arrow: #c23917; + --graph-control-bg: #00000080; + + /*mermaid*/ + --mermaid-active-task-color: #187ef1; + --mermaid-seq-dia-color: #1371be; + + --table-border-color: #878787; + --table-thead-background-color: #b3b3b363; + --table-hover-raw-color: #4040401c; + --table-hover-color: #59595947; + --table-hover-thead-color: #6969691c; + + /*calendar*/ + --calendar-week-color: #ededed; + --calendar-week-hover: #bfbfbf52; + --calendar-week-background-color: #b5b5b52e; + --calendar-today-background-color: #8c4545; + + /*day planner*/ + --day-planner-pie: #f19c1c; + --day-planner-timeline: #000000; + --day-planner-line: #dfcf77; + --day-planner-dot: #dfcf77; + --day-planner-item-hover: #707070; + --event-item-color1: #0a0a0a; + --event-item-color2: #121212; + --event-item-color3: #171717; + --event-item-color4: #212121; + --event-item-color5: #2b2b2b; + --event-item-color6: #333333; + --event-item-color7: #3d3d3d; + --event-item-color8: #454545; + --event-item-color9: #4d4d4d; + --event-item-color10: #575757; + + /*Sliding panes*/ + --sliding-panes-header-color: #ebebeb; + --background-4-sliding-pane: #252525ed; + + + + --color-view-header-gradient-1: #000000de; + --color-view-header-gradient-2: #000000c0; + + --table-color-calendar-2: rgb(69, 69, 69); + --table-color-rgb: 69, 69, 69; +} + +body.color-scheme-options-monochrome-topaz .theme-light, +body.color-scheme-options-monochrome-topaz.theme-light { + --background-primary: var(--background-primary-bg-4-bt,#ffffff); + --background-primary-alt: var(--background-primary-alt-bg-4-bt,#e9e9e9); + --background-secondary: var(--background-secondary-bg-4-bt,#ffffff); + --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#f5f5f5); + --accent-strong: #000000; + --accent-em: #000000; + --text-selection: #c6c6c659; + --accent-h: 0; + --accent-s: 0%; + --accent-l: 31%; + --interactive-accent-rgb: 79, 79, 79; + + --strong-em-highlight-color: #000000; + --text-highlight-bg: #ecf56eb4; + --mark-highlight-strong-em: #ecf56eb4; + --text-search-highlight-bg: #ffd1dd; + --strong-em-color-1: #08ae84; + --strong-em-color-2: #01531d; + + --search-result-file-title-color: var(--text-normal); + + --background-blockquote: #b6b6b62c; + --background-code: #ebebeb71; + --background-code-2: #cccccc62; + --text-color-code: #e95d00; + + --internal-link-color: #0040ff; + + /*list*/ + --list-ul-block-color: #313131; + --list-ul-disc-color: #f39c55; + --green-1: #3dc730; + --list-ul-hover: #dd922f; + --list-ol-block-color: #a2a2a2; + --list-ol-number-color: #b5b5b5; + --list-ol-hover: #4f8fcb; + + --tag-text: #5a5a5a; + --stag1: #fa8787; + --stag1-bg: #eb2727; + --stag2: #fdbd5c; + --stag2-bg: #ee9002; + --stag3: #50ce3a; + --stag3-bg: #22ac09; + --tag1: #4f4f4f; + --tag2: #4f4f4f; + --tag3: #4f4f4f; + --tag4: #4f4f4f; + --tag5: #4f4f4f; + --tag-dailynote: #0077ff; + --tag-dailynote-bg: #277CDD; + --tag-weeklynote: #4b9fff; + --tag-weeklynote-bg: #6aafff; + --tag-questions: #b68fff; + --tag-questions-bg: #b085ff; + --tag-ideas: #ceb900; + --tag-ideas-bg: #444444d8; + + --h1-color: var(--print-h1-color,#000000); + --h2-color: var(--print-h2-color,#000000); + --h3-color: var(--print-h3-color,#000000); + --h4-color: var(--print-h4-color,#000000); + --h5-color: var(--print-h5-color,#000000); + --h6-color: var(--print-h6-color,#000000); + + /*graph*/ + --graph-text-color: #696969; + --graph-tag: #57bf5fcc; + --graph-attach: #78b0e4cc; + --graph-circle: #6a6a6acc; + --graph-line: #b1b1b1; + --graph-unresolved: #db4e4ecc; + --graph-arrow: #e25300; + --graph-control-bg: #ffffff9a; + + /*mermaid*/ + --mermaid-active-task-color: #44bbff; + --mermaid-seq-dia-color: #76c8ff; + + /*table*/ + --table-border-color: #7d7d7d; + --table-thead-background-color: #bdbdbdc7; + --table-hover-raw-color: #f0f0f063; + --table-hover-color: #e3e3e354; + --table-hover-thead-color: #ebebeb54; + + /*calendar*/ + --calendar-week-color: #949494; + --calendar-week-hover: #b5b5b52e; + --calendar-week-background-color: #878787; + --calendar-today-background-color: #aaeec6; + + /*day planner*/ + --day-planner-pie: #eca95c; + --day-planner-timeline: #d62f2f; + --day-planner-line: #ffd900; + --day-planner-dot: #ffd900; + --day-planner-item-hover: #474747; + --event-item-color1: #b5b5b5; + --event-item-color2: #a8a8a8; + --event-item-color3: #a1a1a1; + --event-item-color4: #969696; + --event-item-color5: #8c8c8c; + --event-item-color6: #828282; + --event-item-color7: #787878; + --event-item-color8: #707070; + --event-item-color9: #666666; + --event-item-color10: #595959; + + /*Sliding panes*/ + --sliding-panes-header-color: #000000; + --background-4-sliding-pane: #ffffffef; + + --color-view-header-gradient-1: #ffffffef; + --color-view-header-gradient-2: #ffffffef; + + --table-color-calendar-2: rgb(212, 212, 212); + --table-color-rgb: 212, 212, 212; +} + + +body.color-scheme-options-avocado-topaz .workspace-leaf.mod-active .view-header-title { + color: var(--h1-color); +} + +body.color-scheme-options-monochrome-topaz *:not(font)>em>strong, +body.color-scheme-options-monochrome-topaz *:not(font)>strong>em, +body.color-scheme-options-monochrome-topaz .cm-strong.cm-em { + background-image: initial; + background-clip: initial; + -webkit-background-clip: initial; + -webkit-text-fill-color: initial; + background-color: initial; +} + +body.color-scheme-options-pink-topaz .theme-light, +body.color-scheme-options-pink-topaz.theme-light { + --background-primary: var(--background-primary-bg-4-bt,#fffaf0); + --background-primary-alt: var(--background-primary-alt-bg-4-bt,#e9e9e9); + --background-secondary: var(--background-secondary-bg-4-bt,#fffaf0); + --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#ffebeb); + --background-modifier-border: #e1dfdf; + --text-normal: #0e0e0e; + --text-muted: #7f7f7f; + --text-faint: #7f7f7f; + --text-folder-file: #272727; + + --accent-em: #000000; + --accent-h: 325; + --accent-s: 80%; + --accent-l: 77%; + --text-selection: #f7b2cf59; + --interactive-accent-rgb: 243, 148, 203; + + --search-text: #000000; + --folder-title: #000000; + + --strong-em-highlight-color: #000000; + --mark-highlight-strong-em: #ffd0e99b; + --text-highlight-bg: #ffd0e99b; + --text-search-highlight-bg: #ffd1dd; + --search-result-file-matched-bg: #ffc3c3; + + --background-mobile-drawer-1: #ffffff; + --background-mobile-drawer-2: #ffffff; + --background-secondary-alt-bg-4-bt-publish: #f6f6f6; + + --scrollbar-thumb-bg: #e2bdbd8d; + --scrollbar-active-thumb-bg: #e2bdbd; + --search-result-file-title-color: #cc437c; + + --background-blockquote: #e6d6ba2c; + --background-code: #fae4ee4d; + --background-code-2: #d5d5d562; + --text-color-code: #e95d00; + + --list-ul-block-color: #c7c947; + --list-ul-disc-color: #f39c55; + --green-1: #3dc730; + --list-ul-hover: #dd922f; + --list-ol-block-color: #ce6d8a; + --list-ol-number-color: #e599ac; + --list-ol-hover: #b83175; + + --tag-text: #f8f8f8; + --stag1: #fa8787; + --stag1-bg: #eb2727; + --stag2: #fdbd5c; + --stag2-bg: #ee9002; + --stag3: #50ce3a; + --stag3-bg: #22ac09; + --tag1: #f1afaf; + --tag2: #e7c190; + --tag3: #86c93a; + --tag4: #48c6bf; + --tag5: #797fd1; + --tag-dailynote: #0077ff; + --tag-dailynote-bg: #277CDD; + --tag-weeklynote: #4b9fff; + --tag-weeklynote-bg: #6aafff; + --tag-questions: #b68fff; + --tag-questions-bg: #b085ff; + --tag-ideas: #ceb900; + --tag-ideas-bg: #444444d8; + + --h1-color: var(--print-h1-color,#6f0000); + --h2-color: var(--print-h2-color,#7a0757); + --h3-color: var(--print-h3-color,#9a1d75); + --h4-color: var(--print-h4-color,#b52a87); + --h5-color: var(--print-h5-color,#bb5795); + --h6-color: var(--print-h6-color,#cc76b7); + + /*graph*/ + --graph-text-color: #585858; + --graph-tag: #e3c982c7; + --graph-attach: #c982e3c7; + --graph-circle: #f596bbcc; + --graph-line: #e6b0c9; + --graph-unresolved: #db4e4ecc; + --graph-arrow: #e25300; + --graph-control-bg: #ffffff9a; + + /*mermaid*/ + --mermaid-active-task-color: #44bbff; + --mermaid-seq-dia-color: #76c8ff; + + /*table*/ + + --table-border-color: #7d7d7d; + --table-thead-background-color: #fad1e96f; + --table-hover-raw-color: #fad1e92f; + --table-hover-color: #fad1e92f; + --table-hover-thead-color: #fad1e98f; + + /*calendar*/ + --calendar-week-color: #b884a5c7; + --calendar-week-hover: #e3d8df66; + --calendar-week-background-color: #b884a599; + --calendar-today-background-color: #b1779c94; + + /*day planner*/ + --day-planner-pie: #eca95c; + --day-planner-timeline: #d62f2f; + --day-planner-line: #ffd900; + --day-planner-dot: #ffd900; + --day-planner-item-hover: #e8a6be; + --event-item-color1: #e5b8cb; + --event-item-color2: #e1a3bd; + --event-item-color3: #e090b1; + --event-item-color4: #e080a8; + --event-item-color5: #e0719f; + --event-item-color6: #e16096; + --event-item-color7: #e25590; + --event-item-color8: #e64c8c; + --event-item-color9: #e64186; + --event-item-color10: #e92b7a; + + /* stickies */ + --stickies-color-1: #e5c7dab5; + --stickies-color-2: #dac7afc7; + --tape-color: #acacac65; + + /*Sliding panes*/ + --sliding-panes-header-color: #6f0000; + --background-4-sliding-pane: #ffffffef; + + --color-view-header-gradient-1: #ffdfe4ef; + --color-view-header-gradient-2: #ffe4e4ef; + + /*checkbox*/ + --checkbox-color-0: #d879a8; + --checkbox-color-1: #c4c116; + --checkbox-color-2: #50a947; + --checkbox-color-3: #ffe9e9; + --checkbox-color-4: #fffbd4; + --checkbox-color-5: #ad7fbf; + --checkbox-color-6: #5f5f5f; + --text-checked-checkbox: #9b9b9b; + + --table-color-calendar-2: rgb(245, 214, 224); + --table-color-rgb: 245, 214, 224; +} + +body.color-scheme-options-pink-topaz.all-dark-pdf .print.theme-light, +body.color-scheme-options-pink-topaz.theme-dark { + --background-primary: var(--background-primary-bg-4-bt,#0f0f0f); + --background-primary-alt: var(--background-primary-alt-bg-4-bt,#000000); + --background-secondary: var(--background-secondary-bg-4-bt,#181818); + --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#222222); + + --accent-em: #d9d4a6; + --accent-h: 338; + --accent-s: 51%; + --accent-l: 59%; + --interactive-accent-rgb: 204, 97, 136; + + --text-highlight-bg: #de87a785; + --mark-highlight-strong-em: #dc799e85; + + --strong-em-highlight-color: #d9afb3d1; + --text-search-highlight-bg: #bb4361; + --strong-em-color-1: #fc3b3b; + --strong-em-color-2: #f5c414; + --search-result-file-matched-bg: #a9672dc9; + + --background-mobile-drawer-1: #1b1b1b; + --background-mobile-drawer-2: #1b1b1b69; + + --background-transparent-blue: #003e759a; + --scrollbar-thumb-bg: #8d69698d; + --scrollbar-active-thumb-bg: #8d6969; + --search-result-file-title-color: #c0689b; + + --background-blockquote: #9191911c; + --background-code: #00000082; + --background-code-2: #4c4c4cb0; + --text-color-code: #d58000; + + /*list*/ + --list-ul-block-color: #b27b7b; + --list-ul-disc-color: #af5a5a; + --green-1: #79c142; + --list-ul-hover: #b69696; + --list-ol-block-color: #ce7ea7; + --list-ol-number-color: #a25d81; + --list-ol-hover: #c0a5b3; + + --tag-text: #e4e4e4; + --stag1: #f08383; + --stag1-bg: #bd1919; + --stag2: #e7b263; + --stag2-bg: #ac6700; + --stag3: #77df89; + --stag3-bg: #058c1c; + --tag1: #ba6d6d; + --tag2: #ba6d7b; + --tag3: #ba6d88; + --tag4: #ba6d96; + --tag5: #ba6da6; + --tag-dailynote: #98c8ff; + --tag-dailynote-bg: #0f60bd; + --tag-weeklynote: #d1e6ff; + --tag-weeklynote-bg: #3971b1; + --tag-questions: #d4bdff; + --tag-questions-bg: #6640ae; + --tag-ideas: #fcfcc0; + --tag-ideas-bg: #565656d8; + + --h1-color: var(--print-h1-color,#c66279); + --h2-color: var(--print-h2-color,#bb7283); + --h3-color: var(--print-h3-color,#b4507f); + --h4-color: var(--print-h4-color,#b25c84); + --h5-color: var(--print-h5-color,#b74e94); + --h6-color: var(--print-h6-color,#b7629a); + + /*graph*/ + --graph-text-color: #B5B5B5; + --graph-tag: #d2bf83c7; + --graph-attach: #ad71d6c7; + --graph-circle: #d67a8dc7; + --graph-line: #ad7b8dc7; + --graph-unresolved: #cf3a3ac7; + --graph-arrow: #c23917; + --graph-control-bg: #00000080; + + /*mermaid*/ + --mermaid-active-task-color: #187ef1; + --mermaid-seq-dia-color: #1371be; + + /*table*/ + + --table-thead-background-color: #a76c8f45; + --table-hover-raw-color: #a76c8f25; + --table-hover-color: #a76c8f2b; + --table-hover-thead-color: #a76c8f35; + + /*calendar*/ + --calendar-week-color: #bb6396e6; + --calendar-week-hover: #96798a6b; + --calendar-week-background-color: #c794948c; + --calendar-today-background-color: #8c4545; + + /*day planner*/ + --day-planner-pie: #f19c1c; + --day-planner-timeline: #000000; + --day-planner-line: #dfcf77; + --day-planner-dot: #dfcf77; + --day-planner-item-hover: #b893a3ad; + --event-item-color1: #d35f5fc7; + --event-item-color2: #d35f6ac7; + --event-item-color3: #d35f76c7; + --event-item-color4: #d35f7ec7; + --event-item-color5: #d35f86c7; + --event-item-color6: #d35f8dc7; + --event-item-color7: #d35f95c7; + --event-item-color8: #d35f9dc7; + --event-item-color9: #d35fa3c7; + --event-item-color10: #d35facc7; + + /*kanban*/ + --kanban-color-1: #9b3636ad; + --kanban-color-2: #9b364ead; + --kanban-color-3: #9b3660ad; + --kanban-color-4: #9b366fad; + --kanban-color-5: #9b3679ad; + --kanban-color-6: #9b368cad; + --kanban-color-7: #99369bad; + + /* stickies */ + --stickies-color-1: #ecb6d8c7; + --stickies-color-2: #ecd9b6c7; + + /*Sliding panes*/ + --sliding-panes-header-color: #ffffff; + --background-4-sliding-pane: #252525ed; + + --color-view-header-gradient-1: #000000c2; + --color-view-header-gradient-2: #2e1f28c2; + + --checkbox-color-0: var(--theme-color); + --checkbox-color-1: #a9a608; + --checkbox-color-2: #1061ac; + --checkbox-color-3: #ffd1d1; + --checkbox-color-4: #625d4c; + --checkbox-color-5: #9a67ae; + --checkbox-color-6: #5f5f5f; + --text-checked-checkbox: #8e8e8e; + + --table-color-calendar-2: rgb(215, 121, 153); + --table-color-rgb: 215, 121, 153; +} + +body.color-scheme-options-pink-topaz.theme-light *:not(font)>em>strong, +body.color-scheme-options-pink-topaz.theme-light *:not(font)>strong>em, +body.color-scheme-options-pink-topaz.theme-light .cm-strong.cm-em { + background-image: initial; + background-clip: initial; + -webkit-background-clip: initial; + -webkit-text-fill-color: initial; + background-color: initial; +} + +body.color-scheme-options-topaz-nord.all-dark-pdf .print.theme-light, +body.color-scheme-options-topaz-nord.theme-dark { + --background-primary: var(--background-primary-bg-4-bt,#2E3440); + --background-primary-alt: var(--background-primary-alt-bg-4-bt,#2E3440); + --background-secondary: var(--background-secondary-bg-4-bt,#3B4252); + --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#434C5E); + + --background-black-or-white-1: var(--nord2); + + --text-normal: var(--nord4); + --text-muted: var(--nord5); + --text-faint: var(--nord6); + --accent-h: 210; + --accent-s: 34%; + --accent-l: 63%; + + --text-folder-file: var(--nord4); + + --accent-em: var(--nord14); + + --text-highlight-bg: var(--nord13-1); + --mark-highlight-strong-em: var(--nord13-1); + --text-selection: var(--nord9-2); + + --interactive-accent-rgb: 129, 161, 193; + + --folder-title: var(--nord4); + + --tag-text: var(--nord7); + --tag1: var(--nord7-transparent); + --tag2: var(--nord7-transparent); + --tag3: var(--nord7-transparent); + --tag4: var(--nord7-transparent); + --tag5: var(--nord7-transparent); + + --h1-color: var(--print-h1-color,var(--nord11)); + --h2-color: var(--print-h2-color,var(--nord12)); + --h3-color: var(--print-h3-color,var(--nord13)); + --h4-color: var(--print-h4-color,var(--nord14)); + --h5-color: var(--print-h5-color,var(--nord8)); + --h6-color: var(--print-h6-color,var(--nord15)); + + --background-code: #3B42525c; + --background-blockquote: #3B42525c; + + --text-color-code: var(--nord8); + + --color-view-header-gradient-1: var(--nord0); + --color-view-header-gradient-2: var(--nord0); + + --strong-em-color-1: var(--accent-strong); + --strong-em-color-2: var(--accent-strong); + --strong-em-highlight-color: var(--accent-strong); + + --embed-color: var(--nord1-1); + + --activeline-background: #4C566A1a; + + --list-ul-block-color: var(--nord12); + --list-ul-disc-color: var(--nord12); + --green-1: var(--nord14); + --list-ul-hover: var(--nord13); + --list-ol-block-color: var(--nord9); + --list-ol-number-color: var(--nord9); + --list-ol-hover: var(--nord7); + + --table-thead-background-color: var(--nord9-2); + --table-hover-raw-color: var(--nord9-2); + --table-hover-color: var(--nord9-2); + --table-hover-thead-color: var(--nord9-1); + + --checkbox-color-0: var(--interactive-accent); + + --graph-text-color: var(--nord4); + --graph-tag: var(--nord7); + --graph-attach: var(--nord15); + --graph-circle: var(--nord9); + --graph-line: var(--nord6); + --graph-unresolved: var(--nord11); + --graph-arrow: var(--nord11); + + --text-search-highlight-bg: var(--nord9-1); + --tab-outline-color: var(--nord0); + --divider-color: var(--nord0); +} + +body.color-scheme-options-topaz-nord.theme-dark .titlebar-text { + color: var(--nord4); +} + +body.color-scheme-options-topaz-nord.theme-dark .token.unit { + color: var(--nord10) !important; +} + +body.color-scheme-options-topaz-nord.theme-dark .cm-s-obsidian .cm-hmd-frontmatter.cm-qualifier, +body.color-scheme-options-topaz-nord.theme-dark .cm-s-obsidian .cm-math.cm-qualifier, +body.color-scheme-options-topaz-nord.theme-dark .cm-s-obsidian .cm-qualifier, +body.color-scheme-options-topaz-nord.theme-dark .token.class { + color: var(--nord7) !important; +} + +body.color-scheme-options-topaz-nord.theme-dark .token.number, +body.color-scheme-options-topaz-nord.theme-dark .cm-number { + color: var(--nord15) !important; +} + +body.color-scheme-options-topaz-nord.theme-dark .token.operator, +body.color-scheme-options-topaz-nord.theme-dark .token.entity, +body.color-scheme-options-topaz-nord.theme-dark .token.url, +body.color-scheme-options-topaz-nord.theme-dark .language-css .token.string, +body.color-scheme-options-topaz-nord.theme-dark .style .token.string, +body.color-scheme-options-topaz-nord.theme-dark .cm-string, +body.color-scheme-options-topaz-nord.theme-dark .token.string, +body.color-scheme-options-topaz-nord.theme-dark .token.char, +body.color-scheme-options-topaz-nord.theme-dark .token.attr-value, +body.color-scheme-options-topaz-nord.theme-dark .token.builtin, +body.color-scheme-options-topaz-nord.theme-dark .token.inserted { + color: var(--nord14) !important; +} + +body.color-scheme-options-topaz-nord.theme-dark .token.selector, +body.color-scheme-options-topaz-nord.theme-dark .token.tag, +body.color-scheme-options-topaz-nord.theme-dark .cm-s-obsidian span.cm-variable-3 { + color: var(--nord10) !important; +} + +body.color-scheme-options-topaz-nord.theme-dark .token.regex, +body.color-scheme-options-topaz-nord.theme-dark .token.variable, +body.color-scheme-options-topaz-nord.theme-dark .cm-s-obsidian span.cm-variable-2 { + color: var(--nord12) !important; +} + +body.color-scheme-options-topaz-nord.theme-dark .token.macro.property, +body.color-scheme-options-topaz-nord.theme-dark .markdown-source-view.cm-s-obsidian .cm-hmd-codeblock.cm-property, +body.color-scheme-options-topaz-nord.theme-dark .token.property, +body.color-scheme-options-topaz-nord.theme-dark .token.boolean, +body.color-scheme-options-topaz-nord.theme-dark .token.constant, +body.color-scheme-options-topaz-nord.theme-dark .token.symbol, +body.color-scheme-options-topaz-nord.theme-dark .token.attr-name, +body.color-scheme-options-topaz-nord.theme-dark .token.deleted { + color: var(--nord9) !important; +} + +body.color-scheme-options-topaz-nord.theme-dark .token.function, +body.color-scheme-options-topaz-nord.theme-dark .markdown-source-view.cm-s-obsidian .cm-variable { + color: var(--nord13) !important; +} + +body.color-scheme-options-topaz-nord.theme-dark .token.comment, +body.color-scheme-options-topaz-nord.theme-dark .cm-s-obsidian span.cm-comment { + color: var(--nord3-1) !important; +} + +body.color-scheme-options-topaz-nord.theme-dark .token.atrule, +body.color-scheme-options-topaz-nord.theme-dark .token.keyword { + color: var(--nord13) !important; +} + +body.color-scheme-options-topaz-nord.theme-dark .token.tag, +body.color-scheme-options-topaz-nord.theme-dark .token.constant, +body.color-scheme-options-topaz-nord.theme-dark .token.symbol, +body.color-scheme-options-topaz-nord.theme-dark .token.deleted, +body.color-scheme-options-topaz-nord.theme-dark .cm-tag { + color: var(--nord11) !important; +} + +body.color-scheme-options-topaz-nord.theme-dark .token.color, +body.color-scheme-options-topaz-nord.theme-dark .token.hexcode.color { + color: var(--nord8) !important; +} + +body.color-scheme-options-topaz-nord.theme-dark #calendar-container, +body.style-options-for-calendar-plugin-style-one.color-scheme-options-topaz-nord.theme-dark #calendar-container { + --color-tr: var(--nord0); + --color-calendar-weekends: var(--nord11); +} + +body.color-scheme-options-topaz-nord .theme-light, +body.color-scheme-options-topaz-nord.theme-light { + --accent-h: 210; + --accent-s: 34%; + --accent-l: 63%; + --accent-em: var(--nord14-0); + + --text-selection: var(--nord9-2); + + --interactive-accent-rgb: 129, 161, 193; + + --tag-text: #3a79dd; + --tag1: #005aec21; + --tag2: #005aec21; + --tag3: #005aec21; + --tag4: #005aec21; + --tag5: #005aec21; + --h1-color: var(--print-h1-color,var(--nord11)); + --h2-color: var(--print-h2-color,var(--nord12)); + --h3-color: var(--print-h3-color,var(--nord13-0)); + --h4-color: var(--print-h4-color,var(--nord14-0)); + --h5-color: var(--print-h5-color,var(--nord8-0)); + --h6-color: var(--print-h6-color,var(--nord15)); + + --background-code: var(--nord6-2); + --background-blockquote: var(--nord6-2); + + --text-highlight-bg: var(--nord13-1); + --mark-highlight-strong-em: var(--nord13-1); + + --text-color-code: var(--nord8-0); + + --color-view-header-gradient-1: var(--background-primary-bg-4-bt); + --color-view-header-gradient-2: var(--background-primary-bg-4-bt); + + --strong-em-color-1: var(--accent-strong); + --strong-em-color-2: var(--accent-strong); + --strong-em-highlight-color: var(--accent-strong); + + --embed-color: var(--nord6-2); + + --activeline-background: var(--nord5-1); + + --list-ul-block-color: var(--nord12); + --list-ul-disc-color: var(--nord12); + --green-1: var(--nord14-0); + --list-ul-hover: var(--nord13-0); + --list-ol-block-color: var(--nord9); + --list-ol-number-color: var(--nord9); + --list-ol-hover: var(--nord7); + + --table-thead-background-color: var(--nord9-2); + --table-hover-raw-color: var(--nord9-2); + --table-hover-color: var(--nord9-2); + --table-hover-thead-color: var(--nord9-1); + + --checkbox-color-0: var(--interactive-accent); + + --graph-text-color: var(--nord1); + --graph-tag: var(--nord7); + --graph-attach: var(--nord15); + --graph-circle: var(--nord9); + --graph-line: var(--nord3-1); + --graph-unresolved: var(--nord11); + --graph-arrow: var(--nord11); + + --text-search-highlight-bg: var(--nord9-2); +} + +/*@Lavi & @嘴 的Flamingo主题色(原Pink Topaz)*/ +body.color-scheme-options-flamingo .theme-light, +body.color-scheme-options-flamingo.theme-light { + --background-primary: var(--background-primary-bg-4-bt,#efe9d9); + --background-primary-alt: var(--background-primary-alt-bg-4-bt,#ffdece); + --background-secondary: var(--background-secondary-bg-4-bt,#efe9d9); + --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#efe9d9); + + --background-4-sliding-panel: #efe9d9; + --background-mobile-drawer-1: #efe9d9; + --background-mobile-drawer-2: #efe9d9; + --graph-control-bg: #efe9d9; + + --background-modifier-border: rgba(0, 0, 0, 0.1); + --background-modifier-form-field: #ffdece; + --background-modifier-form-field-highlighted: #f5a7a2; + --background-modifier-box-shadow: rgba(0, 0, 0, 0.1); + --background-modifier-success: #ffdece; + --background-modifier-error: #f5a7a2; + --background-modifier-error-rgb: 230, 135, 135; + --background-modifier-error-hover: #fefcf9; + + --text-normal: #37291a; + --text-muted: #37291a; + --text-faint: #37291a; + --accent-strong: #37291a; + --text-error: #f5a7a2; + --text-error-hover: #fefcf9; + + --text-highlight-bg-h: 4; + --text-highlight-bg-s: 81%; + --text-highlight-bg-l: 80%; + --text-highlight-bg-a: 0.847; + --text-highlight-bg: hsla(var(--text-highlight-bg-h), var(--text-highlight-bg-s), var(--text-highlight-bg-l), var(--text-highlight-bg-a)); + --text-selection: #f39ba044; + + --interactive-accent-rgb: 245,167,162; + --accent-h: 4; + --accent-s: 81%; + --accent-l: 80%; + --panel-border-color: #fd355a; + --search-text: #37291a; + --folder-title: #37291a; + + --gray-1: #c4c4c4; + --gray-2: #7c8595; + --red: #fd355a; + --red-1: #980000; + --green: #40916c; + --darkgreen: #004f2d; + --blue: #69a2ee; + --darkblue: #5981f0; + --purple: #8673b4; + --aqua: #4dd8ef; + --yellow: #ffc727; + --light-yellow: #e5e79c; + --orange: #f19c79; + --light-purple: #d3d6fe; + --blue-green: #16bcc0; + + --search-result-file-title-color: #980000; + + --list-ul-block-color: #f5a7a2; + --list-ul-disc-color: #fd355a; + --list-ul-hover: #980000; + --list-ol-block-color: #f5a7a2; + --list-ol-number-color: #f5a7a2; + --list-ol-hover: #980000; + --stag1: #fd355a; + --stag2: #fd355a; + --stag3: #fd355a; + --tag1: #56cfc7c7; + --tag2: #eca1bcda; + --tag3: #e6d00d; + --tag4: #40916c; + --tag5: #68c7a4; + + --h1-color: var(--print-h1-color,#f39ba0); + --h2-color: var(--print-h2-color,#f39ba0); + --h3-color: var(--print-h3-color,#f39ba0); + --h4-color: var(--print-h4-color,#f39ba0); + --h5-color: var(--print-h5-color,#f39ba0); + --h6-color: var(--print-h6-color,#f39ba0); + + --graph-text-color: #37291a; + --graph-tag: #ffdece; + --graph-attach: #f5a7a2; + --graph-circle: #FD355C; + --graph-line: #fea2c2; + --graph-unresolved: #E87659; + --graph-arrow: #980000; + --mermaid-active-task-color: #f5a7a2; + --mermaid-seq-dia-color: #ffdece; + --table-background-color: #ffdece; + --table-background-color-odd: #ffdece; + --table-border-color: #fd355a; + --table-thead-background-color: #f5a7a2; + --table-hover-color: #f5a7a2; + --table-hover-thead-color: #f5a7a2; + --table-hover-raw-color: #ffdece; + --calendar-week-color: #f5a7a2; + --calendar-week-hover: #ffdece; + --calendar-week-background-color: #ffdece; + --day-planner-pie: #f5a7a2; + --day-planner-timeline: #ffdece; + --day-planner-line: #fd355a; + --day-planner-dot: #ffdece; + --day-planner-item-hover: #f5a7a2; + --event-item-color1: #f39ba063; + --event-item-color2: #f39ba091; + --event-item-color3: #f39ba0c4; + --event-item-color4: #f39ba0; + --event-item-color5: #D08489; + --event-item-color6: #B27175; + --event-item-color7: #D08489; + --event-item-color8: #f39ba0; + --event-item-color9: #f39ba0c4; + --event-item-color10: #f39ba091; + + --note-important: #fd355a; + --note-cloze: #fd355a; + --stickies-color-1: #e46969; + --stickies-color-2: #f5a7a2; + --tape-color: #acacac65; + --header-color: #f5a7a2; + + --color-view-header-gradient-1: #efe9d933; + --color-view-header-gradient-2: #efe9d933; + + --table-color-calendar-2: rgb(214, 118, 146); + --table-color-rgb: 214, 118, 146; + --scrollbar-thumb-bg: #f39ba050; + --scrollbar-active-thumb-bg: #f39ba0; +} + +body.color-scheme-options-flamingo.all-dark-pdf .print.theme-light, +body.color-scheme-options-flamingo.theme-dark { + --background-primary: var(--background-primary-bg-4-bt,#212121); + --background-primary-alt: var(--background-primary-alt-bg-4-bt,#f937590d); + --background-secondary: var(--background-secondary-bg-4-bt,#242424); + --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#191919); + + --background-modifier-border: #191919; + --background-modifier-form-field: #f39ba0; + --background-modifier-form-field-highlighted: #e5c7a9; + --background-modifier-box-shadow: #292929; + --background-modifier-success: #f93759; + --background-modifier-error: #f93759; + --background-modifier-error-rgb: #f93759; + --background-modifier-error-hover: #F93758; + + --text-normal: #efe9d9; + --text-muted: #efe9d9; + --text-faint: #efe9d9; + --accent-strong: #efe9d9; + --text-em-color: #f93759; + --text-error: #f93759; + --text-error-hover: #f93759; + + --text-highlight-bg-h: 357; + --text-highlight-bg-s: 79%; + --text-highlight-bg-l: 78%; + --text-highlight-bg-a: 0.847; + --text-highlight-bg: hsla(var(--text-highlight-bg-h), var(--text-highlight-bg-s), var(--text-highlight-bg-l), var(--text-highlight-bg-a)); + --text-selection: #e5c7a94a; + + --accent-h: 357; + --accent-s: 79%; + --accent-l: 78%; + --interactive-accent-rgb: 243, 155, 160; + + --panel-border-color: #f93759; + --search-text: #fff; + --folder-title: #fff; + + --gray-1: #c9b0b0; + --gray-2: #b4b1c6; + --red: #ff9090; + --red-1: #f93759; + --orange: #f28d61; + --green: #00ffc7; + --darkgreen: #1bbc9b; + --aqua: #30daff; + --purple: #b073ff; + --blue: #00a3b9; + --darkblue: #0040ff; + --yellow: #fcdc00; + --light-yellow: #ffd26c; + + --search-result-file-title-color: #f39ba0; + --background-blockquote-dark: #292929; + --list-ul-block-color: #f39ba0; + --list-ul-disc-color: #f93759; + --list-ul-hover: #ffebec; + --list-ol-block-color: #f39ba0; + --list-ol-number-color: #ffccbc; + --list-ol-hover: #ffebec; + --stag1: #f39ba0; + --stag2: #ffccbc; + --stag3: #ffebec; + --tag1: #028588; + --tag2: #40916c; + --tag3: #69a2ee; + --tag4: #c47a5e; + --tag5: #004f2d; + + --h1-color: var(--print-h1-color,#ffccbc); + --h2-color: var(--print-h2-color,#ffccbc); + --h3-color: var(--print-h3-color,#ffccbc); + --h4-color: var(--print-h4-color,#ffccbc); + --h5-color: var(--print-h5-color,#ffccbc); + --h6-color: var(--print-h6-color,#ffccbc); + + --graph-text-color: #efe9d9; + --graph-tag: #f39ba0; + --graph-attach: #ffebec; + --graph-circle: #f39ba0; + --graph-line: #ffc3bc; + --graph-unresolved: #ffccbc; + --graph-arrow: #ffc3bc; + --mermaid-active-task-color: #F39BA4; + --mermaid-seq-dia-color: #ffebec; + --table-background-color: #212121; + --table-background-color-odd: transparent; + --table-border-color: #ffebec; + --table-thead-background-color: #f39ba0ad; + --table-hover-raw-color: #292929; + --table-hover-color: #ffccbc0a; + --table-hover-thead-color: #f39ba0; + --calendar-week-color: #ffccbc; + --calendar-week-hover: #f39ba0; + --calendar-week-background-color: transparent; + --day-planner-pie: #ffccbc; + --day-planner-timeline: #ff9b7c; + --day-planner-line: #f39ba0; + --day-planner-dot: #ffebec; + --day-planner-item-hover: #f39ba0; + --event-item-color9: #ffc3bc; + --event-item-color8: #ffbcbc; + --event-item-color10: #ffccbc; + --event-item-color7: #ffbcc4; + --event-item-color6: #ffbcbc; + --event-item-color5: #ffc3bc; + --event-item-color4: #ffccbc; + --event-item-color3: #ffd4bc; + --event-item-color2: #ffdcbc; + --event-item-color1: #ffe4bc; + + --note-important: #f93759; + --note-cloze: #f93759; + --stickies-color-1: #f39ba0; + --stickies-color-2: #ffebec; + --tape-color: #ffccbc47; + --header-color: #f39ba0; + + --color-view-header-gradient-1: #21212122; + --color-view-header-gradient-2: #21212122; + + --table-color-calendar-2: rgb(215, 86, 125); + --table-color-rgb: 215, 86, 125; + --scrollbar-thumb-bg: #e2bdbd50; + --scrollbar-active-thumb-bg: #e2bdbd; +} + +body.color-scheme-options-flamingo.theme-light #calendar-container { + --color-background-heading: transparent; + --color-background-weeknum: transparent; + --color-background-day: transparent; + --color-background-weekend: transparent; + + --color-tr: #ffdece8c !important; + --color-tr-odd: #ffdece !important; + + --color-dot: var(--text-accent); + --color-arrow: currentColor; + --color-button: var(--text-muted); + --color-text-weeknum: var(--calendar-week-color); + + --color-text-title: var(--text-normal); + --color-text-heading: var(--text-normal); + --color-text-day: var(--text-normal); + --color-text-today: var(--text-accent); + + padding: 0px 5px 0px 8px; + margin: -21px -8px 0px -8px; + line-height: 0.6; +} + +/*表格调整*/ +/*星期*/ +body.color-scheme-options-flamingo.theme-light #calendar-container th { + padding: 6px 0; + border-radius: 0px !important; + background-color: var(--table-thead-background-color) !important; +} + +body.color-scheme-options-flamingo.theme-light #calendar-container .week-num, +body.color-scheme-options-flamingo.theme-light #calendar-container .day { + border-radius: 0px !important; +} + +/*天*/ +body.color-scheme-options-flamingo.theme-light #calendar-container td { + width: 12.5%; + border-right: 0px solid var(--background-secondary-alt); + padding: 0px 0px 0px 0px !important; + line-height: 22px; + border-radius: 0px !important; +} + +body.color-scheme-options-flamingo.theme-light #calendar-container tr { + border: 2px solid var(--background-secondary-alt); +} + +/*“Today”*/ +body.color-scheme-options-flamingo.theme-light #calendar-container .reset-button { + font-size: 14px !important; + margin: 0; + padding: 0; + cursor: pointer; + line-height: 1.2; + text-align: center; +} + +/*悬停Today*/ +body.color-scheme-options-flamingo.theme-light #calendar-container .reset-button:hover { + color: var(--header-color); + background-color: var(--table-hover-raw-color); +} + +/*悬停arrow*/ +body.color-scheme-options-flamingo.theme-light #calendar-container .arrow:hover { + color: var(--theme-color); +} + +body.color-scheme-options-flamingo.theme-light #calendar-container .day:active, +body.color-scheme-options-flamingo.theme-light #calendar-container .active, +body.color-scheme-options-flamingo.theme-light #calendar-container .active.today { + background-color: #f5a7a2 !important; +} + +/*点调整 dot*/ +body.color-scheme-options-flamingo.theme-light #calendar-container .dot-container { + margin-top: -2px; + margin-bottom: -1px; +} + +/*月份调整 month*/ +body.color-scheme-options-flamingo.theme-light #calendar-container .month { + font-size: 20px; + line-height: 1; +} + +/*年份调整 year*/ +body.color-scheme-options-flamingo.theme-light #calendar-container .year { + font-size: 20px; + line-height: 1; +} + +/*星期数 week*/ +body.color-scheme-options-flamingo.theme-light #calendar-container .week-num { + background-color: var(--calendar-week-background-color); + font-weight: 600; +} + +/*星期数悬停 week hover*/ +body.color-scheme-options-flamingo.theme-light #calendar-container .week-num:hover { + background-color: var(--calendar-week-hover) !important; +} + +/*比上面那个还菜鸟的人做的一些修改*/ +body.color-scheme-options-flamingo.theme-light .nav-folder.mod-root>.nav-folder-title { + background-color: var(--background-secondary-alt-bg-4-bt) +} + +body.color-scheme-options-flamingo.theme-light .admonition { + background-color: #ffebec15 !important; +} + +body.color-scheme-options-flamingo.theme-light { + --font-family-vault: Arlrdbd, 'Source Han Sans', 'Noto Sans CJK', 'Source Sans Pro' !important; /*左侧库名字体*/ + --font-family-folder-file-title: Arlrdbd, 'Source Han Sans', 'Noto Sans CJK', 'Source Sans Pro' !important;/*左侧边栏文件、文件夹字体*/ +} + +body.color-scheme-options-flamingo.theme-light .tag[href^="#DailyNote"] { + background-color: var(--tag1); + font-weight: 600; + font-family: var(--font-family-special-tag) !important; +} + +body.color-scheme-options-flamingo.theme-light .tag[href^="#DailyNote"]::after { + content: '❀'; + font-size: var(--font-size-emoji-after-tag); +} + +body.color-scheme-options-flamingo.theme-light .search-result-file-match { + background: transparent; +} + +/*@Lavi & @嘴 的Flamingo主题色(原Pink Topaz)到此结束 */ + +/*=================== Lillian 的配色 ========================*/ +/*蜂蜜牛奶配色 by Lillian */ +body.color-scheme-options-honey-milk-topaz .theme-light, +body.color-scheme-options-honey-milk-topaz.theme-light { + /*色系设置*/ + --color1: #ffde89; + --color2: #ffd876; + --color3: #ffd362; + --color4: #ffcd4e; + --color5: #ffc83b; + --color6: #ffc227; + --color7: #ffbd14; + --color8: #ffb700; + --color9: #ebae14; + --color10: #d8a627; + --color11: #c49d3b; + + --main-color: #f1b024; + --low-color: var(--color3); + --high-color: var(--color8); + --deep-color: var(--color11); + + --bg-color: #f8f8f5; + --bg-color2: #f0ede0; + + --background-primary: var(--background-primary-bg-4-bt,#f8f8f5); + --background-primary-alt: var(--background-primary-alt-bg-4-bt,#f0ede0); + --background-secondary: var(--background-secondary-bg-4-bt,#f8f8f5); + --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#f0ede0); + + --background-modifier-border: #e1dfdf; + + --accent-em: #099d4e; + + --text-selection: #66bbaa59; + --accent-h: 41; + --accent-s: 88%; + --accent-l: 54%; + --interactive-accent-rgb: 215, 178, 88; + + --search-text: #000000; + --folder-title: #000000; + + --strong-em-highlight-color: var(--color11); + + --text-highlight-bg-h: 34; + --text-highlight-bg-s: 100%; + --text-highlight-bg-l: 80%; + --text-highlight-bg-a: 0.847; + --text-highlight-bg: hsla(var(--text-highlight-bg-h), var(--text-highlight-bg-s), var(--text-highlight-bg-l), var(--text-highlight-bg-a)); + --text-search-highlight-bg: var(--color2); + --search-result-file-matched-bg: var(--low-color); + + --background-mobile-drawer-1: var(--bg-color); + --background-mobile-drawer-2: var(--bg-color); + --background-secondary-alt-bg-4-bt-publish: #f6f6f6; + + --search-result-file-title-color: var(--main-color); + + --list-ul-block-color: var(--color6); + --list-ul-disc-color: var(--main-color); + --green-1: #3dc730; + --list-ul-hover: var(--low-color); + --list-ol-block-color: var(--main-color); + --list-ol-number-color: var(--main-color); + --list-ol-hover: var(--low-color); + + --h1-color: var(--print-h1-color,var(--color6)); + --h2-color: var(--print-h2-color,var(--color7)); + --h3-color: var(--print-h3-color,var(--color8)); + --h4-color: var(--print-h4-color,var(--color9)); + --h5-color: var(--print-h5-color,var(--color10)); + --h6-color: var(--print-h6-color,var(--color11)); + + /*graph*/ + --graph-text-color: #696969; + --graph-tag: #77d425cc; + --graph-attach: #afcfe0cc; + --graph-circle: var(--color3); + --graph-line: #b1b1b1; + --graph-unresolved: #db4e4ecc; + --graph-arrow: #e25300; + --graph-control-bg: var(--bg-color); + + /*mermaid*/ + --mermaid-active-task-color: var(--high-color); + --mermaid-seq-dia-color: var(--low-color); + + /*table*/ + --table-background-color: var(--bg-color2); + --table-background-color-odd: #ffffffaf; + --table-border-color: #7d7d7d; + --table-thead-background-color: var(--color1); + --table-hover-raw-color: var(--color2); + --table-hover-color: var(--color1); + --table-hover-thead-color: var(--color2); + + /*calendar*/ + --calendar-week-color: var(--high-color); + --calendar-week-hover: var(--color1); + --calendar-week-background-color: var(--bg-color); + --calendar-today-background-color: var(--color1); + + /*day planner*/ + --day-planner-pie: var(--deep-color); + --day-planner-timeline: #d62f2f; + --day-planner-line: var(--low-color); + --day-planner-dot: var(--low-color); + --day-planner-item-hover: var(--color1); + --event-item-color1: var(--color2); + --event-item-color2: var(--color3); + --event-item-color3: var(--color4); + --event-item-color4: var(--color5); + --event-item-color5: var(--color6); + --event-item-color6: var(--color7); + --event-item-color7: var(--color8); + --event-item-color8: var(--color9); + --event-item-color9: var(--color10); + --event-item-color10: var(--color11); + + /*Sliding panes*/ + --sliding-panes-header-color: var(--deep-color); + --background-4-sliding-pane: var(--bg-color); + + + + /*checklist*/ + --checklist-bg: #dfdfdf8e; + --checklist-bg-hover: #ffffffcc; + + --color-view-header-gradient-1: var(--color1); + --color-view-header-gradient-2: var(--bg-color); + + /*checkbox*/ + --checkbox-color-0: var(--main-color); + --checkbox-color-1: #c4c116; + --checkbox-color-2: #4bbf40; + --checkbox-color-3: #ffe9e9; + --checkbox-color-4: #fffbd4; + --checkbox-color-5: #ad7fbf; + --checkbox-color-6: #5f5f5f; + --text-checked-checkbox: #9b9b9b; + + --table-color-calendar-2: rgb(242, 235, 207); + --table-color-rgb: 242, 235, 207; +} + +body.color-scheme-options-honey-milk-topaz.all-dark-pdf .print.theme-light, +body.color-scheme-options-honey-milk-topaz.theme-dark { + /*蜂蜜牛奶 #f1b024*/ + + --color1: #ffde89; + --color2: #ffd876; + --color3: #ffd362; + --color4: #ffcd4e; + --color5: #ffc83b; + --color6: #ffc227; + --color7: #ffbd14; + --color8: #ffb700; + --color9: #ebae14; + --color10: #d8a627; + --color11: #a17f28; + + --main-color: #f1b024; + --low-color: var(--color3); + --high-color: var(--color8); + --deep-color: var(--color11); + + --bg-color: #222222; + --bg-color2: #333333; + + --background-primary: var(--background-primary-bg-4-bt,#222222); + --background-primary-alt: var(--background-primary-alt-bg-4-bt,#222222); + --background-secondary: var(--background-secondary-bg-4-bt,#333333); + --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#222222); + + --background-modifier-border: #565656; + + --text-selection: #47a5914d;/*鼠标选择 文字背景颜色*/ + --accent-h: 43; + --accent-s: 69%; + --accent-l: 50%; + --interactive-accent-rgb: 216, 166, 39;/*主题强调色 rgb , 需与主题色一致(把上面的值转成rgb放下面)*/ + + --panel-border-color: #18191e;/*侧边栏、下部状态栏线条颜色,改了没有,线条被我取消了 :p*/ + --search-text: var(--color1);/*搜索结果文字颜色*/ + --folder-title: #ffffff;/*文件栏文件夹文字颜色*/ + + --strong-em-highlight-color: var(--color11); + --text-search-highlight-bg: #bb4361; + + --strong-em-color-1: #43d3ff;/*加粗斜体渐变色1*/ + --strong-em-color-2: #baaaff;/*加粗斜体渐变色2*/ + --search-result-file-matched-bg: var(--color9);/* 搜索结果文字高亮颜色 */ + + --background-mobile-drawer-1: var(--bg-color); + --background-mobile-drawer-2: var(--bg-color); + + --background-transparent-blue: #003e759a; + + --scrollbar-thumb-bg: #8282827e; + --scrollbar-active-thumb-bg: #828282; + + --search-result-file-title-color: var(--main-color); + + --background-blockquote: #9191911c;/*引用框背景颜色*/ + --background-code: #1111118c;/*代码框背景颜色*/ + --background-code-2: #4c4c4cb0; + --text-color-code: #d58000;/*代码框文字颜色*/ + + --list-ul-block-color: var(--deep-color); + --list-ul-disc-color: var(--main-color); + --green-1: #3dc730; + --list-ul-hover: var(--low-color); + --list-ol-block-color: var(--deep-color); + --list-ol-number-color: var(--main-color); + --list-ol-hover: var(--low-color); + + --h1-color: var(--print-h1-color,var(--color6)); + --h2-color: var(--print-h2-color,var(--color7)); + --h3-color: var(--print-h3-color,var(--color8)); + --h4-color: var(--print-h4-color,var(--color9)); + --h5-color: var(--print-h5-color,var(--color10)); + --h6-color: var(--print-h6-color,var(--color11)); + + /*graph*/ + --graph-text-color: #B5B5B5;/*图谱文字颜色*/ + --graph-tag: #88d842bb;/*图谱线颜色*/ + --graph-attach: #b2cfe0bb;/*图谱附件颜色*/ + --graph-circle: var(--color8);/*图谱普通点颜色*/ + --graph-line: #8c8c8c;/*图谱线颜色*/ + --graph-unresolved: #f08080de;/*图谱未创建点颜色,兼未创建双链颜色*/ + --graph-arrow: #c23917;/*图谱箭头颜色*/ + --graph-control-bg: #00000080;/*图谱控制窗背景颜色*/ + + /*mermaid*/ + --mermaid-active-task-color: var(--low-color); + --mermaid-seq-dia-color: var(--high-color); + + --table-background-color: var(--bg-color2); + --table-background-color-odd: var(--bg-color); + --table-border-color: #878787; + --table-thead-background-color: var(--color11); + --table-hover-raw-color: var(--color10); + --table-hover-color: var(--color11);; + --table-hover-thead-color: var(--color10); + + /*calendar*/ + --calendar-week-color: var(--high-color); + --calendar-week-hover: var(--color1); + --calendar-week-background-color: var(--bg-color); + --calendar-today-background-color: var(--color1); + + /*day planner*/ + --day-planner-pie: var(--color1); + --day-planner-timeline: #000000; + --day-planner-line: var(--low-color); + --day-planner-dot: var(--low-color); + --day-planner-item-hover: var(--main-color); + --event-item-color1: var(--color2); + --event-item-color2: var(--color3); + --event-item-color3: var(--color4); + --event-item-color4: var(--color5); + --event-item-color5: var(--color6); + --event-item-color6: var(--color7); + --event-item-color7: var(--color8); + --event-item-color8: var(--color9); + --event-item-color9: var(--color10); + --event-item-color10: var(--color11); + + /*Sliding panes*/ + --sliding-panes-header-color: var(--color1); + + --color-view-header-gradient-1: var(--bg-color2); + --color-view-header-gradient-2: var(--bg-color); + + /*checkbox*/ + --checkbox-color-0: var(--main-color); + + --table-color-calendar-2: rgb(120, 104, 38); + --table-color-rgb: 120, 104, 38; +} + +body.color-scheme-options-honey-milk-topaz #calendar-container { + --color-background-heading: transparent; + --color-background-weeknum: transparent; + --color-background-day: transparent; + --color-background-weekend: transparent; + + --color-tr: var(--bg-color) !important; + --color-tr-odd: #ffdece !important; + + --color-dot: var(--text-accent); + --color-arrow: currentColor; + --color-button: var(--text-muted); + --color-text-weeknum: var(--calendar-week-color); + + --color-text-title: var(--text-normal); + --color-text-heading: var(--text-normal); + --color-text-day: var(--text-normal); + --color-text-today: var(--text-accent); + + padding: 0px 5px 0px 8px; + margin: -21px -8px 0px -8px; + line-height: 0.6; +} + +/*巧克力色 by Lillian */ +body.color-scheme-options-chocolate-topaz .theme-light, +body.color-scheme-options-chocolate-topaz.theme-light { + --color1: #f8d3a0; + --color2: #d8a86a; + --color3: #c2907a; + --color4: #af7d6b; + --color5: #af694f; + --color6: #74412d; + --color7: #683725; + --color8: #502819; + --color9: #552917; + --color10: #572917; + --color11: #4b1e0e; + + --main-color: var(--color6); + --low-color: var(--color3); + --high-color: var(--color8); + --deep-color: var(--color11); + + --bg-color: #faf4eb; + --bg-color2: #f7e6ce; + + --background-primary: var(--background-primary-bg-4-bt,#faf4eb); + --background-primary-alt: var(--background-primary-alt-bg-4-bt,#faf4eb); + --background-secondary: var(--background-secondary-bg-4-bt,#faf4eb); + --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#f7e6ce); + + --background-modifier-border: #e1dfdf; + + --accent-em: #099d4e; + --text-selection: #66bbaa59; + + --accent-h: 17; + --accent-s: 44%; + --accent-l: 32%; + --interactive-accent-rgb: 116, 65, 45; + + --strong-em-highlight-color: var(--color11); + + --text-search-highlight-bg: #ffd1dd; + --search-result-file-matched-bg: var(--low-color); + + --background-mobile-drawer-1: var(--bg-color); + --background-mobile-drawer-2: var(--bg-color); + --background-secondary-alt-bg-4-bt-publish: #f6f6f6; + + --search-result-file-title-color: var(--main-color); + --background-blockquote: #b6b6b62c; + --background-code: #ebebeb71; + --background-code-2: #cccccc62; + --text-color-code: #e95d00; + + --list-ul-block-color: var(--color5); + --list-ul-disc-color: var(--main-color); + --green-1: #3dc730; + --list-ul-hover: var(--low-color); + --list-ol-block-color: var(--main-color); + --list-ol-number-color: var(--main-color); + --list-ol-hover: var(--low-color); + + --tag-text: #f8f8f8; + --stag1: #fa8787; + --stag1-bg: #eb2727; + --stag2: #fdbd5c; + --stag2-bg: #ee9002; + --stag3: #50ce3a; + --stag3-bg: #22ac09; + --tag1: var(--color3); + --tag2: var(--color4); + --tag3: var(--color5); + --tag4: var(--color6); + --tag5: var(--color7); + + --tag-dailynote: var(--low-color); + --tag-dailynote-bg: var(--color3); + --tag-weeklynote: var(--color6); + --tag-weeklynote-bg: var(--color4); + --tag-questions: var(--color5); + --tag-questions-bg: var(--color5); + --tag-ideas: #ceb900; + --tag-ideas-bg: #444444d8; + + --h1-color: var(--print-h1-color,var(--color7)); + --h2-color: var(--print-h2-color,var(--color6)); + --h3-color: var(--print-h3-color,var(--color5)); + --h4-color: var(--print-h4-color,var(--color4)); + --h5-color: var(--print-h5-color,var(--color3)); + --h6-color: var(--print-h6-color,var(--color2)); + + /*graph*/ + --graph-text-color: #696969; + --graph-tag: #77d425cc; + --graph-attach: #afcfe0cc; + --graph-circle: var(--color3); + --graph-line: #b1b1b1; + --graph-unresolved: #db4e4ecc; + --graph-arrow: #e25300; + --graph-control-bg: var(--bg-color); + + /*mermaid*/ + --mermaid-active-task-color: var(--high-color); + --mermaid-seq-dia-color: var(--low-color); + + /*table*/ + --table-background-color: var(--bg-color2); + --table-background-color-odd: var(--bg-color); + --table-border-color: #7d7d7d; + --table-thead-background-color: var(--color1); + --table-hover-raw-color: var(--color2); + --table-hover-color: var(--color1); + --table-hover-thead-color: var(--color2); + + /*calendar*/ + --calendar-week-color: var(--high-color); + --calendar-week-hover: var(--color1); + --calendar-week-background-color: var(--bg-color); + --calendar-today-background-color: var(--color1); + + /*day planner*/ + --day-planner-pie: var(--deep-color); + --day-planner-timeline: #d62f2f; + --day-planner-line: var(--low-color); + --day-planner-dot: var(--low-color); + --day-planner-item-hover: var(--color1); + --event-item-color1: var(--color2); + --event-item-color2: var(--color3); + --event-item-color3: var(--color4); + --event-item-color4: var(--color5); + --event-item-color5: var(--color6); + --event-item-color6: var(--color7); + --event-item-color7: var(--color8); + --event-item-color8: var(--color9); + --event-item-color9: var(--color10); + --event-item-color10: var(--color11); + + /*Sliding panes*/ + --sliding-panes-header-color: var(--deep-color); + --background-4-sliding-pane: var(--bg-color); + + --color-view-header-gradient-1: var(--color1); + --color-view-header-gradient-2: var(--bg-color); + + /*checkbox*/ + --checkbox-color-0: var(--main-color); + + --table-color-calendar-2: rgb(76, 52, 16); + --table-color-rgb: 76, 52, 16; +} + +body.color-scheme-options-chocolate-topaz.all-dark-pdf .print.theme-light, +body.color-scheme-options-chocolate-topaz.theme-dark { + /* 焦茶色 焦茶#6f4b3e */ + --color1: #f8d3a0; + --color2: #d8a86a; + --color3: #c2907a; + --color4: #af7d6b; + --color5: #af694f; + --color6: #74412d; + --color7: #683725; + --color8: #502819; + --color9: #552917; + --color10: #572917; + --color11: #4b1e0e; + + --main-color: var(--color6); + --low-color: var(--color3); + --high-color: var(--color7); + --deep-color: var(--color11); + + /*黑暗颜色的背景不建议修改*/ + --bg-color: #222222; + --bg-color2: #222222; + + --background-primary: var(--background-primary-bg-4-bt,#222222); + --background-primary-alt: var(--background-primary-alt-bg-4-bt,#222222); + --background-secondary: var(--background-secondary-bg-4-bt,#222222); + --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#222222); + + --background-modifier-border: #565656;/*一些线条颜色*/ + + --text-muted: #8a8a8a;/*muted 文字颜色*/ + --text-faint: #797979;/*faint 文字颜色*/ + --text-folder-file: #b3b3b3;/*文件夹、文件 文字颜色*/ + + --accent-em: #a4ca8e;/*斜体 文字颜色*/ + + --text-selection: #47a5914d;/*鼠标选择 文字背景颜色*/ + --accent-h: 17; + --accent-s: 44%; + --accent-l: 32%; + --interactive-accent: var(--main-color); /*主题强调色*/ + --interactive-accent-rgb: 116, 65, 45;/*主题强调色 rgb , 需与主题色一致(把上面的值转成rgb放下面)*/ + + --panel-border-color: #18191e;/*侧边栏、下部状态栏线条颜色,改了没有,线条被我取消了 :p*/ + --search-text: #e0e0e0;/*搜索结果文字颜色*/ + --folder-title: #ffffff;/*文件栏文件夹文字颜色*/ + + --strong-em-highlight-color: var(--color11); + --text-search-highlight-bg: #bb4361; + --strong-em-color-1: #43d3ff;/*加粗斜体渐变色1*/ + --strong-em-color-2: #baaaff;/*加粗斜体渐变色2*/ + --search-result-file-matched-bg: var(--color9);/* 搜索结果文字高亮颜色 */ + + --background-mobile-drawer-1: var(--bg-color); + --background-mobile-drawer-2: var(--bg-color); + + --background-transparent-blue: #003e759a;/*用在kanban里的,可以不调*/ + --scrollbar-thumb-bg: #8282827e; + --scrollbar-active-thumb-bg: #828282; + + --search-result-file-title-color: var(--main-color); + + --background-blockquote: #9191911c;/*引用框背景颜色*/ + --background-code: #1111118c;/*代码框背景颜色*/ + --background-code-2: #4c4c4cb0; + --text-color-code: #d58000;/*代码框文字颜色*/ + + --list-ul-block-color: var(--color6); + --list-ul-disc-color: var(--main-color); + --green-1: #3dc730; + --list-ul-hover: var(--low-color); + --list-ol-block-color: var(--main-color); + --list-ol-number-color: var(--main-color); + --list-ol-hover: var(--low-color); + + --tag-text: #e4e4e4; + --stag1: #f08383; + --stag1-bg: #bd1919; + --stag2: #e7b263; + --stag2-bg: #ac6700; + --stag3: #77df89; + --stag3-bg: #058c1c; + + --tag1: var(--color11); + --tag2: var(--color10); + --tag3: var(--color9); + --tag4: var(--color8); + --tag5: var(--color7); + + --tag-dailynote: var(--mian-color); + --tag-dailynote-bg: var(--color5); + --tag-weeklynote: var(--color3); + --tag-weeklynote-bg: var(--color6); + --tag-questions: var(--color8); + --tag-questions-bg: var(--color8); + --tag-ideas: #fcfcc0; + --tag-ideas-bg: #565656d8; + + --h1-color: var(--print-h1-color,var(--color2)); + --h2-color: var(--print-h2-color,var(--color3)); + --h3-color: var(--print-h3-color,var(--color4)); + --h4-color: var(--print-h4-color,var(--color5)); + --h5-color: var(--print-h5-color,var(--color6)); + --h6-color: var(--print-h6-color,var(--color7)); + + /*graph*/ + --graph-text-color: #B5B5B5; + --graph-tag: #88d842bb; + --graph-attach: #b2cfe0bb; + --graph-circle: var(--color8); + --graph-line: #8c8c8c; + --graph-unresolved: #f08080de; + --graph-arrow: #c23917; + --graph-control-bg: #00000080; + + /*mermaid*/ + --mermaid-active-task-color: var(--low-color); + --mermaid-seq-dia-color: var(--high-color); + + /*table*/ + --table-background-color: var(--bg-color2); + --table-background-color-odd: var(--bg-color); + --table-border-color: #878787; + --table-thead-background-color: var(--color11); + --table-hover-raw-color: var(--color10); + --table-hover-color: var(--color11);; + --table-hover-thead-color: var(--color10); + + /*calendar*/ + --calendar-week-color: var(--high-color); + --calendar-week-hover: var(--color1); + --calendar-week-background-color: var(--bg-color); + --calendar-today-background-color: var(--color1); + + /*day planner*/ + --day-planner-pie: var(--color1); + --day-planner-timeline: #000000; + --day-planner-line: var(--low-color); + --day-planner-dot: var(--low-color); + --day-planner-item-hover: var(--main-color); + --event-item-color1: var(--color2); + --event-item-color2: var(--color3); + --event-item-color3: var(--color4); + --event-item-color4: var(--color5); + --event-item-color5: var(--color6); + --event-item-color6: var(--color7); + --event-item-color7: var(--color8); + --event-item-color8: var(--color9); + --event-item-color9: var(--color10); + --event-item-color10: var(--color11); + + /*Sliding panes*/ + --sliding-panes-header-color: var(--color1); + --background-4-sliding-panel: #252525ed;/* sliding panes 背景颜色 */ + + --color-view-header-gradient-1: var(--bg-color2); + --color-view-header-gradient-2: var(--bg-color); + + /*checkbox*/ + --checkbox-color-0: var(--main-color); + + --table-color-calendar-2: rgb(70, 45, 6); + --table-color-rgb: 70, 45, 6; +} + +body.color-scheme-options-chocolate-topaz #calendar-container { + --color-background-heading: transparent; + --color-background-weeknum: transparent; + --color-background-day: transparent; + --color-background-weekend: transparent; + + --color-tr: var(--bg-color) !important; + --color-tr-odd: #ffdece !important; + + --color-dot: var(--text-accent); + --color-arrow: currentColor; + --color-button: var(--text-muted); + --color-text-weeknum: var(--calendar-week-color); + + --color-text-title: var(--text-normal); + --color-text-heading: var(--text-normal); + --color-text-day: var(--text-normal); + --color-text-today: var(--text-accent); + + /*===*/ + padding: 0px 5px 0px 8px; + margin: -21px -8px 0px -8px; + line-height: 0.6; +} + +body.color-scheme-options-autumn-topaz .theme-light, +body.color-scheme-options-autumn-topaz.theme-light { + /*色系设置*/ + --color1: #ebe1cc; + --color2: #e4ca8f; + --color3: #e6bf66 ; + --color4: #fab102; + --color5: #b6af00; + --color6: #70a600; + --color7: #00992c; + --color8: #00884a; + --color9: #007562; + --color10: #006674; + --color11: #2f4858; + + /*Lillian: 第三步:把上面的色系,粘贴到dark模式下*/ + --main-color: var(--color6); + --low-color: var(--color4); + --high-color: var(--color7); + --deep-color:var(--color11); + + --bg-color:#fafaf3; + --bg-color2:#bbddcd; + + --background-primary: var(--background-primary-bg-4-bt,#fafaf3); + --background-primary-alt: var(--background-primary-alt-bg-4-bt,#fafaf3); + --background-secondary: var(--background-secondary-bg-4-bt,#fafaf3); + --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#bbddcd); + --accent-h: 80; + --accent-s: 100%; + --accent-l: 33%; + --interactive-accent-rgb: 112, 166, 0; + + --strong-em-highlight-color: var(--color11); + --text-search-highlight-bg: #ffd1dd; + --search-result-file-matched-bg: var(--low-color); + + --background-mobile-drawer-1: var(--bg-color); + --background-mobile-drawer-2: var(--bg-color); + + --search-result-file-title-color: var(--main-color); + + --list-ul-block-color: var(--color5); + --list-ul-disc-color: var(--main-color); + --green-1: #3dc730; + --list-ul-hover: var(--low-color); + --list-ol-block-color: var(--main-color); + --list-ol-number-color: var(--main-color); + --list-ol-hover: var(--low-color); + + --tag1: var(--color3); + --tag2: var(--color4); + --tag3: var(--color5); + --tag4: var(--color6); + --tag5: var(--color7); + + --tag-dailynote: var(--low-color); + --tag-dailynote-bg: var(--color3); + --tag-weeklynote: var(--color6); + --tag-weeklynote-bg: var(--color4); + --tag-questions: var(--color5); + --tag-questions-bg: var(--color5); + + --h1-color: var(--print-h1-color,var(--color9)); + --h2-color: var(--print-h2-color,var(--color8)); + --h3-color: var(--print-h3-color,var(--color7)); + --h4-color: var(--print-h4-color,var(--color6)); + --h5-color: var(--print-h5-color,var(--color5)); + --h6-color: var(--print-h6-color,var(--color4)); + + /*graph*/ + --graph-circle: var(--color3); + --graph-control-bg: var(--bg-color); + + /*mermaid*/ + --mermaid-active-task-color: var(--high-color); + --mermaid-seq-dia-color: var(--low-color); + + /*table*/ + --table-background-color: var(--bg-color2); + --table-background-color-odd: var(--bg-color); + --table-border-color: #7d7d7d; + --table-thead-background-color: var(--color1); + --table-hover-raw-color: var(--color2); + --table-hover-color: var(--color1); + --table-hover-thead-color: var(--color2); + + /*calendar*/ + --calendar-week-color: var(--high-color); + --calendar-week-hover: var(--color1); + --calendar-week-background-color: var(--bg-color); + --calendar-today-background-color: var(--color1); + + /*day planner*/ + --day-planner-pie: var(--deep-color); + --day-planner-timeline: #d62f2f; + --day-planner-line: var(--low-color); + --day-planner-dot: var(--low-color); + --day-planner-item-hover: var(--color1); + --event-item-color1: var(--color2); + --event-item-color2: var(--color3); + --event-item-color3: var(--color4); + --event-item-color4: var(--color5); + --event-item-color5: var(--color6); + --event-item-color6: var(--color7); + --event-item-color7: var(--color8); + --event-item-color8: var(--color9); + --event-item-color9: var(--color10); + --event-item-color10:var(--color11); + + /*Sliding panes*/ + --sliding-panes-header-color: var(--deep-color); + --background-4-sliding-pane: var(--bg-color); + + --color-view-header-gradient-1: #70a60085; + --color-view-header-gradient-2: var(--bg-color); + + /*checkbox*/ + --checkbox-color-0: var(--main-color); + + --table-color-calendar-2: rgb(222, 236, 182); + --table-color-rgb: 222, 236, 182; +} + +body.color-scheme-options-autumn-topaz.all-dark-pdf .print.theme-light, +body.color-scheme-options-autumn-topaz.theme-dark { + /* 黄绿*/ + --color1: #ebe1cc; + --color2: #e4ca8f; + --color3: #e6bf66 ; + --color4: #fab102; + --color5: #b6af00; + --color6: #70a600; + --color7: #00992c; + --color8: #00884a; + --color9: #007562; + --color10: #006674; + --color11: #2f4858; + + --main-color: var(--color6); + --low-color: var(--color3); + --high-color: var(--color7); + --deep-color:var(--color11); + + --bg-color:#222222; + --bg-color2:#444444; + + --background-primary: var(--background-primary-bg-4-bt,#222222); + --background-primary-alt: var(--background-primary-alt-bg-4-bt,#222222); + --background-secondary: var(--background-secondary-bg-4-bt,#222222); + --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#444444); + + --text-muted: #8a8a8a; /*muted 文字颜色*/ + --text-faint: #797979; /*faint 文字颜色*/ + --text-folder-file: #b3b3b3; /*文件夹、文件 文字颜色*/ + --accent-strong: #f7f7f7; /*加粗 文字颜色*/ + --accent-em: #a4ca8e; /*斜体 文字颜色*/ + + --text-selection: #47a5914d; /*鼠标选择 文字背景颜色*/ + + --interactive-accent: var(--main-color); /*主题强调色*/ + --interactive-accent-rgb: 104, 56, 39; /*主题强调色 rgb , 需与主题色一致(把上面的值转成rgb放下面)*/ + + --strong-em-highlight-color: var(--color11); + + --search-result-file-matched-bg: var(--color9); /* 搜索结果文字高亮颜色 */ + + --background-mobile-drawer-1: var(--bg-color); + --background-mobile-drawer-2: var(--bg-color); + + --search-result-file-title-color: var(--main-color); + + --list-ul-block-color: var(--color6); + --list-ul-disc-color: var(--main-color); + --green-1: #3dc730; + --list-ul-hover: var(--low-color); + --list-ol-block-color: var(--main-color); + --list-ol-number-color: var(--main-color); + --list-ol-hover: var(--low-color); + + --tag1: var(--color11); + --tag2: var(--color10); + --tag3: var(--color9); + --tag4: var(--color8); + --tag5: var(--color7); + --tag-dailynote: var(--mian-color); + --tag-dailynote-bg: var(--color5); + --tag-weeklynote: var(--color3); + --tag-weeklynote-bg: var(--color6); + --tag-questions: var(--color8); + --tag-questions-bg: var(--color8); + --tag-ideas: #fcfcc0; + --tag-ideas-bg: #565656d8; + + --h1-color: var(--print-h1-color,var(--color4)); + --h2-color: var(--print-h2-color,var(--color5)); + --h3-color: var(--print-h3-color,var(--color6)); + --h4-color: var(--print-h4-color,var(--color7)); + --h5-color: var(--print-h5-color,var(--color8)); + --h6-color: var(--print-h6-color,var(--color9)); + + --graph-text-color: #B5B5B5; /*图谱文字颜色*/ + --graph-tag: #88d842bb; /*图谱线颜色*/ + --graph-attach: #b2cfe0bb; /*图谱附件颜色*/ + --graph-circle: var(--color8); /*图谱普通点颜色*/ + --graph-line: #8c8c8c; /*图谱线颜色*/ + --graph-unresolved: #f08080de; /*图谱未创建点颜色,兼未创建双链颜色*/ + --graph-arrow: #c23917; /*图谱箭头颜色*/ + --graph-control-bg: #00000080; /*图谱控制窗背景颜色*/ + + /*mermaid*/ + --mermaid-active-task-color: var(--low-color); + --mermaid-seq-dia-color: var(--high-color); + + /*table*/ + --table-background-color: var(--bg-color2); + --table-background-color-odd: var(--bg-color); + --table-border-color: #878787; + --table-thead-background-color: var(--color11); + --table-hover-raw-color: var(--color10); + --table-hover-color: var(--color11);; + --table-hover-thead-color: var(--color10); + + /*calendar*/ + --calendar-week-color: var(--high-color); + --calendar-week-hover: var(--color1); + --calendar-week-background-color: var(--bg-color); + --calendar-today-background-color: var(--color1); + + /*day planner*/ + --day-planner-pie: var(--color1); + --day-planner-timeline: #000000; + --day-planner-line: var(--low-color); + --day-planner-dot: var(--low-color); + --day-planner-item-hover: var(--main-color); + --event-item-color1: var(--color2); + --event-item-color2: var(--color3); + --event-item-color3: var(--color4); + --event-item-color4: var(--color5); + --event-item-color5: var(--color6); + --event-item-color6: var(--color7); + --event-item-color7: var(--color8); + --event-item-color8: var(--color9); + --event-item-color9: var(--color10); + --event-item-color10:var(--color11); + + /*Sliding panes*/ + --sliding-panes-header-color: var(--color1); + + --checklist-bg-hover: #08080896; + + --color-view-header-gradient-1: var(--bg-color2); + --color-view-header-gradient-2: var(--bg-color); + + /*checkbox*/ + --checkbox-color-0: var(--main-color); + + --table-color-calendar-2: rgb(81, 165, 39); + --table-color-rgb: 81, 165, 39; +} + +body.color-scheme-options-autumn-topaz #calendar-container { + --color-background-heading: transparent; + --color-background-weeknum: transparent; + --color-background-day: transparent; + --color-background-weekend: transparent; + + --color-tr: var(--bg-color) !important; + --color-tr-odd: #ffdece !important; + + --color-dot: var(--text-accent); + --color-arrow: currentColor; + --color-button: var(--text-muted); + --color-text-weeknum: var(--calendar-week-color); + + --color-text-title: var(--text-normal); + --color-text-heading: var(--text-normal); + --color-text-day: var(--text-normal); + --color-text-today: var(--text-accent); + + padding: 0px 5px 0px 8px; + margin: -21px -8px 0px -8px; + line-height: 0.6; +} + +body.color-scheme-options-lillimon-topaz .theme-light, +body.color-scheme-options-lillimon-topaz.theme-light { + /*魔方浅色*/ + /*色系设置*/ + --magic-low-color: #e0e79a; + --magic-main-color: var(--theme-color); + --magic-deep-color: #746909; + --accent-h: 66; + --accent-s: 96%; + --accent-l: 33%; + --bg-color: #f8f8f5; + --bg-color2: #e7e7e4; + + /*色系共 5 个值,3个主题色+2个背景色*/ + --color1: var(--magic-low-color); + --color2: var(--magic-low-color); + --color3: var(--magic-low-color); + --color4: var(--magic-low-color); + --color5: var(--magic-main-color); + --color6: var(--magic-main-color); + --color7: var(--magic-main-color); + --color8: var(--magic-main-color); + --color9: var(--magic-deep-color); + --color10: var(--magic-deep-color); + --color11: var(--magic-deep-color); + + --high-color: var(--color8); + + /*色系设置结束*/ + --background-primary: var(--background-primary-bg-4-bt,#f8f8f5); + --background-primary-alt: var(--background-primary-alt-bg-4-bt,#f8f8f5); + --background-secondary: var(--background-secondary-bg-4-bt,#f8f8f5); + --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#e7e7e4); + + --text-normal:var(--magic-main-color); + --interactive-accent-rgb: 215, 178, 88; + + --strong-em-highlight-color: var(--color11); + + --search-result-file-matched-bg: var(--magic-low-color); + + --background-mobile-drawer-1: var(--bg-color); + --background-mobile-drawer-2: var(--bg-color); + + --search-result-file-title-color: var(--magic-main-color); + + --list-ul-block-color: var(--color5); + --list-ul-disc-color: var(--magic-main-color); + --green-1: #3dc730; + --list-ul-hover: var(--magic-low-color); + --list-ol-block-color: var(--magic-main-color); + --list-ol-number-color: var(--magic-main-color); + --list-ol-hover: var(--magic-low-color); + + --tag-dailynote: var(--magic-low-color); + --tag-dailynote-bg: var(--color10); + --tag-weeklynote: var(--color6); + --tag-weeklynote-bg: var(--color10); + --tag-questions: var(--color5); + --tag-questions-bg: var(--color5); + --tag-ideas: #ceb900; + --tag-ideas-bg: #444444d8; + + --tag1: var(--color3); + --tag2: var(--color4); + --tag3: var(--color5); + --tag4: var(--color6); + --tag5: var(--color7); + + --h1-color: var(--print-h1-color,var(--color9)); + --h2-color: var(--print-h2-color,var(--color8)); + --h3-color: var(--print-h3-color,var(--color7)); + --h4-color: var(--print-h4-color,var(--color6)); + --h5-color: var(--print-h5-color,var(--color5)); + --h6-color: var(--print-h6-color,var(--color4)); + + /*graph*/ + --graph-circle: var(--color3); + --graph-control-bg: var(--bg-color); + + /*mermaid*/ + --mermaid-active-task-color: var(--high-color); + --mermaid-seq-dia-color: var(--magic-low-color); + + /*table*/ + --table-background-color: var(--bg-color2); + --table-background-color-odd: var(--bg-color); + --table-border-color: #7d7d7d; + --table-thead-background-color: var(--color1); + --table-hover-raw-color: var(--color2); + --table-hover-color: var(--color1); + --table-hover-thead-color: var(--color2); + + /*calendar*/ + --calendar-week-color: var(--high-color); + --calendar-week-hover: var(--color1); + --calendar-week-background-color: var(--bg-color); + --calendar-today-background-color: var(--color1); + + /*day planner*/ + --day-planner-pie: var(--magic-deep-color); + --day-planner-timeline: #d62f2f; + --day-planner-line: var(--magic-low-color); + --day-planner-dot: var(--magic-low-color); + --day-planner-item-hover: var(--color1); + --event-item-color1: var(--color2); + --event-item-color2: var(--color3); + --event-item-color3: var(--color4); + --event-item-color4: var(--color5); + --event-item-color5: var(--color6); + --event-item-color6: var(--color7); + --event-item-color7: var(--color8); + --event-item-color8: var(--color9); + --event-item-color9: var(--color10); + --event-item-color10: var(--color11); + + /*Sliding panes*/ + --sliding-panes-header-color: var(--magic-deep-color); + --background-4-sliding-pane: var(--bg-color); + + --color-view-header-gradient-1: var(--color1); + --color-view-header-gradient-2: var(--bg-color); + + /*checkbox*/ + --checkbox-color-0: var(--magic-main-color); +} + +body.color-scheme-options-lillimon-topaz.all-dark-pdf .print.theme-light, +body.color-scheme-options-lillimon-topaz.theme-dark { + /*魔方深色*/ + /*魔方*/ + --magic-low-color: #e0e79a; + --magic-main-color: #95a503; + --magic-deep-color: #746909; + --accent-h: 66; + --accent-s: 96%; + --accent-l: 33%; + --bg-color: #222222; + --bg-color2: #333333; + + --color1: var(--magic-low-color); + --color2: var(--magic-low-color); + --color3: var(--magic-low-color); + --color4: var(--magic-low-color); + --color5: var(--magic-main-color); + --color6: var(--magic-main-color); + --color7: var(--magic-main-color); + --color8: var(--magic-main-color); + --color9: var(--magic-deep-color); + --color10: var(--magic-deep-color); + --color11: var(--magic-deep-color); + --high-color: var(--color8); + /*主题色设置结束**/ + + --background-primary: var(--background-primary-bg-4-bt,#222222); + --background-primary-alt: var(--background-primary-alt-bg-4-bt,#222222); + --background-secondary: var(--background-secondary-bg-4-bt,#222222); + --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#333333); + + --interactive-accent-rgb: 58, 91, 82; + + --strong-em-highlight-color: var(--color11); + + --search-result-file-matched-bg: var(--high-color); + /* 搜索结果文字高亮颜色 */ + + --background-mobile-drawer-1: var(--bg-color); + --background-mobile-drawer-2: var(--bg-color); + + --search-result-file-title-color: var(--magic-main-color); + + --list-ul-block-color: var(--color6); + --list-ul-disc-color: var(--magic-main-color); + --green-1: #3dc730; + --list-ul-hover: var(--magic-low-color); + --list-ol-block-color: var(--magic-main-color); + --list-ol-number-color: var(--magic-main-color); + --list-ol-hover: var(--magic-low-color); + + --tag1: var(--color11); + --tag2: var(--color10); + --tag3: var(--color9); + --tag4: var(--color8); + --tag5: var(--color7); + + --tag-dailynote: var(--mian-color); + --tag-dailynote-bg: var(--color5); + --tag-weeklynote: var(--color3); + --tag-weeklynote-bg: var(--color6); + --tag-questions: var(--color8); + --tag-questions-bg: var(--color8); + --tag-ideas: #fcfcc0; + --tag-ideas-bg: #565656d8; + + --h1-color: var(--print-h1-color,var(--color4)); + --h2-color: var(--print-h2-color,var(--color5)); + --h3-color: var(--print-h3-color,var(--color6)); + --h4-color: var(--print-h4-color,var(--color7)); + --h5-color: var(--print-h5-color,var(--color8)); + --h6-color: var(--print-h6-color,var(--color9)); + + --graph-circle: var(--color8); + /*图谱普通点颜色*/ + + /*mermaid*/ + --mermaid-active-task-color: var(--magic-low-color); + --mermaid-seq-dia-color: var(--high-color); + + /*table*/ + --table-background-color: var(--bg-color2); + --table-background-color-odd: var(--bg-color); + --table-border-color: #878787; + --table-thead-background-color: var(--color11); + --table-hover-raw-color: var(--color10); + --table-hover-color: var(--color11); + --table-hover-thead-color: var(--color10); + + /*calendar*/ + --calendar-week-color: var(--high-color); + --calendar-week-hover: var(--color1); + --calendar-week-background-color: var(--bg-color); + --calendar-today-background-color: var(--color1); + + /*day planner*/ + --day-planner-pie: var(--color1); + --day-planner-timeline: #000000; + --day-planner-line: var(--magic-low-color); + --day-planner-dot: var(--magic-low-color); + --day-planner-item-hover: var(--magic-main-color); + --event-item-color1: var(--color2); + --event-item-color2: var(--color3); + --event-item-color3: var(--color4); + --event-item-color4: var(--color5); + --event-item-color5: var(--color6); + --event-item-color6: var(--color7); + --event-item-color7: var(--color8); + --event-item-color8: var(--color9); + --event-item-color9: var(--color10); + --event-item-color10: var(--color11); + + /*Sliding panes*/ + --sliding-panes-header-color: var(--color1); + + --color-view-header-gradient-1: var(--bg-color2); + --color-view-header-gradient-2: var(--bg-color); + + /*checkbox*/ + --checkbox-color-0: var(--magic-main-color); +} + +body.color-scheme-options-lillimon-topaz #calendar-container { + --color-background-heading: transparent; + --color-background-weeknum: transparent; + --color-background-day: transparent; + --color-background-weekend: transparent; + + --color-tr: var(--bg-color) !important; + --color-tr-odd: #ffdece !important; + + --color-dot: var(--text-accent); + --color-arrow: currentColor; + --color-button: var(--text-muted); + --color-text-weeknum: var(--calendar-week-color); + + --color-text-title: var(--text-normal); + --color-text-heading: var(--text-normal); + --color-text-day: var(--text-normal); + --color-text-today: var(--text-accent); + + padding: 0px 5px 0px 8px; + margin: -21px -8px 0px -8px; + line-height: 0.6; +} +/*=================== Lillian 的配色 end ========================*/ + +/*========== awyugan 的 配色 =========*/ +body.color-scheme-options-lilac .theme-light, +body.color-scheme-options-lilac.theme-light { + --background-primary: var(--background-primary-bg-4-bt,#d7c4f2); + --background-primary-alt: var(--background-primary-alt-bg-4-bt,#e8dffa); + --background-secondary: var(--background-secondary-bg-4-bt,#e1cefa); + --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#d7c4f2); + + --background-modifier-border: #af9dd1; + --background-modifier-success: #d7a4e7; + + --text-normal: #0e0e0e; + --text-muted: #ab7ecf; + --text-faint: #a23ac2; + --accent-em: #620ac6; + --text-selection: #8b66bb59; + + --interactive-normal: #eaeaeb; + --interactive-hover: #d1b6f0; + + --interactive-accent-rgb: 195, 144, 230;/*工作区旁边的线*/ + --accent-h: 266; + --accent-s: 62%; + --accent-l: 72%; + --strong-em-highlight-color: #7908ae; + --text-highlight-bg-h: 273; + --text-highlight-bg-s: 65%; + --text-highlight-bg-l: 75%; + --text-highlight-bg-a: 0.706; + --text-highlight-bg: hsla(var(--text-highlight-bg-h), var(--text-highlight-bg-s), var(--text-highlight-bg-l), var(--text-highlight-bg-a)); + --text-search-highlight-bg: #d1d2ff; + --strong-em-color-1: #5008ae; + --strong-em-color-2: #2e0153; + --search-result-file-matched-bg: #ffc3c3; + + --background-mobile-drawer-1: #ffffff; + --background-mobile-drawer-2: #ffffff; + + --background-secondary-alt-bg-4-bt-publish: #e1d5eb61; + + --scrollbar-thumb-bg: #aa7dd3a8; + --scrollbar-active-thumb-bg: #aa7dd3; + + --search-result-file-title-color: #5a10a0; + + --background-blockquote: #b6b6b62c; + + --internal-link-color: #6203a2; + + --list-ul: #ffffff; + --list-ul-block-color: #7f1bb9; + --list-ul-disc-color: #d955f3; + --list-ul-hover: #ba2fdd; + --list-ol-block-color: #7835a5; + --list-ol-number-color: #85429a; + --list-ol-hover: #9231b8; + + --green-1: #9c30c7; + + --tag-text: #d2a3d4; + --stag1: #fa8787; + --stag1-bg: #eb2727; + --stag2: #fdbd5c; + --stag2-bg: #ee9002; + --stag3: #50ce3a; + --stag3-bg: #22ac09; + + --tag1: #2b85ce; + --tag2: #29b325; + --tag3: #20b9ce; + --tag4: #dfd331; + --tag5: #bbbbbb; + + --tag-dailynote: #0077ff; + --tag-dailynote-bg: #277CDD; + --tag-weeklynote: #4b9fff; + --tag-weeklynote-bg: #6aafff; + --tag-questions: #b68fff; + --tag-questions-bg: #b085ff; + --tag-ideas: #ceb900; + --tag-ideas-bg: #444444d8; + + --h1-color: var(--print-h1-color, #6F6493); + --h2-color: var(--print-h2-color, #724681); + --h3-color: var(--print-h3-color, #330349); + --h4-color: var(--print-h4-color, #2d1445); + --h5-color: var(--print-h5-color, #300e47); + --h6-color: var(--print-h6-color, #331945); + + /*graph*/ + --graph-text-color: #696969; + --graph-tag: #da9ee2cc; + --graph-attach: #88b0d6cc; + --graph-circle: #ac6fbfcc; + --graph-line: #b1b1b1; + --graph-unresolved: #db4e4ecc; + --graph-arrow: #e25300; + --graph-control-bg: #ffffff9a; + + /*mermaid*/ + --mermaid-active-task-color: #44bbff; + --mermaid-seq-dia-color: #76c8ff; + + /*table*/ + --table-background-color: #efe0f1; + --table-background-color-odd: #ffffffaf; + --table-border-color: #7d7d7d; + --table-thead-background-color: #d4a7e6c7; + --table-hover-raw-color: #c485ee2f; + --table-hover-color: #a75dec34; + --table-hover-thead-color: #edddff; + + /*calendar*/ + --calendar-week-color: #8b32b4; + --calendar-week-hover: #f9e3ff; + --calendar-week-background-color: #d4bfe6; + --calendar-today-background-color: #c2aaee; + --color-text-weeknum: #8b32b4; + + /*day planner 改为相应色系*/ + --day-planner-pie: #eca95c; + --day-planner-timeline: #d62f2f; + --day-planner-line: #d0aee6; + --day-planner-dot: #d0aee6; + --day-planner-item-hover: #d0aee6; + + --event-item-color1: #e6e0f1; + --event-item-color2: #d4cae5; + --event-item-color3: #c2b4d9; + --event-item-color4: #b09fcd; + --event-item-color5: #9f8ac1; + --event-item-color6: #9078b6; + --event-item-color7: #8066ac; + --event-item-color8: #7154a1; + --event-item-color9: #604195; + --event-item-color10: #4f2d89; + --event-item-color11: #3c197c; + --event-item-color12: #280070; + + /* stickies */ + --stickies-color-1: #b8b3e2; + --stickies-color-2: #e9c6f1; + --tape-color: #acacac65; + + /*Sliding panes*/ + --sliding-panes-header-color: #2c0240; + --background-4-sliding-pane: #ffffffef; + + --color-view-header-gradient-1: #efe0f1ef; /*标题上的颜色*/ + --color-view-header-gradient-2: #e1c9f1ef; + + /*checkbox*/ + --checkbox-color-0: var(--text-accent); + --checkbox-color-1: #e0dd2a; + --checkbox-color-2: #4077bf; + --checkbox-color-3: #ffe9e9; + --checkbox-color-4: #fffbd4; + --checkbox-color-5: #ad7fbf; + --checkbox-color-6: #a3a1a1; + --text-checked-checkbox: #9b9b9b; + + --interactive-hover: #dbdbdc; + + --table-color-calendar-2: rgb(211, 161, 247); + --table-color-rgb: 211, 161, 247; + + --divider-color: #d7c4f2; + --tab-stacked-shadow: #c69fd5; +} + +body.color-scheme-options-lilac.all-dark-pdf .print.theme-light, +body.color-scheme-options-lilac.theme-dark { + --bg-color: #462058; + --bg-color2: #b276c4; + + --background-primary: var(--background-primary-bg-4-bt,#462058); + --background-primary-alt: var(--background-primary-alt-bg-4-bt,#b276c4); + --background-secondary: var(--background-secondary-bg-4-bt,#462058); + --background-secondary-alt: var(--background-secondary-alt-bg-4-bt,#462058); + + --background-modifier-border: #947676; + + --text-normal: #c9b8e9; + + --text-muted: #c46ec4; + --text-faint: #b932e2; + --text-folder-file: #b3b3b3; + + --accent-em: #ca91d8; + --accent-h: 300; + --accent-s: 53%; + --accent-l: 47%; + --interactive-normal: #20242b; + --interactive-hover: #353b47; + + --interactive-accent-rgb: 128, 50, 159; + + --strong-em-highlight-color: #9c8ce6; + + --text-highlight-bg-h: 286; + --text-highlight-bg-s: 40%; + --text-highlight-bg-l: 38%; + --text-highlight-bg-a: 0.541; + --text-highlight-bg: hsla(var(--text-highlight-bg-h), var(--text-highlight-bg-s), var(--text-highlight-bg-l), var(--text-highlight-bg-a)); + --text-search-highlight-bg: #bb4361; + --strong-em-color-1: #9c8ce6; + --strong-em-color-2: #23d05c; + + --background-mobile-drawer-1: #1b1b1b; + --background-mobile-drawer-2: #1b1b1b69; + --background-transparent-blue: #003e759a; + + --scrollbar-thumb-bg: #603a8199; + --scrollbar-active-thumb-bg: #603a81; + + --search-result-file-title-color: #a75ac6; + + --background-blockquote: #9191911c; + --background-code: #1111118c; + --background-code-2: #4c4c4cb0; + --text-color-code: #d58000; + + --internal-link-color: #a360da; + + --list-ul: #f1a8f8; + --list-ul-block-color: #e142d9a9; + --list-ul-disc-color: #ae63eb; + --green-1: #8442c1; + --list-ul-hover: #9715e2de; + --list-ol-block-color: #9826bbb4; + --list-ol-number-color: #b595c4; + --list-ol-hover: #ba2cd6; + + --tag-text: #e4e4e4; + --stag1: #f08383; + --stag1-bg: #bd1919; + --stag2: #e7b263; + --stag2-bg: #ac6700; + --stag3: #77df89; + --stag3-bg: #058c1c; + --tag1: #2b85ce; + --tag2: #29b325; + --tag3: #20b9ce; + --tag4: #dfd331; + --tag5: #bbbbbb; + + --h1-color: var(--print-h1-color, #bc7ad4); + --h2-color: var(--print-h2-color, #8d26ac); + --h3-color: var(--print-h3-color, #9642af); + --h4-color: var(--print-h4-color, #d496f8); + --h5-color: var(--print-h5-color, #a192f7); + --h6-color: var(--print-h6-color, #c675f5); + + /*graph*/ + --graph-tag: #b992ddbb; + --graph-attach: #76c1f0bb; + --graph-circle: #8f70a1bb; + --graph-line: #8c8c8c; + --graph-unresolved: #c3afdade; + + /*mermaid*/ + --mermaid-active-task-color: #187ef1; + --mermaid-seq-dia-color: #1371be; + + /*table*/ + --table-background-color: #58266e; + --table-background-color-odd: #0000001c; + --table-border-color: #ac9494; + --table-thead-background-color: #4332ddc2; + --table-hover-raw-color: #08569a21; + --table-hover-color: #4125a5a1; + --table-hover-thead-color: #5f298cc7; + + /*calendar*/ + --calendar-week-color: #c194df; + --calendar-week-hover: #705c81; + --calendar-week-background-color: #683270; + --calendar-today-background-color: #e01313; + + /*day planner 改为相应色系*/ + --day-planner-pie: #eca95c; + --day-planner-timeline: #9231b8; + --day-planner-line: #8b36b3; + --day-planner-dot: #8b36b3; + --day-planner-item-hover: #8b36b3; + --event-item-color1: #c79cdb; + --event-item-color2: #b67fd1; + --event-item-color4: #9646bc; + --event-item-color3: #a662c6; + --event-item-color5: #8b3fae; + --event-item-color6: #7f3aa0; + --event-item-color7: #683083; + --event-item-color8: #592672; + --event-item-color9: #371945; + --event-item-color10:#351544; + + /* stickies */ + --stickies-color-1: #683083; + --stickies-color-2: #823a92; + --tape-color: #99999967; + + /*Sliding panes*/ + --sliding-panes-header-color: var(--h2-color); + --background-4-sliding-pane: #252525ed; + + --color-view-header-gradient-1: #330c46de; + --color-view-header-gradient-2: #002900c0; + + /*checkbox*/ + --checkbox-color-0: var(--text-accent); + --checkbox-color-1: #dbd821; + --checkbox-color-2: #1061ac; + --checkbox-color-3: #ffd1d1; + --checkbox-color-4: #625d4c; + --checkbox-color-5: #9a67ae; + --checkbox-color-6: #5f5f5f; + --text-checked-checkbox: #b9b8b8; + + --interactive-hover: #dbdbdc; + + --table-color-calendar-2: rgb(98, 36, 143); + --table-color-rgb: 98, 36, 143; + + --tab-stacked-shadow: #240a2e; +} + +/*分割工作区的线透明*/ +body.color-scheme-options-lilac .workspace-split.mod-left-split>.workspace-leaf-resize-handle, +body.color-scheme-options-lilac .workspace-split.mod-right-split>.workspace-leaf-resize-handle { + width: 2px; + background-color: transparent; +} + +/* scrollbar 滚动条颜色*/ +body.color-scheme-options-lilac.theme-light ::-webkit-scrollbar-thumb { + background-color: #cbb5e9; +} +body.color-scheme-options-lilac.theme-dark ::-webkit-scrollbar-thumb { + background-color: #683083; +} + +/*stickies*/ +body.color-scheme-options-lilac .stickies { + color: var(--text-normal); +} + +body.color-scheme-options-lilac div .CodeMirror-line span.cm-hashtag-begin + span.cm-hashtag.cm-meta.cm-hashtag-end { + background-color: transparent; + border: 1px solid var(--text-normal); + color: var(--tag-text); + border-radius: var(--radius-l); + padding-right: 0.4375em; + padding-left: 0.4375em; +} + +body.color-scheme-options-lilac *:not(font) > em > strong, +body.color-scheme-options-lilac *:not(font) > strong > em, +body.color-scheme-options-lilac .cm-strong.cm-em { + background-image: initial; + background-clip: initial; + -webkit-background-clip: initial; + -webkit-text-fill-color: initial; + background-color: initial; +} + +body.color-scheme-options-lilac.theme-dark #calendar-container { + --theme-color-translucent-3: #553b75; +} + +body.color-scheme-options-lilac.theme-light #calendar-container { + --theme-color-translucent-3: #dccaffb0; +} +/*======@awyugan--end========*/ + + +/*======@cuman--start========*/ +/*modified from https://github.com/hydescarf/Obsidian-Theme-Mado-Miniflow*/ +:root { + --simple-white-1:hsla(204, 45%, 97%, 1); + --simple-white-2:hsla(210, 45%, 95%, 1); + --simple-white-3:hsla(212, 17%, 80%, 0.2); + --simple-white-4:hsla(180, 33%, 99%, 1); + --simple-white-5:hsla(207, 10%, 90%, 0.1); + --simple-white-6:hsla(212, 17%, 80%, 0.3); + + --simple-blue-1:hsla(209, 95%, 62%, 1); + --simple-blue-2:hsla(209, 85%, 72%, 0.5); + --simple-blue-3: hsla(245, 60%, 67%, 1); + --simple-blue-4:hsla(209, 20%, 66%, 0.62); + + --simple-black-1:hsla(0, 0%, 13%, 1); + --simple-black-2:hsla(220, 20%, 35%, 1); + --simple-gray-1:hsla(0, 0%, 33%, 1); + --simple-gray-2:hsla(210, 15%, 70%, 0.2); + --simple-gray-3:hsla(210, 15%, 20%, 0.2); + --simple-gray-4:hsla(210, 6%, 38%, 0.5); + --simple-gray-5:hsla(207, 17%, 90%, 1); + --simple-gray-6:hsla(217, 15%, 83%, 1); + --simple-gray-7:hsla(217, 15%, 83%, 0.7); + --simple-tran:hsla(204, 45%, 97%, 0); + --simple-yellow:hsla(60, 100%, 50%, 0.4); + --simple-orange:hsla(25, 75%, 65%, 1); + --simple-red-1:hsla(365, 90%, 62%, 1); + --simple-red-2:hsl(365, 95%, 85%, 1); + --simple-red-3:hsl(365, 85%, 45%, 1); + --button-radius:4px; + --window-radius:8px; +} + +body.color-scheme-options-simplicity-topaz .theme-light, +body.color-scheme-options-simplicity-topaz.theme-light { + --h1-color: var(--print-h1-color,var(--text-normal)); + --h2-color: var(--print-h2-color,var(--text-normal)); + --h3-color: var(--print-h3-color,var(--text-normal)); + --h4-color: var(--print-h4-color,var(--text-normal)); + --h5-color: var(--print-h5-color,var(--text-normal)); + --h6-color: var(--print-h6-color,var(--text-normal)); + --background-accent: var(--simple-white-1); + --background-modifier-border: var(--simple-gray-5); + --background-modifier-form-field: var(--simple-white-1); + --background-modifier-form-field-highlighted: var(--simple-white-1); + --background-modifier-box-shadow: rgba(0, 0, 0, 0.05); + + --text-normal: var(--simple-black-1); + --text-muted: hsla(218, 19%, 39%, 1); + + --text-faint: hsla(218, 19%, 39%, 1); + + --accent-em: var(--simple-gray-4); + --text-error: var(--simple-red-1); + + --text-selection: var(--simple-gray-7); + + --interactive-normal: var(--simple-white-2); + --interactive-hover: var(--simple-white-4); + --accent-h: 220; + --accent-s: 20%; + --accent-l: 35%; + --interactive-accent-rgb: 70, 142, 235; + + --panel-border-color: var(--simple-white-4); + + --background-primary-bg-4-bt: var(--simple-white-2); + --background-primary-alt-bg-4-bt: var(--simple-tran); + --background-secondary-bg-4-bt: var(--simple-tran); + --background-secondary-alt-bg-4-bt: var(--simple-tran); + --background-primary-alt:var(--simple-white-2); + + --background-mobile-drawer-1: var(--simple-white-1); + --background-mobile-drawer-2: var(--simple-white-1); + --background-modifier-border-hr: var(--simple-gray-5); + --background-secondary-alt-bg-4-bt-publish: var(--simple-gray-5); + + --scrollbar-thumb-bg: var(--simple-gray-5); + + --color-black: var(--simple-black-1); + --color-dark-gray: var(--simple-gray-1); + --color-accent: var(--simple-blue-1); + --color-accent-alt: var(--simple-blue-2); + --color-accent-dark: var(--simple-blue-3); + --color-gray: var(--simple-gray-2); + --color-light-gray: var(--simple-gray-3); + --color-medium-gray: var(--simple-gray-4); + + --modal-group-border: var(--simple-gray-6); + --button-selected: var(--simple-white-6); + --button-hover: var(--simple-white-6); + --button-selected-hover: var(--simple-white-3); + + --window-shadow: 0 1px 3px var(--simple-white-3); + --window-shadow2: 0 0 9px var(--simple-gray-7); + --window-shadow-hover: 0 3px 5px var(--simple-white-6); + --window-shadow-transparent:0 3px 5px transparent; + + --border:1px solid var(--simple-gray-5); + + --background-primary: var(--simple-white-1); + + --background-secondary-alt: var(--simple-white-2); + + --background-tertiary: var(--simple-white-3); + + --background-accent: var(--simple-blue-1); + --background-fourth: var(--simple-white-4); + --background-fifth: var(--simple-white-5); + --background-sixth: var(--simple-white-4); + + --text-color-code: var(--simple-orange); + --text-normal: var(--simple-black-1); + --text-error: var(--simple-red-1); + + --text-faint: var(--simple-gray-1); + --text-highlight-bg: var(--simple-yellow); + --accent-strong: var(--simple-black-2); + --accent-em: var(--simple-gray-4); + --text-muted: hsla(218, 19%, 39%, 1); + + --background-modifier-error: var(--simple-red-1); + --background-modifier-border: var(--simple-gray-5); + --custom-titlebar-bg: var(--background-secondary); + --background-code-2: var(--simple-tran); + --scrollbar-bg: transparent; + --background-transparent-black-or-white-1: var(--simple-white-2) !important; + --background-transparent-black-or-white-2: var(--bg-color-settings-1) !important; + --background-transparent-black-or-white-3: var(--bg-color-settings-1) !important; + --tab-background-active: #ffffff; + --theme-color-translucent-01: hsla(254,80%,68%,0.1); +} + + +body.color-scheme-options-simplicity-topaz.all-dark-pdf .print.theme-light, +body.color-scheme-options-simplicity-topaz.theme-dark { + /* dark mode quick hack */ + --simple-white-1:hsla(215, 17%, 10%, 1); + --simple-white-2:hsla(214, 24%, 15%, 1); + --simple-white-3:hsla(212, 17%, 22%, 0.9); + --simple-white-6:hsla(212, 17%, 0%, 0.3); + --simple-white-4:hsla(215, 22%, 13%, 1); + --simple-white-5:hsla(207, 10%, 10%, 0.1); + --simple-tran:hsla(207, 10%, 10%, 0); + --simple-black-1:hsla(0, 0%, 73%, 1); + --simple-black-2:hsla(213, 33%, 65%, 1); + --simple-gray-1:hsla(0, 0%, 83%, 1); + --simple-gray-2:hsla(210, 25%, 5%, 0.3); + --simple-gray-3:hsla(210, 15%, 50%, 0.4); + --simple-gray-4:hsla(210, 15%, 70%, 0.5); + --simple-gray-5:hsla(207, 17%, 10%, 0.5); + --simple-gray-6:hsla(217, 28%, 90%, 0.9); + --simple-gray-7:hsla(217, 18%, 50%, 0.9); + + --simple-yellow:hsla(45, 63%, 43%, 1); + --simple-blue-3:hsla(245, 60%, 67%, 1); + + --custom-titlebar-bg:var(--background-modifier-cover); + + --color-black: var(--simple-black-1); + --color-dark-gray: var(--simple-gray-1); + --color-accent: var(--simple-blue-1); + --color-accent-alt: var(--simple-blue-2); + --color-accent-dark: var(--simple-blue-3); + --color-gray: var(--simple-gray-2); + --color-light-gray: var(--simple-gray-3); + --color-medium-gray: var(--simple-gray-4); + + --modal-group-border: var(--simple-gray-6); + --button-selected: var(--simple-white-6); + --button-hover: var(--simple-white-6); + --button-selected-hover: var(--simple-white-3); + + --window-shadow: 0 1px 3px var(--simple-white-5); + --window-shadow2: 0 0 9px var(--simple-white-6); + --window-shadow-hover: 0 3px 5px var(--simple-white-6); + --window-shadow-transparent: 0 3px 5px transparent; + + --border:1px solid var(--simple-gray-5); + + --background-primary: var(--simple-gray-2); + + --tab-outline-color: var(--simple-white-2); + --divider-color: var(--simple-gray-5); + --background-secondary-alt: var(--simple-white-2); + --background-tertiary: var(--simple-white-3); + --background-primary-alt: var(--simple-white-6); + --background-secondary-bg-4-bt: var(--simple-tran) ; + + --background-accent: var(--simple-blue-1); + --background-fourth: var(--simple-white-3); + --background-fifth: var(--simple-white-5); + --background-sixth: var(--simple-white-5); + + --text-color-code:var(--simple-orang-1); + --text-normal: var(--simple-black-1); + --text-error: var(--simple-red-1); + + --text-faint: var(--simple-gray-6); + --text-highlight-bg:var(--simple-yellow); + --text-bold: var(--simple-black-2); + --text-em: var(--simple-gray-6); + --text-muted: hsl(218, 17%, 58%); + + --background-modifier-error: var(--simple-red-1); + --background-modifier-border: var(--simple-gray-5); + --accent-h: 209; + --accent-s: 60%; + --accent-l: 55%; + --indentation-guide: var(--simple-gray-3); + + --scrollbar-bg: transparent; + +} + +body.color-scheme-options-simplicity-topaz:not(.background-settings-workplace-background-image) { + --background-secondary: var(--simple-white-2); +} + +body.theme-dark.color-scheme-options-simplicity-topaz .workspace-tab-header.is-active { + --tab-background-active: var(--background-primary); + --tab-outline-width: var(--simple-gray-5); +} + +body.theme-dark.color-scheme-options-simplicity-topaz .workspace-split.mod-root .workspace-tab-header.is-active.mod-active { + background-color: var(--tab-background-active); +} + + +body.color-scheme-options-simplicity-topaz.background-image-settings-switch.background-image-settings-markdown-page-transparent { + --background-secondary: var(--simple-tran); + --background-primary: var(--simple-tran); + --background-secondary-bg-4-bt: var(--simple-tran); + --tab-outline-color: var(--background-secondary); +} + +/* +--------------------------- + Title Bar +--------------------------- +*/ + +@media screen and (max-width:960px) { + body.color-scheme-options-simplicity-topaz .view-header .view-actions .view-action{ + opacity: 1 !important; + } + body.color-scheme-options-simplicity-topaz .workspace>.workspace-split.mod-vertical{ + padding: 0; + } +} + +body.is-mobile.color-scheme-options-simplicity-topaz .workspace>.workspace-split.mod-vertical{ + padding: 0; +} +.view-header .view-actions .view-action +{ + z-index: 1; +} +body.color-scheme-options-simplicity-topaz .view-header .view-actions .view-action, +body.color-scheme-options-simplicity-topaz .titlebar-button-container.mod-right{ + opacity: 0; + z-index: 1; + transition: all 0.6s linear; +} +body.color-scheme-options-simplicity-topaz .view-header:hover .view-actions .view-action, +body.color-scheme-options-simplicity-topaz .titlebar-button-container.mod-left:hover, +body.color-scheme-options-simplicity-topaz .titlebar-button-container.mod-right:hover { + opacity: 0.8; + transition: all 0.6s linear; +} + +body.color-scheme-options-simplicity-topaz .nav-action-button.is-active { + background-color: var(--simple-blue-2); +} +body.color-scheme-options-simplicity-topaz .checkbox-container.is-enabled { + background-color: var(--interactive-accent-hover); +} + +body.theme-light.color-scheme-options-simplicity-topaz .workspace-split.mod-root .workspace-tab-header.is-active.mod-active { + border-radius: 6px; + border-color: var(--background-modifier-border); + border-style: solid; + border-width: 0px; +} + +body.color-scheme-options-simplicity-topaz.theme-dark:not(.background-settings-workplace-background-image) .workspace-split.mod-root .workspace-tab-header.is-active.mod-active { + background-color: var(--simple-white-4); +} + +/* Hide dock's tab menu, and show them when hovered */ +body.color-scheme-options-simplicity-topaz .workspace-tab-header-container { + /* z-index: 1; */ + /* height:1px; */ + transition: opacity 0.1s; + /* border-radius: var(--button-radius); */ + box-shadow: none; + width: 100%; + border-bottom: var(--tab-outline-width) transparent; +} +body.color-scheme-options-simplicity-topaz .modal, +body.color-scheme-options-simplicity-topaz .modal-container .prompt { + animation: 0.2s popup forwards; + border-radius: 20px; + box-shadow: var(--window-shadow2); +} + +body.color-scheme-options-simplicity-topaz.setting-default-frosted-glass.theme-dark .modal-bg { + background-color: var(--bg-color-settings-3); + backdrop-filter: blur(5px); +} + +body.color-scheme-options-simplicity-topaz.background-image-settings-command-palette-switch .modal-container .prompt::before { + border-radius: 20px; + box-shadow: var(--window-shadow2); +} + +body.color-scheme-options-simplicity-topaz.background-image-settings-command-palette-switch .modal-container .community-plugin-search { + border-bottom-left-radius: 20px; +} + +body.color-scheme-options-simplicity-topaz.background-image-settings-command-palette-switch .modal-container .community-plugin-search { + border-bottom-left-radius: 20px; +} + +body.color-scheme-options-simplicity-topaz [class="menu"] { + animation: 0.2s popup forwards; + border-radius: 10px; + box-shadow: var(--window-shadow2); +} +@keyframes popup { + 0% { transform:scale(70%); opacity:0; } + 15% { transform:scale(80%); opacity:0.1; } + 35% { transform:scale(102%); } + 45% { opacity:0.3; } + 65% { opacity:0.7; } + 100% { transform:scale(100%); opacity:1; } +} +/* Left dock navigation (new note, new folder, reorder) */ + +body.color-scheme-options-simplicity-topaz:not(.disable-auto-hide-header) .workspace-tab-header-container:hover + .workspace-tab-container .workspace-leaf .workspace-leaf-content>.nav-header { + margin-top: 0; + transition: all 0.1s linear; +} + +body.color-scheme-options-simplicity-topaz:not(.disable-auto-hide-header) .workspace-tab-header-container + .workspace-tab-container .workspace-leaf .workspace-leaf-content>.nav-header:hover { + margin-top: 0; + transition: all 0.6s linear; +} +body.color-scheme-options-simplicity-topaz:not(.disable-auto-hide-header) .workspace-tab-header-container + .workspace-tab-container .workspace-leaf .workspace-leaf-content>.nav-header { + margin-top: -30px; + transition: all 0.6s linear; +} + + +body.color-scheme-options-simplicity-topaz:not(.disable-auto-hide-header) .workspace-tab-header-container + .workspace-tab-container .workspace-leaf .workspace-leaf-content[data-type="file-tree-view"] +.view-content .file-tree-header-fixed { + position: relative; + margin-top: -30px; + transition: all 0.6s linear; +} +body.color-scheme-options-simplicity-topaz:not(.disable-auto-hide-header) .workspace-tab-header-container:hover + .workspace-tab-container .workspace-leaf .workspace-leaf-content[data-type="file-tree-view"] .view-content .file-tree-header-fixed { + margin-top: 0; + transition: all 0.3s linear; +} +body.color-scheme-options-simplicity-topaz:not(.disable-auto-hide-header) .workspace-tab-header-container + .workspace-tab-container .workspace-leaf .workspace-leaf-content[data-type="file-tree-view"] .view-content .file-tree-header-fixed:hover{ + margin-top: 0; +} + +body.color-scheme-options-simplicity-topaz .oz-folders-tree-wrapper .oz-folder-contents { + border-left: 1px solid var(--background-modifier-border); +} +body.color-scheme-options-simplicity-topaz .oz-flex-container { + justify-content: start; +} +body.color-scheme-options-simplicity-topaz .oz-nav-action-button { + color: var(--text-faint); + opacity: 0.3; +} + +/* Remove style for border-on-active */ +body.color-scheme-options-simplicity-topaz .workspace-tabs .workspace-leaf, +body.color-scheme-options-simplicity-topaz .workspace-tabs .workspace-leaf.mod-active{ + border: none; +} + +body.color-scheme-options-simplicity-topaz .horizontal-main-container { + overflow: visible; +} +body.color-scheme-options-simplicity-topaz .workspace { + overflow: visible; +} + +/* +--------------------------- + Note Title +--------------------------- +*/ + +body.color-scheme-options-simplicity-topaz .workspace-split.mod-root > .workspace-leaf:first-of-type:last-of-type .view-header, +body.color-scheme-options-simplicity-topaz .workspace-split.mod-horizontal > .workspace-leaf .view-header, +body.color-scheme-options-simplicity-topaz .workspace-split.mod-vertical > .workspace-leaf .view-header { + display: flex; + align-items: center; + border: none; + background: var(--simple-white-2); +} + +body.theme-dark.color-scheme-options-simplicity-topaz .workspace-split.mod-root > .workspace-leaf:first-of-type:last-of-type .view-header, +body.theme-dark.color-scheme-options-simplicity-topaz .workspace-split.mod-horizontal > .workspace-leaf .view-header, +body.theme-dark.color-scheme-options-simplicity-topaz .workspace-split.mod-vertical > .workspace-leaf .view-header { + background-color: transparent; +} + +body.color-scheme-options-simplicity-topaz .view-header-title { + font-size: 1rem; + border-radius: var(--button-radius); + margin-left: 0; + border: 1px solid transparent; + transition:border 0.2s, background 0.2s; +} + +body.color-scheme-options-simplicity-topaz .view-header-title:hover, +body.color-scheme-options-simplicity-topaz .view-header-title:focus { + background: var(--background-fourth); +} + +body.color-scheme-options-simplicity-topaz .view-action, +body.color-scheme-options-simplicity-topaz .view-header-icon{ + display: flex; + padding: 4px; + margin: 0 3px; + color: var(--color-dark-gray); + border-radius: var(--button-radius); + transition: 0.1s background, 0.1s opacity; + top: 0; +} + +body.color-scheme-options-simplicity-topaz .view-action:hover,.view-header-icon:hover{ + background: var(--button-hover); + color: var(--color-dark-gray); +} + +body.color-scheme-options-simplicity-topaz .view-action:active,.view-header-icon:active { + opacity: 0.75; +} + +body.color-scheme-options-simplicity-topaz .workspace-split.mod-horizontal > * > .workspace-leaf-resize-handle { + background: none; + height: 7px; + border: none; + background-color: transparent; +} + +body.color-scheme-options-simplicity-topaz .workspace-split.mod-vertical > * > .workspace-leaf-resize-handle, +body.color-scheme-options-simplicity-topaz .workspace-split.mod-left-split > .workspace-leaf-resize-handle, +body.color-scheme-options-simplicity-topaz .workspace-split.mod-right-split > .workspace-leaf-resize-handle{ + background: none; + background-color: transparent; + width: 3px; + border: none; +} +body.color-scheme-options-simplicity-topaz .workspace-split .workspace-leaf-resize-handle:hover{ + background: var(--simple-gray-2); +} + +body:not(.is-mobile).color-scheme-options-simplicity-topaz:not(.background-image-settings-switch) .workspace-split.mod-root .view-content, +body:not(.is-mobile).color-scheme-options-simplicity-topaz:not(.background-settings-workplace-background-image) .workspace-split.mod-root .view-content { + background-color: var(--background-primary); +} + +body:not(.is-mobile).color-scheme-options-simplicity-topaz .workspace-fake-target-overlay:not(.is-in-sidebar) .workspace-tabs .workspace-leaf, +body:not(.is-mobile).color-scheme-options-simplicity-topaz .mod-root .workspace-tabs .workspace-leaf, +body:not(.is-mobile).color-scheme-options-simplicity-topaz .mod-root .workspace-tabs .workspace-tab-header-container { + background-color: transparent; +} + + +body:not(.is-mobile).color-scheme-options-simplicity-topaz.background-settings-workplace-background-image .workspace-split.mod-root +{ + background-color: var(--simple-tran); +} +body.color-scheme-options-simplicity-topaz .workspace-split.mod-root +{ + background-color: var(--simple-white-2); +} +body.color-scheme-options-simplicity-topaz.background-settings-workplace-background-image .workspace-tabs, +body.theme-dark.color-scheme-options-simplicity-topaz.background-settings-workplace-background-image .workspace-ribbon.side-dock-ribbon.mod-left, +body.color-scheme-options-simplicity-topaz.background-settings-workplace-background-image div.workspace-ribbon.mod-left:before +{ + background-color: var(--background-secondary-bg-4-bt); +} + +body.color-scheme-options-simplicity-topaz.background-image-settings-switch.background-image-settings-markdown-page-transparent .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header { + background-color:var(--simple-white-5); +} +body.color-scheme-options-simplicity-topaz .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header.is-active { + box-shadow: var(--window-shadow-hover); +} +body.color-scheme-options-simplicity-topaz .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header { + border-radius: 15px; + box-shadow: none; +} + +body.color-scheme-options-simplicity-topaz .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner { + border-radius: 15px; +} + +/* +--------------------------- + Main Pane Border Styling +--------------------------- +*/ +body.color-scheme-options-simplicity-topaz .workspace-split.mod-horizonta.mod-left-split.is-collapsed+.workspace-split.mod-root > .workspace-leaf:first-of-type .workspace-leaf-content{ + border-top-left-radius: 0px; +} + +body:not(.is-mobile).color-scheme-options-simplicity-topaz .workspace-split.mod-vertical.mod-root .workspace-leaf{ + border-radius: 15px; +} + +body.color-scheme-options-simplicity-topaz.theme-dark .view-content { + border-bottom-right-radius: 20px; + border-bottom-left-radius: 20px; +} +body.color-scheme-options-simplicity-topaz .workspace-split.mod-vertical.mod-root .workspace-split.mod-vertical:not(:first-child):last-child .workspace-leaf{ + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +body.color-scheme-options-simplicity-topaz .workspace-split.mod-vertical.mod-root, +body.color-scheme-options-simplicity-topaz .workspace-split.mod-vertical.mod-root .workspace-split{ + display: flex; + gap: 18px; +} +body.color-scheme-options-simplicity-topaz .workspace>.workspace-split.mod-vertical{ + padding: 0px 3px 0; +} + +body.is-popout-window.color-scheme-options-simplicity-topaz .workspace>.workspace-split.mod-vertical{ + padding: 0; +} + + +body.theme-light.color-scheme-options-simplicity-topaz .workspace-split.mod-vertical.mod-root .workspace-leaf{ + box-shadow: var(--window-shadow); + height: 100%; +} +body.color-scheme-options-simplicity-topaz .workspace-split.mod-vertical > .workspace-leaf{ + padding: 0; +} +body.color-scheme-options-simplicity-topaz .workspace-split.mod-root > .workspace-leaf:last-of-type .workspace-leaf-content{ + border-top-right-radius: 0; +} + +/* Remove sttles on button-on-active, but not during right-click-menu as that is alright */ +body.color-scheme-options-simplicity-topaz .nav-folder-title, +body.color-scheme-options-simplicity-topaz .nav-file{ + border: none; +} +body.color-scheme-options-simplicity-topaz .workspace-leaf.mod-active .nav-folder.has-focus > .nav-folder-title, +body.color-scheme-options-simplicity-topaz .workspace-leaf.mod-active .nav-file.has-focus{ + border-radius: none; + border: none; + background-color: none; +} + +body.theme-light.color-scheme-options-simplicity-topaz .workspace-split.mod-horizontal > .workspace-leaf.mod-active .view-header, +body.theme-light.color-scheme-options-simplicity-topaz .workspace-split.mod-vertical > .workspace-leaf.mod-active .view-header { + background:var(--simple-white-1); +} +body.theme-dark.color-scheme-options-simplicity-topaz .workspace-split.mod-horizontal > .workspace-leaf.mod-active .view-header .view-header-title, +body.theme-dark.color-scheme-options-simplicity-topaz .workspace-split.mod-vertical > .workspace-leaf.mod-active .view-header .view-header-title{ + color:var(--simple-black-2); + text-shadow: 0px 0px 0px rgba(145, 237, 232, 1); +} + +body.color-scheme-options-simplicity-topaz .workspace-tab-header:not(.is-active ) .workspace-tab-header-inner-icon { + color: var(--text-faint); + opacity: 0.3; +} + + + +body.color-scheme-options-simplicity-topaz .markdown-source-view.mod-cm6 .cm-underline, +body.color-scheme-options-simplicity-topaz a, +body.color-scheme-options-simplicity-topaz :is(.markdown-preview-view,.markdown-rendered) .internal-link { + font-weight: 600; +} + +body.color-scheme-options-simplicity-topaz .nav-folder-children, +body.color-scheme-options-simplicity-topaz +.item-list{ + padding-left: 0.5em; + display: flex; + flex-direction: column; +} +body.color-scheme-options-simplicity-topaz .nav-folder{ +padding-bottom: 2px; +} + +body.color-scheme-options-simplicity-topaz .nav-folder-title{ + font-weight: 500; +} + +body.color-scheme-options-simplicity-topaz :is(h3,h4,h5,h6), +body.color-scheme-options-simplicity-topaz .cm-s-obsidian :is(.cm-header-3,.cm-header-4,.cm-header-5,.cm-header.cm-header-6) { + font-weight: 500; +} + +body.color-scheme-options-simplicity-topaz.background-settings-workplace-background-image:is(.background-settings-workplace-waves2-light,.background-settings-workplace-waves-light).theme-light{ + --background-secondary-bg-4-bt: var(--simple-tran); +} +body.color-scheme-options-simplicity-topaz.background-settings-workplace-background-image.theme-dark { + --background-primary-alt-bg-4-bt: var(--simple-tran); + --background-secondary-bg-4-bt: var(--simple-tran); + --background-secondary-alt-bg-4-bt: var(--simple-tran); +} + + +body.color-scheme-options-simplicity-topaz.is-frameless.background-settings-workplace-background-image .workspace-tab-header.is-active { + box-shadow: none; +} + +body.color-scheme-options-simplicity-topaz .workspace-leaf-content .view-header .view-header-icon { + margin-left: -10px; + opacity: 0; + width: 18px; +} +body.color-scheme-options-simplicity-topaz .workspace-leaf-content .view-header .view-header-icon:hover { + opacity: 1; +} + +body.color-scheme-options-simplicity-topaz:not(.view-button-front) .workspace-leaf-content .view-header .view-header-nav-buttons { + margin-left: -15px; +} + +body.default-tab.theme-light.color-scheme-options-simplicity-topaz .workspace-split.mod-root .workspace-tab-header.is-active { + background-image: linear-gradient(to right, var(--background-secondary), var(--simple-white-2)); +} +body.default-tab.color-scheme-options-simplicity-topaz:not(.background-settings-workplace-background-image,.background-image-settings-switch.background-image-settings-markdown-page-transparent) +.workspace-split.mod-root .workspace-tab-header.is-active { + background:var(--background-primary); + --tab-background-active:var(--background-primary); +} + +body.default-tab.background-image-settings-switch.background-image-settings-markdown-page-transparent +.workspace-split.mod-root .workspace-tab-header.is-active { + background:transparent; + --tab-background-active:transparent; +} + + + +body.color-scheme-options-simplicity-topaz .workspace-leaf-content .view-header .view-header-icon svg { + opacity: 0; +} +body.color-scheme-options-simplicity-topaz .workspace-tab-container-before.is-before-active, +body.color-scheme-options-simplicity-topaz .workspace-tab-container-after.is-after-active, +.workspace-tab-header.is-before-active, +body.color-scheme-options-simplicity-topaz .workspace-tab-header.is-after-active, +body.color-scheme-options-simplicity-topaz .workspace-split.mod-right-split .workspace-tabs .workspace-leaf, +body.color-scheme-options-simplicity-topaz .workspace-split.mod-left-split .workspace-tabs .workspace-leaf, +body.color-scheme-options-simplicity-topaz .workspace-tabs .workspace-tab-header-container { + background-color: var(--background-secondary-alt); +} +body.is-mobile.color-scheme-options-simplicity-topaz .workspace-tabs .workspace-tab-header-container { + background-color: var(--background-secondary); +} + +body.color-scheme-options-simplicity-topaz.background-settings-workplace-background-image .mod-root .workspace-tabs:not(.mod-top) .workspace-tab-header-container-inner { + padding-bottom:1px; +} + +/*==============*/ +/*==============*/ +/*======@cuman--end========*/ + +body.font-family-change-to-default .markdown-source-view, +body.font-family-change-to-default :is(.markdown-preview-view,.markdown-rendered), +body.font-family-change-to-default .markdown-source-view.mod-cm6 .cm-scroller, +body.font-family-change-to-default :is(.markdown-preview-view,.markdown-rendered) h5, +body.font-family-change-to-default :is(.markdown-preview-view,.markdown-rendered) h6, +body.font-family-change-to-default .nav-file-title, +body.font-family-change-to-default .nav-folder-title, +body.font-family-change-to-default a.tag, +body.font-family-change-to-default .cm-s-obsidian span.cm-hashtag, +body.font-family-change-to-default .nav-folder.mod-root>.nav-folder-title, +body.font-family-change-to-default pre.frontmatter.language-yaml::before, +body.font-family-change-to-default span.cm-strong, +body.font-family-change-to-default :not(font)>strong, +body.font-family-change-to-default a, +body.font-family-change-to-default :is(.markdown-preview-view,.markdown-rendered) .internal-link, +body.font-family-change-to-default :is(.markdown-preview-view,.markdown-rendered) th, +body.font-family-change-to-default *:not(font)>em>strong, +body.font-family-change-to-default *:not(font)>strong>em, +body.font-family-change-to-default .cm-strong.cm-em { + font-family: var(--font-default) !important; +} + +body.font-family-change-to-default .cm-s-obsidian .cm-hmd-frontmatter, +body.font-family-change-to-default .markdown-rendered code, +body.font-family-change-to-default :is(.markdown-preview-view,.markdown-rendered) code{ + font-family: var(--font-monospace); +} + +body.reduce-bottom-padding .workspace-leaf-content[data-type="markdown"] :is(.markdown-preview-view,.markdown-rendered) .markdown-preview-sizer, +body.reduce-bottom-padding:not(.plugin-cm-typewriter-scroll) .cm-s-obsidian .cm-content { + padding-bottom: var(--bottom-padding-value) !important; +} + + +/*===============================*/ +/*=============YAML==============*/ +/*===============================*/ + +input[type='text'].metadata-property-key-input { + background:transparent; +} + + +/* cssclass: inline-list */ +/* can change list from block to inline; can be used with inline images */ +.inline-list ul, +.inline-list ol { + display: inline-block; + margin-top: 0.3em; +} + +/* cssclass: code-wrap */ +/* as implied by the name, to wrap texts for code boxes */ +.code-wrap pre>code>span { + word-wrap: break-word; + word-break: break-all; + white-space: pre-wrap; +} +.code-wrap code.language-yaml.is-loaded { + word-wrap: break-word !important; + word-break: break-word !important; + white-space: pre-wrap !important; +} +.code-wrap code.language-md.is-loaded { + word-wrap: break-word !important; + word-break: break-word !important; + white-space: break-spaces !important; +} + +/* cssclass: image-grid */ +/* image-grid-2 */ +/* adapted from https://github.com/iEchoxu/obsidian_orange/blob/main/.obsidian/snippets/image-grid.css */ + +.img-grid :is(.markdown-preview-section,.markdown-rendered)>div>p>.image-embed[alt*="."]:last-child { + padding-right: 0; +} +.img-grid :is(.markdown-preview-section,.markdown-rendered)>div>p>.image-embed[alt*="."]:first-child { + padding-left: 0; +} +.img-grid :is(.markdown-preview-section,.markdown-rendered)>div hr { + width: 100%; +} +.img-grid span.image-embed[alt*="."] { + display: table-cell; +} +.img-grid img[alt*="."] { + max-height: 100vh; + object-fit: cover; +} + +.img-grid .markdown-preview-section .el-embed-image img:not([width]),.img-grid .markdown-preview-section video{ + width:100% +} +.img-grid .markdown-preview-section>.el-embed-image>p{ + display:grid; + grid-column-gap:0.5rem; + grid-row-gap:0; + grid-template-columns:repeat(auto-fit,minmax(0,1fr)) +} +.img-grid .markdown-preview-section>.el-embed-image>p>br{ + display:none +} +.img-grid .markdown-preview-section>.el-embed-image>p>img{ + object-fit:cover; + align-self:stretch +} +.img-grid .markdown-preview-section>.el-embed-image>p>.internal-embed img{ + object-fit:cover; + height:100% +} + +.img-grid-ratio .markdown-preview-section>.el-embed-image>p>.internal-embed img +,.img-grid.img-grid-ratio .markdown-preview-section>.el-embed-image>p>.internal-embed img{ + object-fit:contain; + height:100%; + align-self:center +} +@media (max-width:400pt){ + .el-embed-image{ + margin-top:.25rem + } + .img-grid .markdown-preview-section>.el-embed-image>p{ + grid-column-gap:0.25rem + } +} + +/* cssclass: kanban */ +/* adapted from spectrum theme, thanks to @Braweria. https://github.com/Braweria/Spectrum */ +/* a kind of css-based pseudo-kanban feature */ +.kanban ul { + display: flex; + flex-direction: row; + border: 0px solid var(--p-kanban-border-color); + padding: 0rem; + border-radius: var(--radius-m); + flex-wrap: wrap; +} +.kanban ul>li .list-bullet:after { + display: none; +} + +.kanban ul>li { + flex: 1 1 20%; + padding: 0.1em 1em 0.1em 0.8em; + margin: 0 0.3em 0.3em 0 !important; + list-style: none; + border: 1px solid var(--p-kanban-border-color); + border-left: 1px solid var(--p-kanban-border-color) !important; + border-radius: var(--radius-s); + word-wrap: break-word; + word-break: break-word; +} + +.kanban ul li.task-list-item .task-list-item-checkbox { + margin-left: auto; +} + + +.kanban ul .list-collapse-indicator.collapse-indicator.collapse-icon::before { + color: var(--text-accent); + transition: transform 10ms linear 0s +} + +body.colorful-p-kanban .kanban ul>li:nth-of-type(8n+1) { + background-color: var(--p-kanban-color-1); +} +body.colorful-p-kanban .kanban ul>li:nth-of-type(8n+2) { + background-color: var(--p-kanban-color-2); +} +body.colorful-p-kanban .kanban ul>li:nth-of-type(8n+3) { + background-color: var(--p-kanban-color-3); +} +body.colorful-p-kanban .kanban ul>li:nth-of-type(8n+4) { + background-color: var(--p-kanban-color-4); +} +body.colorful-p-kanban .kanban ul>li:nth-of-type(8n+5) { + background-color: var(--p-kanban-color-5); +} +body.colorful-p-kanban .kanban ul>li:nth-of-type(8n+6) { + background-color: var(--p-kanban-color-6); +} +body.colorful-p-kanban .kanban ul>li:nth-of-type(8n+7) { + background-color: var(--p-kanban-color-7); +} +body.colorful-p-kanban .kanban ul>li:nth-of-type(8n) { + background-color: var(--p-kanban-color-8); +} +.canvas-node-container .kanban ul>li:nth-of-type(n) { + backdrop-filter:none; +} +.kanban ul>li:nth-of-type(n) { + background-color: var(--p-kanban-color-simple); + padding-left: 1em; + backdrop-filter: blur(calc(var(--blur-p-kanban-frosted-glass) * 2px)); +} +.kanban ul:first-child>li:nth-of-type(8n+1) { + border-top: 6px solid var(--p-kanban-color-1) !important; +} +.kanban ul:first-child>li:nth-of-type(8n+2) { + border-top: 6px solid var(--p-kanban-color-2) !important; +} +.kanban ul:first-child>li:nth-of-type(8n+3) { + border-top: 6px solid var(--p-kanban-color-3) !important; +} +.kanban ul:first-child>li:nth-of-type(8n+4) { + border-top: 6px solid var(--p-kanban-color-4) !important; +} +.kanban ul:first-child>li:nth-of-type(8n+5) { + border-top: 6px solid var(--p-kanban-color-5) !important; +} +.kanban ul:first-child>li:nth-of-type(8n+6) { + border-top: 6px solid var(--p-kanban-color-6) !important; +} +.kanban ul:first-child>li:nth-of-type(8n+7) { + border-top: 6px solid var(--p-kanban-color-7) !important; +} +.kanban ul:first-child>li:nth-of-type(8n) { + border-top: 6px solid var(--p-kanban-color-8) !important; +} +body.simple-p-kanban .kanban ul:first-child>li:nth-of-type(n) { + border-top: none !important; +} + +body:not(.remove-shadow-p-kanban) .kanban ul>li:hover { + transition: box-shadow .2s cubic-bezier(.4, 0, 1, 1); + box-shadow: 0 3px 5px 0 var(--p-kanban-color-shadow), 0 3px 1px -3px var(--p-kanban-color-shadow), 2px 3px 3px 0 var(--p-kanban-color-shadow); +} + +.kanban ul ul { + display: flex; + flex-direction: column; + justify-content: center; + padding: 0rem; + margin-top: 0.5rem; + border-radius: 0; + border: 0; + background: none; +} + +.kanban ul ul li:not(.task-list-item) { + width: 100%; + display: block; + background-color: var(--p-kanban-card-color-1) !important; +} + +body.remove-shadow-p-kanban .kanban ul ul li:hover { + background: var(--p-kanban-card-color-2) !important; + border-color: var(--p-kanban-border-color) !important; + border-left: 1px solid var(--p-kanban-border-color) !important; +} + +body.remove-shadow-p-kanban.theme-dark .kanban ul ul li:hover { + border-color: #696969e1 !important; + border-left: 1px solid #696969e1 !important; +} + +.kanban ul ul li .task-list-item-checkbox { + margin-left: 1.5rem !important; +} + +.kanban ul ul ul { + margin-right: 0; +} + +.kanban ul ul::before { + border-left: 0; +} + +:is(.markdown-preview-view,.markdown-rendered).is-readable-line-width.kanban .markdown-preview-sizer>div>ul { + max-width: 100%; +} + +.kanban :is(ol,ul).contains-task-list :is(ol,ul) { + position: initial; +} + +.kanban :is(ol,ul).contains-task-list :is(ol,ul)::before { + all: initial; +} + +.kanban ul > li.task-list-item { + flex: 1 1 20%; + padding: 0.1em 1em; + list-style: none; + border: 1px solid var(--p-kanban-border-color); + border-left: 1px solid var(--p-kanban-border-color) !important; + border-radius: var(--radius-s); + word-wrap: break-word; + word-break: break-word; + text-indent: 0.01em; +} + +.kanban ul ul li.task-list-item { + width: 100%; + display: block; + padding-left: 2em; + text-indent: -3em; + background-color: var(--p-kanban-card-color-1) !important; +} + +.kanban ul ul li.task-list-item .list-collapse-indicator.collapse-indicator.collapse-icon { + text-indent: -1em; +} + +body:not(.default-icons) .kanban li.task-list-item .list-collapse-indicator.collapse-indicator.collapse-icon::before { + margin-left: -0.2em; +} + +body:not(.default-icons) .kanban li.task-list-item .task-list-item.is-collapsed .list-collapse-indicator.collapse-indicator.collapse-icon::before { + transform: translateX(-0.9em) translateY(-1em) rotate(-90deg); +} + +body.colorful-p-kanban .kanban .task-list-item-checkbox { + border-color: var(--text-normal) !important; +} + +/* cssclass: colorful-highlight */ +body:not(.remove-colorful-highlight-bg) .markdown-source-view.is-live-preview *:not([class*="cm-formatting-highlight"])~*:not([class*="cm-em"])~.cm-em.cm-highlight.cm-strong, +.markdown-source-view.is-live-preview.colorful-highlight .cm-em.cm-highlight.cm-strong { + background-color: var(--bg-color-highlight-3) !important; + color: var(--color-highlight-3) !important; + -webkit-text-fill-color: unset; + font-style: normal; + font-weight: var(--font-weight-highlight-3); +} +body:not(.remove-colorful-highlight-bg) .markdown-source-view.is-live-preview *:not([class*="cm-formatting-highlight"])~*:not([class*="cm-strong"])~.cm-highlight.cm-strong, +.markdown-source-view.is-live-preview.colorful-highlight .cm-highlight.cm-strong { + background-color: var(--bg-color-highlight-2) !important; + color: var(--color-highlight-2) !important; + font-weight: var(--font-weight-highlight-2); +} +body:not(.remove-colorful-highlight-bg) .markdown-source-view.is-live-preview *:not([class*="cm-formatting-highlight"])~*:not([class*="cm-em"])~.cm-em.cm-highlight, +.markdown-source-view.is-live-preview.colorful-highlight .cm-em.cm-highlight { + background-color: var(--bg-color-highlight-1) !important; + color: var(--color-highlight-1) !important; + font-style: normal; + font-weight: var(--font-weight-highlight-1); +} +.cm-s-obsidian .cm-formatting.cm-formatting-highlight.cm-highlight~.cm-formatting.cm-highlight[class*="cm-em"]~span.cm-highlight[class*="cm-em"], +.cm-s-obsidian .cm-formatting.cm-formatting-highlight.cm-highlight~.cm-formatting.cm-highlight[class*="cm-strong"]~span.cm-highlight[class*="cm-strong"], +.cm-s-obsidian .cm-formatting.cm-formatting-highlight.cm-highlight~.cm-formatting.cm-highlight[class*="cm-em"]:not([class*="cm-formatting-highlight"]), +.cm-s-obsidian .cm-formatting.cm-formatting-highlight.cm-highlight~.cm-formatting.cm-highlight[class*="cm-strong"]:not([class*="cm-formatting-highlight"]) { + background-color: var(--text-highlight-bg) !important; +} + +/* cssclass: cloze */ +.markdown-source-view.is-live-preview.cloze .cm-highlight.cm-strikethrough:not([class*="formatting"]), +body:not(.remove-cloze-style) .markdown-source-view.is-live-preview .cm-highlight.cm-strikethrough:not([class*="formatting"]) { + background-color: var(--cloze-bg-color) !important; + color: var(--cloze-bg-color); + text-decoration: underline var(--cloze-decoration) var(--cloze-decoration-color); +} + +.markdown-source-view.is-live-preview.cloze .cm-highlight.cm-strikethrough:hover, +body:not(.remove-cloze-style) .markdown-source-view.is-live-preview .cm-highlight.cm-strikethrough:hover { + background-color: transparent !important; + color: var(--text-normal) !important; + transition: all 400ms ease-in-out; +} + + +body:not(.remove-cloze-style) .markdown-rendered mark:has(> del) { + background-color: transparent !important; +} + +body:not(.remove-cloze-style) .markdown-rendered mark:empty { + background-color: initial !important; +} + + +.markdown-source-view.is-live-preview.cloze .cm-em.cm-highlight.cm-strikethrough:not([class*="formatting"]), +body:not(.remove-cloze-style) .markdown-source-view.is-live-preview .cm-em.cm-highlight.cm-strikethrough:not([class*="formatting"]) { + color: transparent !important; + background-color: transparent !important; + padding: 0 2px; + text-decoration: underline var(--cloze-decoration-2) var(--cloze-decoration-color-2) !important; +} + + +/*========floating-toc===========*/ +div.markdown-source-view ul.floating-toc>li{ + flex:none; + background-color: transparent; + border:0px; +} +div.markdown-source-view ul.floating-toc{ + flex-wrap:unset; +} +/*=========================*/ +/*==========tags===========*/ +/*=========================*/ +/*customised colorful tags*/ +body.colorful-tag-bt .tag:not(.token):nth-child(5n+1) { + background-color: var(--tag1); +} + +body.colorful-tag-bt .tag:not(.token):nth-child(5n+2) { + background-color: var(--tag2); +} + +body.colorful-tag-bt .tag:not(.token):nth-child(5n+3) { + background-color: var(--tag3); +} + +body.colorful-tag-bt .tag:not(.token):nth-child(5n+4) { + background-color: var(--tag4); +} + +body.colorful-tag-bt .tag:not(.token):nth-child(5n) { + background-color: var(--tag5); +} + +/*rainbow tag alt*/ +body.rainbow-tag-no-filter .tag:not(.token):nth-child(5n+1) { + --tag-border-color: hsla(var(--accent-h), var(--accent-s), var(--accent-l), 20%); + background-color: var(--theme-color-translucent-01); + color: var(--theme-color); +} + +body.rainbow-tag-no-filter .tag:not(.token):nth-child(5n+2) { + --tag-border-color: hsla(calc(var(--accent-h) + 70), var(--accent-s), var(--accent-l), 20%); + background-color: hsla(calc(var(--accent-h) + 70), var(--accent-s), var(--accent-l), 10%) !important; + color: hsl(calc(var(--accent-h) + 70), var(--accent-s), var(--accent-l-alt)) !important; +} + +body.rainbow-tag-no-filter .tag:not(.token):nth-child(5n+3) { + --tag-border-color: hsla(calc(var(--accent-h) + 140), var(--accent-s), var(--accent-l), 20%); + background-color: hsla(calc(var(--accent-h) + 140), var(--accent-s), var(--accent-l), 10%) !important; + color: hsl(calc(var(--accent-h) + 140), var(--accent-s), var(--accent-l-alt)) !important; +} + +body.rainbow-tag-no-filter .tag:not(.token):nth-child(5n+4) { + --tag-border-color: hsla(calc(var(--accent-h) + 210), var(--accent-s), var(--accent-l), 20%); + background-color: hsla(calc(var(--accent-h) + 210), var(--accent-s), var(--accent-l), 10%) !important; + color: hsl(calc(var(--accent-h) + 210), var(--accent-s), var(--accent-l-alt)) !important; +} + +body.rainbow-tag-no-filter .tag:not(.token):nth-child(5n) { + --tag-border-color: hsla(calc(var(--accent-h) + 280), var(--accent-s), var(--accent-l), 20%); + background-color: hsla(calc(var(--accent-h) + 280), var(--accent-s), var(--accent-l), 10%) !important; + color: hsl(calc(var(--accent-h) + 280), var(--accent-s), var(--accent-l-alt)) !important; +} + + +body.rainbow-tag-no-filter .tag:not(.token):nth-child(5n):hover { + color: white !important; + background-color: hsl(calc(var(--accent-h) + 280), var(--accent-s), var(--accent-l)) !important; +} +body.rainbow-tag-no-filter .tag:not(.token):nth-child(5n+1):hover { + color: white !important; + background-color: hsl(var(--accent-h), var(--accent-s), var(--accent-l)) !important; +} +body.rainbow-tag-no-filter .tag:not(.token):nth-child(5n+2):hover { + color: white !important; + background-color: hsl(calc(var(--accent-h) + 70), var(--accent-s), var(--accent-l)) !important; +} +body.rainbow-tag-no-filter .tag:not(.token):nth-child(5n+3):hover { + color: white !important; + background-color: hsl(calc(var(--accent-h) + 140), var(--accent-s), var(--accent-l)) !important; +} +body.rainbow-tag-no-filter .tag:not(.token):nth-child(5n+4):hover { + color: white !important; + background-color: hsl(calc(var(--accent-h) + 210), var(--accent-s), var(--accent-l)) !important; +} + +body.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+1), +body.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+1)+span.cm-hashtag, +body.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+1)+.cm-hashtag.cm-meta, +body.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+1)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end { + --tag-border-color: hsla(var(--accent-h), var(--accent-s), var(--accent-l), 20%); + background-color: var(--theme-color-translucent-01) !important; + color: var(--theme-color) !important; +} + +body.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+2), +body.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+2)+span.cm-hashtag, +body.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+2)+.cm-hashtag.cm-meta, +body.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+2)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end { + --tag-border-color: hsla(calc(var(--accent-h) + 210), var(--accent-s), var(--accent-l), 20%); + background-color: hsla(calc(var(--accent-h) + 210), var(--accent-s), var(--accent-l), 10%) !important; + color: hsl(calc(var(--accent-h) + 210), var(--accent-s), var(--accent-l-alt)) !important; +} + +body.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+3), +body.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+3)+span.cm-hashtag, +body.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+3)+.cm-hashtag.cm-meta, +body.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+3)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end { + --tag-border-color: hsla(calc(var(--accent-h) + 70), var(--accent-s), var(--accent-l), 20%); + background-color: hsla(calc(var(--accent-h) + 70), var(--accent-s), var(--accent-l), 10%) !important; + color: hsl(calc(var(--accent-h) + 70), var(--accent-s), var(--accent-l-alt)) !important; +} + +body.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+4), +body.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+4)+span.cm-hashtag, +body.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+4)+.cm-hashtag.cm-meta, +body.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+4)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end { + --tag-border-color: hsla(calc(var(--accent-h) + 280), var(--accent-s), var(--accent-l), 20%); + background-color: hsla(calc(var(--accent-h) + 280), var(--accent-s), var(--accent-l), 10%) !important; + color: hsl(calc(var(--accent-h) + 280), var(--accent-s), var(--accent-l-alt)) !important; +} + +body.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n), +body.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n)+span.cm-hashtag, +body.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n)+.cm-hashtag.cm-meta, +body.rainbow-tag-no-filter .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end { + --tag-border-color: hsla(calc(var(--accent-h) + 140), var(--accent-s), var(--accent-l), 20%); + background-color: hsla(calc(var(--accent-h) + 140), var(--accent-s), var(--accent-l), 10%) !important; + color: hsl(calc(var(--accent-h) + 140), var(--accent-s), var(--accent-l-alt)) !important; +} + + + +/*rainbow tag*/ +body.rainbow-tag .tag:not(.token):nth-child(5n+1) { + background-color: var(--theme-color-translucent-01); + color: var(--theme-color); +} + +body.rainbow-tag .tag:not(.token):nth-child(5n+2) { + background-color: var(--theme-color-translucent-01); + color: var(--theme-color); + filter: hue-rotate(70deg); +} + +body.rainbow-tag .tag:not(.token):nth-child(5n+3) { + background-color: var(--theme-color-translucent-01); + color: var(--theme-color); + filter: hue-rotate(140deg); +} + +body.rainbow-tag .tag:not(.token):nth-child(5n+4) { + background-color: var(--theme-color-translucent-01); + color: var(--theme-color); + filter: hue-rotate(210deg); +} + +body.rainbow-tag .tag:not(.token):nth-child(5n) { + background-color: var(--theme-color-translucent-01); + color: var(--theme-color); + filter: hue-rotate(280deg); +} + +body.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+1), +body.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+1)+span.cm-hashtag, +body.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+1)+.cm-hashtag.cm-meta, +body.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+1)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end { + background-color: var(--theme-color-translucent-01) !important; + color: var(--theme-color) !important; +} + +body.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+2), +body.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+2)+span.cm-hashtag, +body.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+2)+.cm-hashtag.cm-meta, +body.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+2)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end { + background-color: var(--theme-color-translucent-01) !important; + color: var(--theme-color) !important; + filter: hue-rotate(210deg); +} + +body.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+3), +body.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+3)+span.cm-hashtag, +body.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+3)+.cm-hashtag.cm-meta, +body.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+3)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end { + background-color: var(--theme-color-translucent-01) !important; + color: var(--theme-color) !important; + filter: hue-rotate(70deg); +} + +body.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+4), +body.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+4)+span.cm-hashtag, +body.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+4)+.cm-hashtag.cm-meta, +body.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+4)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end { + background-color: var(--theme-color-translucent-01) !important; + color: var(--theme-color) !important; + filter: hue-rotate(280deg); +} + +body.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n), +body.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n)+span.cm-hashtag, +body.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n)+.cm-hashtag.cm-meta, +body.rainbow-tag .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end { + background-color: var(--theme-color-translucent-01) !important; + color: var(--theme-color) !important; + filter: hue-rotate(140deg); +} + + +/*tag font size and font family*/ +body.colorful-tag-bt a.tag:not(.token) { + font-size: var(--font-size-tag); + font-family: var(--font-family-tag) !important; + border: none; + color: var(--tag-text); + text-align: center; + text-decoration: none; + cursor: pointer; +} + +body:not(.tag-default) .tag:not(.token):hover { + color: white !important; + background-color: var(--theme-color) !important; +} + +body:is(:not(.tag-default),:not(.font-family-change-to-default)) .cm-s-obsidian span.cm-hashtag { + font-family: var(--font-family-tag); + font-size: var(--font-size-tag) !important; + text-decoration: none; +} + +body:not(.tag-default) .cm-s-obsidian span.cm-hashtag-begin { + border-top-left-radius: var(--radius-l); + border-bottom-left-radius: var(--radius-l); + border-right: none !important; + text-decoration: none; + padding-left: 0.3em; +} + +body:not(.tag-default) .cm-s-obsidian span.cm-hashtag-end { + border-radius: 0 var(--radius-l) var(--radius-l) 0; + padding-right: 0.3em !important; + border-left: none; + text-decoration: none; +} + +body:not(.tag-default) .cm-s-obsidian span.cm-hashtag-begin+.cm-hashtag.cm-meta { + padding-right: 0; + border-left: none !important; +} + +body:is(.rainbow-tag,.tag-pill-outlined,.tag-clear-style,.colorful-tag-bt) .cm-s-obsidian span:is(.cm-hashtag,.cm-hashtag-begin,.cm-hashtag-end,.cm-hashtag-begin+.cm-hashtag.cm-meta,.cm-hashtag-begin+.cm-hashtag.cm-meta+span.cm-hashtag.cm-meta.cm-hashtag-end) { + color: var(--tag-text) ; +} + + +body:not(.tag-default) .cm-s-obsidian span.cm-hashtag-begin+.cm-hashtag.cm-meta+span.cm-hashtag.cm-meta.cm-hashtag-end { + padding-left: 0; + border-top-right-radius: var(--radius-l); + border-bottom-right-radius: var(--radius-l); + border-top-left-radius: 0; + border-bottom-left-radius: 0; + padding-right: 0.3em; +} + +body:not(.tag-default).tag-pill-outlined .tag:not(.token) { + color: var(--text-normal); + background-color: transparent !important; + border: var(--tag-border-width) solid; + padding: 0px 8px; +} + +a.tag, +.editor .cl-hashtag, +.cm-hashtag { + padding-top: 0.1em; + padding-bottom: 0.1em; +} +.is-live-preview a.tag { + line-height: 1.8; +} +body.tag-pill-outlined .tag:not(.token):nth-child(5n+1) { + border-color: var(--tag1); + color: var(--tag1); +} +body.tag-pill-outlined .tag:not(.token):nth-child(5n+2) { + border-color: var(--tag2); + color: var(--tag2); +} +body.tag-pill-outlined .tag:not(.token):nth-child(5n+3) { + border-color: var(--tag3); + color: var(--tag3); +} +body.tag-pill-outlined .tag:not(.token):nth-child(5n+4) { + border-color: var(--tag4); + color: var(--tag4); +} +body.tag-pill-outlined .tag:not(.token):nth-child(5n) { + border-color: var(--tag5); + color: var(--tag5); +} + +body.tag-pill-outlined .cm-s-obsidian span.cm-hashtag, +body.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin, +body.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-end, +body.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin+.cm-hashtag.cm-meta, +body.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin+.cm-hashtag.cm-meta+span.cm-hashtag.cm-meta.cm-hashtag-end { + color: var(--text-normal) !important; +} + +body.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+1), +body.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+1)+span.cm-hashtag, +body.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+1)+.cm-hashtag.cm-meta, +body.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+1)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end { + border: var(--tag-border-width) solid var(--tag1); + background-color: transparent !important; + color: var(--tag1) !important; +} + +body.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+2), +body.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+2)+span.cm-hashtag, +body.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+2)+.cm-hashtag.cm-meta, +body.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+2)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end { + border: var(--tag-border-width) solid var(--tag2); + background-color: transparent !important; + color: var(--tag2) !important; +} + +body.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+3), +body.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+3)+span.cm-hashtag, +body.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+3)+.cm-hashtag.cm-meta, +body.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+3)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end { + border: var(--tag-border-width) solid var(--tag3); + background-color: transparent !important; + color: var(--tag3) !important; +} + +body.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+4), +body.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+4)+span.cm-hashtag, +body.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+4)+.cm-hashtag.cm-meta, +body.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+4)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end { + border: var(--tag-border-width) solid var(--tag4); + background-color: transparent !important; + color: var(--tag4) !important; +} + +body.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n), +body.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n)+span.cm-hashtag, +body.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n)+.cm-hashtag.cm-meta, +body.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end { + border: var(--tag-border-width) solid var(--tag5); + background-color: transparent !important; + color: var(--tag5) !important; +} + + +body.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(n)+span.cm-hashtag:not([class*="-end"]), +body.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(n)+.cm-hashtag.cm-meta:not([class*="-end"]) { + border-left: none; + border-right: none; +} + +body.tag-pill-outlined .cm-s-obsidian span.cm-hashtag-begin:nth-child(n)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end { + border-left: none; +} + +body.tag-clear-style .tag:not(.token):nth-child(n) { + background-color: transparent; + border: none; + color: var(--text-accent); + text-decoration: underline; + padding: 0 2px; +} + +body.tag-clear-style .tag:not(.token):nth-child(n):hover { + background-color: var(--theme-color-translucent-015) !important; +} + +body.tag-clear-style .cm-s-obsidian span.cm-hashtag-begin, +body.tag-clear-style .cm-s-obsidian span.cm-hashtag-begin+.cm-hashtag.cm-meta, +body.tag-clear-style .cm-s-obsidian span.cm-hashtag-end, +body.tag-clear-style .cm-s-obsidian span.cm-hashtag-begin+span.cm-hashtag.cm-meta.cm-hashtag-end, +body.tag-clear-style .cm-s-obsidian span.cm-hashtag-begin+.cm-hashtag.cm-meta { + background-color: transparent; + border: none; + color: var(--text-accent) !important; + text-decoration: underline; + padding: 0; +} + +body.tag-clear-style .cm-s-obsidian span.cm-hashtag-begin+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end { + background-color: transparent; +} + +body:not(.tag-default) .cm-s-obsidian:not([class="markdown-source-view cm-s-obsidian mod-cm6"]) .cm-formatting.cm-formatting-hashtag.cm-hashtag.cm-hashtag-begin.cm-meta.cm-tag-dailynote, +body:not(.tag-default) .cm-s-obsidian:not([class="markdown-source-view cm-s-obsidian mod-cm6"]) .cm-formatting.cm-formatting-hashtag.cm-hashtag.cm-hashtag-begin.cm-meta.cm-tag-weeklynote, +body:not(.tag-default) .cm-s-obsidian:not([class="markdown-source-view cm-s-obsidian mod-cm6"]) .cm-formatting.cm-formatting-hashtag.cm-hashtag.cm-hashtag-begin.cm-meta.cm-tag-ideas, +body:not(.tag-default) .cm-s-obsidian:not([class="markdown-source-view cm-s-obsidian mod-cm6"]) .cm-formatting.cm-formatting-hashtag.cm-hashtag.cm-hashtag-begin.cm-meta.cm-tag-inprogress, +body:not(.tag-default) .cm-s-obsidian:not([class="markdown-source-view cm-s-obsidian mod-cm6"]) .cm-formatting.cm-formatting-hashtag.cm-hashtag.cm-hashtag-begin.cm-meta.cm-tag-important, +body:not(.tag-default) .cm-s-obsidian:not([class="markdown-source-view cm-s-obsidian mod-cm6"]) .cm-formatting.cm-formatting-hashtag.cm-hashtag.cm-hashtag-begin.cm-meta.cm-tag-questions, +body:not(.tag-default) .cm-s-obsidian:not([class="markdown-source-view cm-s-obsidian mod-cm6"]) .cm-formatting.cm-formatting-hashtag.cm-hashtag.cm-hashtag-begin.cm-meta.cm-tag-complete { + font-weight: 600; + font-family: var(--font-family-special-tag) !important; + display: inline; + color: var(--white) !important; +} + +body.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+1), +body.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+1)+span.cm-hashtag, +body.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+1)+.cm-hashtag.cm-meta, +body.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+1)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end { + background-color: var(--tag1); +} + +body.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+2), +body.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+2)+span.cm-hashtag, +body.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+2)+.cm-hashtag.cm-meta, +body.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+2)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end { + background-color: var(--tag2); +} + +body.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+3), +body.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+3)+span.cm-hashtag, +body.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+3)+.cm-hashtag.cm-meta, +body.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+3)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end { + background-color: var(--tag3); +} + +body.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+4), +body.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+4)+span.cm-hashtag, +body.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+4)+.cm-hashtag.cm-meta, +body.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n+4)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end { + background-color: var(--tag4); +} + +body.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n), +body.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n)+span.cm-hashtag, +body.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n)+.cm-hashtag.cm-meta, +body.colorful-tag-bt .cm-s-obsidian span.cm-hashtag-begin:nth-child(5n)+span.cm-hashtag.cm-meta+span.cm-hashtag.cm-hashtag-end { + background-color: var(--tag5); +} + + +/*special tags*/ +body.tag-pill-outlined .cm-s-obsidian:not([class="markdown-source-view cm-s-obsidian mod-cm6"]) span.cm-hashtag.cm-meta.cm-hashtag-end:is(.cm-tag-important,.cm-tag-complete,.cm-tag-ideas,.cm-tag-questions,.cm-tag-weeklynote,.cm-tag-dailynote,.cm-tag-inprogress):not(.cm-formatting-hashtag) { + border-top: var(--tag-border-width) solid var(--tag1); + border-bottom: var(--tag-border-width) solid var(--tag1); +} + +body:not(.tag-default) .tag[href ^="#important"]:not(.token) { + background-color: var(--stag1-bg) !important; + font-weight: 600; + font-family: var(--font-family-special-tag) !important; + color: var(--white) !important; + filter: hue-rotate(0) !important; +} + +body:not(.tag-default) .cm-s-obsidian:not([class="markdown-source-view cm-s-obsidian mod-cm6"]) span.cm-hashtag.cm-meta.cm-hashtag-end.cm-tag-important:not(.cm-formatting-hashtag) { + font-family: var(--font-family-special-tag) !important; + font-weight: 600; + background-color: var(--stag1-bg) !important; + color: var(--white) !important; + font-size: calc(var(--font-size-tag) - 0.3em); + filter: hue-rotate(0) !important; +} + +body:not(.tag-default) .tag[href^="#重要"]:not(.token) { + background-color: var(--stag1-bg) !important; + font-weight: 600; + font-family: Webdings, 'Microsoft YaHei'; + color: var(--white) !important; + filter: hue-rotate(0) !important; +} + +body:not(.tag-default) .tag[href^="#complete"]:not(.token) { + background-color: var(--stag3-bg) !important; + font-weight: 600; + font-family: var(--font-family-special-tag) !important; + color: var(--white) !important; + filter: hue-rotate(0) !important; +} + +body:not(.tag-default) .cm-s-obsidian:not([class="markdown-source-view cm-s-obsidian mod-cm6"]) span.cm-hashtag.cm-meta.cm-hashtag-end.cm-tag-complete:not(.cm-formatting-hashtag) { + font-family: var(--font-family-special-tag) !important; + font-weight: 600; + background-color: var(--stag3-bg) !important; + color: var(--white) !important; + font-size: 0.95em; + filter: hue-rotate(0) !important; +} + +body:not(.tag-default) .tag[href^="#完成"]:not(.token) { + background-color: var(--stag3-bg) !important; + font-family: Origin, 'Microsoft YaHei'; + font-weight: 600; + color: var(--white) !important; + filter: hue-rotate(0) !important; +} + +body:not(.tag-default) .tag[href ^="#inprogress"]:not(.token) { + background-color: var(--stag2-bg) !important; + font-weight: 600; + font-family: var(--font-family-special-tag) !important; + color: var(--white) !important; + filter: hue-rotate(0) !important; +} + +body:not(.tag-default) .cm-s-obsidian:not([class="markdown-source-view cm-s-obsidian mod-cm6"]) span.cm-hashtag.cm-meta.cm-hashtag-end.cm-tag-inprogress:not(.cm-formatting-hashtag) { + font-family: var(--font-family-special-tag) !important; + font-weight: 600; + background-color: var(--stag2-bg) !important; + color: var(--white) !important; + font-size: 0.95em; + filter: hue-rotate(0) !important; +} + +body:not(.tag-default) .tag[href ^="#进行中"]:not(.token) { + background-color: var(--stag2-bg) !important; + font-weight: 600; + font-family: Wingdings, 'Microsoft YaHei'; + color: var(--white) !important; + filter: hue-rotate(0) !important; +} + +body:not(.tag-default) .tag[href ^="#dailynote"]:not(.token) { + background-color: var(--tag-dailynote-bg) !important; + font-weight: 600; + font-family: var(--font-family-special-tag) !important; + color: var(--white) !important; + filter: hue-rotate(0) !important; +} + +body:not(.tag-default) .tag[href ^="#dailynote"]::after { + content: ' 🐈'; + font-size: var(--font-size-emoji-after-tag); +} + +body:not(.tag-default) .cm-s-obsidian:not([class="markdown-source-view cm-s-obsidian mod-cm6"]) span.cm-tag-dailynote:not(.cm-formatting-hashtag)::after { + content: ' 🐈'; +} + +body:not(.tag-default) .cm-s-obsidian:not([class="markdown-source-view cm-s-obsidian mod-cm6"]) span.cm-hashtag.cm-meta.cm-hashtag-end.cm-tag-dailynote:not(.cm-formatting-hashtag) { + font-family: var(--font-family-special-tag) !important; + font-weight: 600; + background-color: var(--tag-dailynote-bg) !important; + color: var(--white) !important; + font-size: 0.95em; + filter: hue-rotate(0) !important; +} + +body:not(.tag-default) .tag[href ^="#weeklynote"]:not(.token) { + background-color: var(--tag-weeklynote-bg) !important; + font-weight: 600; + font-family: var(--font-family-special-tag) !important; + color: var(--white) !important; + filter: hue-rotate(0) !important; +} + +body:not(.tag-default) .tag[href^="#weeklynote"]::after { + content: ' 🥑'; + font-size: var(--font-size-emoji-after-tag); +} + +body:not(.tag-default) .cm-s-obsidian:not([class="markdown-source-view cm-s-obsidian mod-cm6"]) span.cm-tag-weeklynote:not(.cm-formatting-hashtag)::after { + content: ' 🥑'; +} + +body:not(.tag-default) .cm-s-obsidian:not([class="markdown-source-view cm-s-obsidian mod-cm6"]) .cm-hashtag.cm-meta.cm-hashtag-end.cm-tag-weeklynote:not(.cm-formatting-hashtag) { + font-family: var(--font-family-special-tag) !important; + font-weight: 600; + background-color: var(--tag-weeklynote-bg) !important; + color: var(--white) !important; + font-size: 0.95em; + filter: hue-rotate(0) !important; +} + +body:not(.tag-default) .tag[href ^="#questions"]:not(.token) { + background-color: var(--tag-questions-bg) !important; + font-weight: 600; + font-family: var(--font-family-special-tag) !important; + color: var(--white) !important; + filter: hue-rotate(0) !important; +} + +body:not(.tag-default) .tag[href^="#questions"]::after { + content: ' ❓'; + font-size: var(--font-size-emoji-after-tag); +} + +body:not(.tag-default) .cm-s-obsidian:not([class="markdown-source-view cm-s-obsidian mod-cm6"]) span.cm-tag-questions:not(.cm-formatting-hashtag)::after { + content: ' ❓'; +} + +body:not(.tag-default) .cm-s-obsidian:not([class="markdown-source-view cm-s-obsidian mod-cm6"]) span.cm-hashtag.cm-meta.cm-hashtag-end.cm-tag-questions:not(.cm-formatting-hashtag) { + font-family: var(--font-family-special-tag) !important; + font-weight: 600; + background-color: var(--tag-questions-bg) !important; + color: var(--white) !important; + font-size: 0.95em; + filter: hue-rotate(0) !important; +} + +body:not(.tag-default) .tag[href ^="#ideas"]:not(.token) { + background-color: var(--tag-ideas-bg) !important; + font-weight: 600; + font-family: var(--font-family-special-tag) !important; + color: var(--white) !important; + filter: hue-rotate(0) !important; +} + +body:not(.tag-default) .tag[href^="#ideas"]::after { + content: ' 💡'; + font-size: var(--font-size-emoji-after-tag); +} + +body:not(.tag-default) .cm-s-obsidian:not([class="markdown-source-view cm-s-obsidian mod-cm6"]) span.cm-tag-ideas:not(.cm-formatting-hashtag)::after { + content: ' 💡'; +} + +body:not(.tag-default) .cm-s-obsidian:not([class="markdown-source-view cm-s-obsidian mod-cm6"]) span.cm-hashtag.cm-meta.cm-hashtag-end.cm-tag-ideas:not(.cm-formatting-hashtag) { + background-color: var(--tag-ideas-bg) !important; + font-family: var(--font-family-special-tag) !important; + font-weight: 600; + color: var(--white) !important; + font-size: 0.95em; +} + +body:not(.tag-default) .cm-s-obsidian:not([class="markdown-source-view cm-s-obsidian mod-cm6"]) .cm-formatting.cm-formatting-hashtag.cm-hashtag.cm-hashtag-begin.cm-meta.cm-tag-important { + background-color: var(--stag1-bg) !important; + filter: hue-rotate(0) !important; +} + +body:not(.tag-default) .cm-s-obsidian:not([class="markdown-source-view cm-s-obsidian mod-cm6"]) .cm-formatting.cm-formatting-hashtag.cm-hashtag.cm-hashtag-begin.cm-meta.cm-tag-weeklynote { + background-color: var(--tag-weeklynote-bg) !important; + filter: hue-rotate(0) !important; +} + +body:not(.tag-default) .cm-s-obsidian:not([class="markdown-source-view cm-s-obsidian mod-cm6"]) .cm-formatting.cm-formatting-hashtag.cm-hashtag.cm-hashtag-begin.cm-meta.cm-tag-dailynote { + background-color: var(--tag-dailynote-bg) !important; + filter: hue-rotate(0) !important; +} + +body:not(.tag-default) .cm-s-obsidian:not([class="markdown-source-view cm-s-obsidian mod-cm6"]) .cm-formatting.cm-formatting-hashtag.cm-hashtag.cm-hashtag-begin.cm-meta.cm-tag-ideas { + background-color: var(--tag-ideas-bg) !important; + filter: hue-rotate(0) !important; +} +body:not(.tag-default) .cm-s-obsidian:not([class="markdown-source-view cm-s-obsidian mod-cm6"]) .cm-formatting.cm-formatting-hashtag.cm-hashtag.cm-hashtag-begin.cm-meta.cm-tag-inprogress { + background-color: var(--stag2-bg) !important; + filter: hue-rotate(0) !important; +} + +body:not(.tag-default) .cm-s-obsidian:not([class="markdown-source-view cm-s-obsidian mod-cm6"]) .cm-formatting.cm-formatting-hashtag.cm-hashtag.cm-hashtag-begin.cm-meta.cm-tag-questions { + background-color: var(--tag-questions-bg) !important; + filter: hue-rotate(0) !important; +} +body:not(.tag-default) .cm-s-obsidian:not([class="markdown-source-view cm-s-obsidian mod-cm6"]) .cm-formatting.cm-formatting-hashtag.cm-hashtag.cm-hashtag-begin.cm-meta.cm-tag-complete { + background-color: var(--stag3-bg) !important; + filter: hue-rotate(0) !important; +} + +/*source mode*/ +div[class="markdown-source-view cm-s-obsidian mod-cm6"] span.cm-hashtag { + background-color: transparent !important; + color: var(--text-muted) !important; + text-decoration: underline; +} + +div[class="markdown-source-view cm-s-obsidian mod-cm6"] span.cm-hashtag, +div[class="markdown-source-view cm-s-obsidian mod-cm6"] span.cm-hashtag-begin, +div[class="markdown-source-view cm-s-obsidian mod-cm6"] span.cm-hashtag-end, +div[class="markdown-source-view cm-s-obsidian mod-cm6"] span.cm-hashtag-begin+.cm-hashtag.cm-meta { + padding: 0 !important; +} + +/*thanks to Klaas from Obsidian Members Group on discord*/ +/* Selection highlight */ +.suggestion-item.is-selected { + background-color: var(--theme-color-translucent-015); +} + +:is(.markdown-preview-view,.markdown-rendered):not([class*="kanban-plugin"]) { + position: relative; + overflow-y: auto; + overflow-wrap: break-word; + color: var(--text-normal); + user-select: text; +} + +/*edit mode font size*/ +pre.CodeMirror-line { + font-size: var(--font-size-edit-normal) !important; +} + +/*preview mode font size*/ +p { + font-size: var(--font-size-preview-normal); +} + +:is(.markdown-preview-view,.markdown-rendered) p { + margin-block-start: calc(var(--paragraph-spacing) * 1em); + margin-block-end: calc(var(--paragraph-spacing) * 1em); +} + + +:is(.markdown-preview-view,.markdown-rendered) :is(ol,ul) { + margin-block-start: calc((var(--paragraph-spacing) - 1) * 1em); + margin-block-end: calc((var(--paragraph-spacing) - 1) * 1em); +} +body.toggle-paragraph-spacing :is(.markdown-preview-view,.markdown-rendered) p>br { + content:" "; + margin-top: calc((var(--paragraph-spacing) - 1) * 1em); + display: block; +} + +body.toggle-left-aligned-content .markdown-source-view.mod-cm6.is-readable-line-width:not(.is-rtl) .cm-scroller > *:first-child { + margin-left: 0; +} + +body.toggle-left-aligned-content :is(.markdown-preview-view,.markdown-rendered).is-readable-line-width:not(.matrix) .markdown-preview-sizer, .markdown-source-view.is-readable-line-width:not(.matrix) .CodeMirror, :is(.markdown-preview-view,.markdown-rendered):not(.matrix) .is-readable-line-width :is(.markdown-preview-section,.markdown-rendered), :is(.markdown-preview-view,.markdown-rendered):not(.matrix) .is-readable-line-width :is(.markdown-preview-section,.markdown-rendered) > div, :is(.markdown-preview-view,.markdown-rendered).is-readable-line-width:not(.matrix) :is(.markdown-preview-section,.markdown-rendered) { + margin-left: 0; +} + +.markdown-source-view.mod-cm6 div.cm-line:not(.HyperMD-codeblock) { + padding-bottom: calc((var(--paragraph-spacing) - 1) * 1em) ; +} + +body.text-indentation-two-em .markdown-source-view.mod-cm6 div.cm-line:not(.HyperMD-header), +.markdown-source-view.mod-cm6.indent div.cm-line:not(.HyperMD-header) { + text-indent: 2em; +} + +body.text-indentation-two-em .markdown-source-view.mod-cm6 div.cm-line:not(.HyperMD-header) .cm-hmd-frontmatter:first-of-type, +.markdown-source-view.mod-cm6.indent div.cm-line:not(.HyperMD-header) .cm-hmd-frontmatter:first-of-type { + margin-left: -2em; +} +body.text-indentation-two-em .markdown-source-view.mod-cm6 div.has-banner.cm-line:not(.HyperMD-header) .cm-def.cm-hmd-frontmatter, +body.text-indentation-two-em .markdown-source-view.mod-cm6 div.has-banner.cm-line:not(.HyperMD-header) .collapse-indicator, +.markdown-source-view.mod-cm6.indent div.has-banner.cm-line:not(.HyperMD-header) .cm-def.cm-hmd-frontmatter, +.markdown-source-view.mod-cm6.indent div.has-banner.cm-line:not(.HyperMD-header) .collapse-indicator { + margin-left: 0; + left: -3em; +} + +body.text-indentation-two-em [data-type="markdown"] div[class="el-p"]:not(blockquote) > p, +[data-type="markdown"] :is(.markdown-preview-view,.markdown-rendered).indent div[class="el-p"]:not(blockquote) > p { + text-indent: 2em; +} + + +body.text-indentation-two-em [data-type="markdown"] div[class="el-p"]:not(blockquote) > p>br, +[data-type="markdown"] :is(.markdown-preview-view,.markdown-rendered).indent div[class="el-p"]:not(blockquote) > p>br { + content: ' '; + white-space: pre; + line-height: calc((var(--paragraph-spacing) + 0.3) * 1em); + display:unset; +} +body.text-indentation-two-em [data-type="markdown"] div[class="el-p"]:not(blockquote) > p>br::after, +[data-type="markdown"] :is(.markdown-preview-view,.markdown-rendered).indent div[class="el-p"]:not(blockquote) >p>br::after { + content: '\A\9\9'; +} + +body.justify-align div[data-type="markdown"] div.cm-line:not(.HyperMD-codeblock), +body.justify-align div[data-type="markdown"] :is(.markdown-preview-view,.markdown-rendered), +.markdown-source-view.text-justify div.cm-line:not(.HyperMD-codeblock), +:is(.markdown-preview-view,.markdown-rendered).text-justify { + text-align: justify; + hyphens: auto; +} + +/*edit mode blockquote font size*/ +.cm-s-obsidian span.cm-quote { + font-size: var(--font-size-edit-blockquote); +} + +.CodeMirror-code span.cm-formatting.cm-formatting-quote.cm-formatting-quote.cm-quote::before { + content: ""; + border-left: 7px solid var(--theme-color); + border-radius: 0; /*5px 0 0 5px;*/ + height: 100%; + margin-left: -7px; + position: absolute; +} + +.markdown-source-view.mod-cm6 .cm-blockquote-border { + border-color: var(--theme-color); +} + +.CodeMirror-line span.cm-formatting-quote + *::before, +.CodeMirror-line span.cm-formatting-quote + span.cm-hmd-indent-in-quote + span.cm-quote:not(.cm-formatting-quote)::before, +.CodeMirror-line span.cm-inline-code + *::before, +.CodeMirror-line span.cm-highlight + *::before, +.CodeMirror-line span.cm-quote + *::before, +.CodeMirror-line span.cm-hmd-html-end + *::before, +.CodeMirror-line span.cm-formatting-math + *::before { + border-left: none; +} + +/*Quote (> lorem ipsum ...) in edit mode with left border rendered instead of >*/ +div:not(.CodeMirror-activeline)>.CodeMirror-line span.cm-formatting-quote { + color: transparent !important; +} + +.CodeMirror-line span.cm-formatting-quote { + color: var(--red) !important; +} + +.HyperMD-quote.CodeMirror-line { + background-color: var(--background-blockquote); +} + +.cm-quote:not([class*="link"]):not([class*="string"]):not([class*="em"]):not([class*="strong"]) { + color: var(--text-normal); +} + +/* highlight */ +:is(.markdown-preview-view,.markdown-rendered) mark { + background-color: var(--text-highlight-bg); + padding: 1px 2px; + color: var(--text-highlight); + border-radius: var(--radius-xs); +} + +.cm-s-obsidian span.cm-highlight, +.cm-highlight.cm-quote { + color: var(--text-highlight); + padding: 2px 0 1px 0; +} + +body:not(.no-rounded-corners-highlight):not(.all-rounded-corners-highlight) .cm-s-obsidian .cm-widgetBuffer[aria-hidden="true"]+span.cm-highlight:has(+ .cm-widgetBuffer[aria-hidden="true"]) { + border-radius: 3px; + padding: 1px 2px; +} + +.cm-s-obsidian span.cm-formatting-highlight { + border-radius: 3px 0 0 3px; +} + +.cm-s-obsidian span[class="cm-highlight"]+span.cm-formatting-highlight, +.cm-s-obsidian span[class*="cm-highlight"][class*="cm-list"]+span.cm-formatting-highlight, +.cm-s-obsidian span[class*="cm-highlight"][class*="cm-quote"]+span.cm-formatting-highlight, +.cm-s-obsidian span[class*="cm-highlight"][class*="cm-header"]+span.cm-formatting-highlight, +.cm-s-obsidian span[class*="cm-highlight"][class*="cm-formatting-code"][class*="cm-inline-code"]+span.cm-formatting-highlight, +.cm-s-obsidian span[class*="cm-highlight"][class*="cm-formatting-link"]+span.cm-formatting-highlight, +.cm-s-obsidian span[class*="cm-highlight"][class*="cm-hmd-internal-link"]+span.cm-formatting-highlight, +.cm-s-obsidian span[class*="cm-highlight"][class*="cm-strong"]+span.cm-formatting-highlight, +.cm-s-obsidian span[class*="cm-highlight"][class*="cm-em"]+span.cm-formatting-highlight, +.cm-s-obsidian span[class*="cm-highlight"][class*="strikethrough"]+span.cm-formatting-highlight { + border-radius: 0 3px 3px 0; +} + +span.cm-formatting.cm-formatting-code.cm-highlight.cm-inline-code, +span.cm-highlight.cm-inline-code { + border-radius: 0; + padding: 2px 0 1px !important; +} + +.theme-dark .cm-formatting.cm-formatting-highlight.cm-strong.cm-em.cm-highlight { + background-image: initial; + background-clip: initial; + -webkit-background-clip: initial; + -webkit-text-fill-color: initial; + background-color: var(--text-highlight-bg); + color: var(--text-highlight); +} + +.CodeMirror-lines span.cm-strong.cm-em.cm-highlight { + padding: 0 1px 1px; +} + +/*cloze*/ +body:not(.remove-cloze-style) :is(.markdown-preview-view,.markdown-rendered) mark > del, +:is(.markdown-preview-view, +.markdown-rendered).cloze mark > del { + background-color: var(--cloze-bg-color); + color: var(--cloze-bg-color); + text-decoration: underline var(--cloze-decoration) var(--cloze-decoration-color); + border-radius:5px; + padding:2px; +} + +body:not(.remove-cloze-style) .cm-s-obsidian .cm-formatting.cm-formatting-highlight.cm-highlight~span.cm-formatting-strikethrough.cm-highlight.cm-strikethrough~span.cm-highlight.cm-strikethrough:not(.cm-em), +body:not(.remove-cloze-style) .cm-s-obsidian .cm-formatting.cm-formatting-highlight.cm-highlight~span.cm-formatting-strikethrough.cm-highlight.cm-strikethrough, +.markdown-source-view.cloze .cm-formatting.cm-formatting-highlight.cm-highlight~span.cm-formatting-strikethrough.cm-highlight.cm-strikethrough~span.cm-highlight.cm-strikethrough:not(.cm-em), +.markdown-source-view.cloze *:not([class*="cm-formatting-em"]).cm-formatting.cm-formatting-highlight.cm-highlight~span.cm-formatting-strikethrough.cm-highlight.cm-strikethrough { + text-decoration: underline var(--cloze-decoration) var(--cloze-decoration-color); + background-color: transparent !important; +} + +body:not(.remove-cloze-style) .cm-s-obsidian .cm-formatting.cm-formatting-highlight.cm-highlight~.cm-formatting.cm-formatting-strikethrough~span.cm-highlight.cm-strikethrough:not(.cm-em):hover, +.markdown-source-view.cloze .cm-formatting.cm-formatting-highlight.cm-highlight~.cm-formatting.cm-formatting-strikethrough~span.cm-highlight.cm-strikethrough:not(.cm-em):hover { + background-color: var(--text-highlight-bg); + color: var(--text-normal); + transition: all 400ms ease-in-out; +} + +body:not(.remove-cloze-style) :is(.markdown-preview-view, +.markdown-rendered) mark > del:hover, +:is(.markdown-preview-view, +.markdown-rendered).cloze mark > del:hover { + background-color: transparent; + color: var(--accent-strong); + transition: all 400ms ease-in-out; +} + +body:not(.remove-cloze-style) :is(.markdown-preview-view, +.markdown-rendered) em > mark > del, +:is(.markdown-preview-view, +.markdown-rendered).cloze em > mark > del { + color: transparent; + background-color: transparent; + padding: 0 2px; + text-decoration: underline var(--cloze-decoration-2) var(--cloze-decoration-color-2) !important; +} + +body:not(.remove-cloze-style) :is(.markdown-preview-view, +.markdown-rendered) em > mark > del:hover, +:is(.markdown-preview-view, +.markdown-rendered).cloze em > mark > del:hover { + cursor: pointer; + color: transparent; +} + +body:not(.remove-cloze-style) :is(.markdown-preview-view, +.markdown-rendered) em > mark > del:active, +:is(.markdown-preview-view, +.markdown-rendered).cloze em > mark > del:active { + color: var(--accent-strong); + background-color: transparent; + transition: all 400ms ease-in-out; +} + +body:not(.remove-cloze-style) .cm-s-obsidian .cm-em.cm-formatting.cm-formatting-em.cm-em.cm-formatting.cm-formatting-em~.cm-em.cm-formatting.cm-formatting-highlight.cm-highlight~.cm-em.cm-formatting.cm-formatting-strikethrough.cm-highlight.cm-strikethrough~span.cm-em.cm-highlight.cm-strikethrough:not([class*="formatting"]), +body:not(.remove-cloze-style) .cm-s-obsidian .cm-em.cm-formatting.cm-formatting-em.cm-em.cm-formatting.cm-formatting-em~.cm-em.cm-formatting.cm-formatting-highlight.cm-highlight~.cm-em.cm-formatting.cm-formatting-strikethrough.cm-highlight.cm-strikethrough:not([class*="formatting"]), +.markdown-source-view.cloze .cm-em.cm-formatting.cm-formatting-em.cm-em.cm-formatting.cm-formatting-em~.cm-em.cm-formatting.cm-formatting-highlight.cm-highlight~.cm-em.cm-formatting.cm-formatting-strikethrough.cm-highlight.cm-strikethrough~span.cm-em.cm-highlight.cm-strikethrough, +.markdown-source-view.cloze .cm-em.cm-formatting.cm-formatting-em.cm-em.cm-formatting.cm-formatting-em~.cm-em.cm-formatting.cm-formatting-highlight.cm-highlight~.cm-em.cm-formatting.cm-formatting-strikethrough.cm-highlight.cm-strikethrough { + color: var(--accent-strong) !important; + text-decoration: underline var(--cloze-decoration-2) var(--cloze-decoration-color-2) !important; +} +body:not(.remove-cloze-style) .cm-s-obsidian .cm-em.cm-formatting.cm-formatting-em.cm-em.cm-formatting.cm-formatting-em~.cm-em.cm-formatting.cm-formatting-highlight.cm-highlight~.cm-em.cm-formatting.cm-formatting-strikethrough.cm-highlight.cm-strikethrough~span.cm-em.cm-highlight.cm-strikethrough, +body:not(.remove-cloze-style) .cm-s-obsidian .cm-em.cm-formatting.cm-formatting-em.cm-em.cm-formatting.cm-formatting-em~.cm-em.cm-formatting.cm-formatting-highlight.cm-highlight~.cm-em.cm-formatting.cm-formatting-strikethrough.cm-highlight.cm-strikethrough{ + background-color: transparent !important; +} +body:not(.remove-cloze-style) .markdown-source-view:not([class*="cm5"]) .cm-em.cm-formatting.cm-formatting-em.cm-em.cm-formatting.cm-formatting-em~.cm-em.cm-formatting.cm-formatting-highlight.cm-highlight~.cm-em.cm-formatting.cm-formatting-strikethrough.cm-highlight.cm-strikethrough~span.cm-em.cm-highlight.cm-strikethrough~.cm-em.cm-formatting.cm-formatting-highlight.cm-highlight, +.markdown-source-view:not([class*="cm5"]).cloze .cm-em.cm-formatting.cm-formatting-em.cm-em.cm-formatting.cm-formatting-em~.cm-em.cm-formatting.cm-formatting-highlight.cm-highlight~.cm-em.cm-formatting.cm-formatting-strikethrough.cm-highlight.cm-strikethrough~span.cm-em.cm-highlight.cm-strikethrough~.cm-em.cm-formatting.cm-formatting-highlight.cm-highlight { + background-color: var(--bg-color-highlight-1) !important; + color: var(--color-highlight-1); + font-style: normal; +} + +body:not(.remove-cloze-style) :is(.markdown-preview-view, +.markdown-rendered) em > del, +:is(.markdown-preview-view, +.markdown-rendered).cloze em > del { + background-color: var(--cloze-bg-color-3); + color: var(--cloze-bg-color-3); + font-style: normal; + text-decoration: underline var(--cloze-decoration-3) var(--cloze-decoration-color-3); +} + +body:not(.remove-cloze-style) :is(.markdown-preview-view, +.markdown-rendered) em > del:hover, +:is(.markdown-preview-view, +.markdown-rendered).cloze em > del:hover { + background-color: transparent; + color: var(--text-normal); + transition: all 400ms ease-in-out; +} + +body:not(.remove-cloze-style) .markdown-source-view.is-live-preview .cm-em.cm-strikethrough, +.markdown-source-view.is-live-preview.cloze .cm-em.cm-strikethrough { + background-color: var(--cloze-bg-color-3); + color: var(--cloze-bg-color-3); + font-style: normal; + text-decoration: underline var(--cloze-decoration-3) var(--cloze-decoration-color-3); +} + +body:not(.remove-cloze-style) .markdown-source-view.is-live-preview .cm-em.cm-strikethrough:hover, +.markdown-source-view.is-live-preview.cloze .cm-em.cm-strikethrough:hover { + background-color: transparent !important; + color: var(--text-normal) !important; + transition: all 400ms ease-in-out; +} + +body:not(.remove-cloze-style) .cm-em.cm-formatting.cm-formatting-em~.cm-em.cm-formatting.cm-formatting-strikethrough.cm-strikethrough, +.markdown-source-view.cloze .cm-em.cm-formatting.cm-formatting-em~.cm-em.cm-formatting.cm-formatting-strikethrough.cm-strikethrough { + color: var(--accent-strong); + text-decoration: none; +} +body:not(.remove-cloze-style) .cm-em.cm-formatting.cm-formatting-em~.cm-em.cm-formatting.cm-formatting-strikethrough.cm-strikethrough~span.cm-em.cm-strikethrough:not([class*="formatting"]), +.markdown-source-view.cloze .cm-em.cm-formatting.cm-formatting-em~.cm-em.cm-formatting.cm-formatting-strikethrough.cm-strikethrough~span.cm-em.cm-strikethrough:not([class*="formatting"]) { + font-style: normal; + color: var(--accent-strong); + text-decoration: underline var(--cloze-decoration-3) var(--cloze-decoration-color-3); +} + +span.cm-strong.cm-em.cm-highlight { + background-image: initial; + background-clip: initial; + -webkit-background-clip: initial; + -webkit-text-fill-color: var(--strong-em-highlight-color); + background-color: var(--text-highlight-bg); +} + + + +/* body.default-icons .nav-folder.mod-root .nav-folder > .nav-folder-children { + margin: 0 0 0 16px; +} */ + +/* .nav-folder.mod-root .nav-folder > .nav-folder-children { + margin: 0 0 0 13px; +} */ + +.nav-folder.mod-root .nav-folder > .nav-folder-children:hover { + border-left-color: var(--theme-color-translucent-04); +} + +.view-header-title-container:after, +.view-header-title-container::before { + display: none; +} + +.workspace-leaf.mod-active .view-header-icon { + color: var(--interactive-accent); + cursor: grab; + position: relative; +} + +body.hide-titlebar-text .titlebar-text { + display: none +} + +.titlebar-left { + width: 30px; +} + +/*change color when hover*/ +.titlebar-button.mod-back:hover, +.titlebar-button.mod-forward:hover, +.titlebar-button.mod-maximize:hover, +.titlebar-button.mod-minimize:hover, +.workspace-ribbon-collapse-btn:hover { + color: var(--theme-color); +} + +.titlebar-button { + -webkit-app-region: no-drag; + padding: 0 9px; + cursor: pointer; + opacity: 0.8; +} + +.titlebar-button:hover { + opacity: 1; +} + +.workspace-tab-header-inner { + padding: 3px 9px; +} + +/*reduce space of header buttons*/ +body:not(.is-mobile) div.nav-header { + padding: 3px 2px; + line-height: 1; +} + +div.nav-buttons-container { + margin: 1px; +} + +.workspace-leaf-content[data-type='file-explorer'] .nav-buttons-container { + margin-right: 2px; + border-radius: var(--radius-s); +} + +input.search-input { + margin: -2px 0px -3px 0px; +} + +.nav-action-button { + margin: 0px 5px !important; +} + + +/*tag page button*/ +.nav-buttons-container>.nav-action-button, +.nav-buttons-container>.nav-action-button.is-active { + padding: 3px 2px 1px; +} + +.titlebar-text { + font-size: var(--font-size-obsidian-titlebar); + font-weight: 600; +} + +body:not(.is-focused) .titlebar-text { + opacity: 0.5; +} + +.side-dock-ribbon-tab:hover, +.side-dock-ribbon-action:hover { + color: var(--theme-color); +} + +.side-dock-settings { + margin-top: auto; + margin-bottom: 2px; +} + +.workspace-leaf-content[data-type="file-explorer"] .nav-folder.mod-root>.nav-folder-title { + padding-left: 5px; + font-size: var(--font-size-vault-name); + font-family: var(--font-family-vault); + font-weight: bolder; + text-shadow: 1px 1px 6px var(--theme-color-translucent-04); + cursor: default; +} + +.theme-dark .nav-folder.mod-root>.nav-folder-title { + color: var(--theme-color); + text-shadow: none; +} + +.theme-dark .nav-folder.mod-root>.nav-folder-title:hover { + background-color: var(--background-secondary-alt); + color: var(--text-muted); + opacity: 1; +} + +.theme-light .nav-folder.mod-root>.nav-folder-title:hover { + background-color: var(--background-secondary-alt); + text-shadow: 1px 1px 5px #ffffff7c; + color: var(--theme-color); + opacity: 1; +} + +/*=======search panel=======*/ +.search-result-file-title { + color: var(--search-result-file-title-color); +} + +.workspace-leaf-content[data-type="outgoing-link"] .search-result-file-match { + padding: 4px 10px; + left: 0; +} + +.backlink-pane .search-result-container { + margin-left: 3px; +} + +.search-result-file-matches { + border-bottom: none; + margin-bottom: 0; +} + +.tree-item-self.is-clickable:hover { + background-color: transparent; + color: var(--search-result-file-title-color); +} + +.tree-item-self.is-clickable.is-collapsed .tree-item-inner { + opacity: 0.6; +} + +.tag-container .tree-item-self.tag-pane-tag.is-clickable:hover { + background-color: var(--theme-color-translucent-015); + color: var(--text-normal); +} + +.outline .tree-item-self.is-clickable:hover { + background-color: var(--theme-color-translucent-015); + color: var(--text-normal); +} +.outline .tree-item-self { + font-size: var(--font-size-outline); +} + +.search-result-file-match:hover { + background-color: var(--background-secondary-alt); + color: var(--text-normal); +} + +span.search-result-file-matched-text { + color: var(--search-text); + background-color: var(--search-result-file-matched-bg); + opacity: 0.8; +} + +.is-flashing { + background-color: var(--search-result-file-matched-bg); +} + +/* background of search result */ +.search-result { + border-radius: var(--radius-s); + margin: 0 0 0 1px; +} + +.tree-item.search-result .tree-item-self.search-result-file-title.is-clickable { + padding-left: 15px; +} + +span.obsidian-search-match-highlight { + background-color: var(--text-search-highlight-bg) !important; +} + +.search-result-file-match:after { + display: none; +} + +.search-input { + display: block; + margin: 0 auto 10px auto; + width: calc(100% - 20px); +} + +.nav-action-button>svg { + width: 17px; + height: 17px; +} + +/*code box unfold icon*/ +.CodeMirror-foldgutter-open.CodeMirror-guttermarker-subtle::after { + color: var(--text-accent); +} + +.CodeMirror-gutter.CodeMirror-linenumbers, +.CodeMirror-gutter.CodeMirror-foldgutter { + background-color: transparent; +} + +/*checkbox*/ +span.cm-formatting-task.cm-property { + color: var(--text-accent); +} + +:is(.markdown-preview-view,.markdown-rendered,.markdown-reading-view) .task-list-item-checkbox { + top: 0.25em; +} + +/* +.markdown-source-view.mod-cm6 .task-list-label .task-list-item-checkbox { + margin-left: -1.5px; + margin-top: 0px; + margin-bottom: 2px; + margin-right:3px; + vertical-align: middle; + top: 0; +} +.markdown-source-view.mod-cm6 .cm-formatting-list-ol ~ .task-list-label .task-list-item-checkbox { + margin-left: 3px; +} +*/ +input[type=checkbox] { + -webkit-appearance: none; + appearance: none; + border-radius: var(--radius-xs); + border: 1px solid var(--background-modifier-border-checkbox); + padding: 0; + margin: 0 2px 2px 0; + width: var(--checkbox-size); + height: var(--checkbox-size); +} +input[type=checkbox]:hover { + border: 1px solid var(--theme-color); +} + +ul > li.task-list-item.is-checked, +.markdown-source-view.mod-cm6 .HyperMD-task-line[data-task] { + text-decoration: none; +} + +body.toggle-checked-decoration .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task="x"], +body.toggle-checked-decoration .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task="X"], +body.toggle-checked-decoration ul > li.task-list-item[data-task="x"], +body.toggle-checked-decoration ul > li.task-list-item[data-task="X"] { + text-decoration: var(--checklist-done-decoration); +} + +.task-list-item-checkbox { + filter: hue-rotate(0); +} + +input[type=checkbox]:checked:after { + display: none; +} + +.is-flashing input[type=checkbox]:checked, +input[type=checkbox]:checked { + border-radius: var(--radius-xs); + border: none; + background-repeat: no-repeat; + background-position: center; + background-size: 120%; + background-image: url('data:image/svg+xml; utf8, '); + background-color: var(--checkbox-color-0); +} + +body:not(.unmute-checkbox-animation) .is-flashing input.task-list-item-checkbox[type=checkbox]:checked:hover, +body:not(.unmute-checkbox-animation) input.task-list-item-checkbox[type=checkbox]:checked:hover { + animation: tada 1s; + filter: hue-rotate(160deg) !important; +} + + +/* SVG Plane-right; bujo: task-migrated/waiting */ +input[data-task=">"]:checked, +li[data-task=">"]>input:checked, +li[data-task=">"]>p>input:checked { + background-color: var(--checkbox-color-1); + background-image: url('data:image/svg+xml; utf8, '); +} +:is(.markdown-preview-view,.markdown-rendered) ul.contains-task-list li.task-list-item.is-checked[data-task=">"], +:is(.markdown-preview-view,.markdown-rendered) ol.contains-task-list li.task-list-item.is-checked[data-task=">"], +.markdown-source-view.is-live-preview input.task-list-item-checkbox[data-task=">"] { + text-decoration: none !important; + color: var(--text-normal); +} +/* SVG Plane-left; bujo: task-scheduled/delegated */ +input[data-task="<"]:checked, +li[data-task="<"]>input:checked, +li[data-task="<"]>p>input:checked { + background-color: var(--checkbox-color-2); + background-image: url('data:image/svg+xml; utf8, '); +} +input[data-task="?"]:checked, +li[data-task="?"]>input:checked, +li[data-task="?"]>p>input:checked { + background-color: var(--checkbox-color-3); + background-image: url('data:image/svg+xml; utf8, '); +} + +input[data-task="!"]:checked, +li[data-task="!"]>input:checked, +li[data-task="!"]>p>input:checked { + background-color: var(--checkbox-color-4); + background-image: url('data:image/svg+xml; utf8, '); +} + +input[data-task="+"]:checked, +li[data-task="+"]>input:checked, +li[data-task="+"]>p>input:checked { + background-color: var(--checkbox-color-5); + background-image: url('data:image/svg+xml; utf8, '); +} +input[data-task="-"]:checked, +li[data-task="-"]>input:checked, +li[data-task="-"]>p>input:checked { + background-color: var(--checkbox-color-6); + background-image: url('data:image/svg+xml; utf8, '); +} + +ul > li[data-task="-"].task-list-item.is-checked, .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task="-"] { + text-decoration: line-through !important; +} + +body.extend-checkbox-list input[data-task="“"]:checked, +body.extend-checkbox-list li[data-task="“"]>input:checked, +body.extend-checkbox-list li[data-task="“"]>p>input:checked { + background-color: transparent; + background-image: url('data:image/svg+xml; utf8, '); +} + +body.extend-checkbox-list input[data-task="…"]:checked, +body.extend-checkbox-list li[data-task="…"]>input:checked, +body.extend-checkbox-list li[data-task="…"]>p>input:checked { + background-color: transparent; + background-image: url('data:image/svg+xml; utf8, '); +} + +body.extend-checkbox-list input[data-task="/"]:checked, +body.extend-checkbox-list li[data-task="/"]>input:checked, +body.extend-checkbox-list li[data-task="/"]>p>input:checked { + background-color: transparent; + background-image: url('data:image/svg+xml; utf8, '); +} + +body.extend-checkbox-list input[data-task="."]:checked, +body.extend-checkbox-list li[data-task="."]>input:checked, +body.extend-checkbox-list li[data-task="."]>p>input:checked { + background-color: transparent; + background-image: url('data:image/svg+xml; utf8, '); +} + +body.extend-checkbox-list input[data-task="d"]:checked, +body.extend-checkbox-list li[data-task="d"]>input:checked, +body.extend-checkbox-list li[data-task="d"]>p>input:checked { + background-color: transparent; + background-image: url('data:image/svg+xml; utf8, '); +} + +body.extend-checkbox-list input[data-task="u"]:checked, +body.extend-checkbox-list li[data-task="u"]>input:checked, +body.extend-checkbox-list li[data-task="u"]>p>input:checked { + background-color: transparent; + background-image: url('data:image/svg+xml; utf8, '); +} + + +body.extend-checkbox-list input[data-task="A"]:checked, +body.extend-checkbox-list li[data-task="A"]>input:checked, +body.extend-checkbox-list li[data-task="A"]>p>input:checked { + background-color: transparent; + background-image: url('data:image/svg+xml; utf8, '); +} + +body.extend-checkbox-list input[data-task="D"]:checked, +body.extend-checkbox-list li[data-task="D"]>input:checked, +body.extend-checkbox-list li[data-task="D"]>p>input:checked { + background-color: transparent; + background-image: url('data:image/svg+xml; utf8, '); +} + +body.extend-checkbox-list input:is([data-task="¥"],[data-task="$"]):checked, +body.extend-checkbox-list li:is([data-task="¥"],[data-task="$"])>input:checked, +body.extend-checkbox-list li:is([data-task="¥"],[data-task="$"])>p>input:checked { + background-color: transparent; + background-image: url('data:image/svg+xml; utf8, '); +} + +body.extend-checkbox-list input[data-task="*"]:checked, +body.extend-checkbox-list li[data-task="*"]>input:checked, +body.extend-checkbox-list li[data-task="*"]>p>input:checked { + background-color: transparent; + background-image: url('data:image/svg+xml; utf8, '); +} + +@keyframes fade-left { + 0% {-webkit-transform: translateX(-10px); transform: translateX(-10px); opacity: 0;} + 75% {-webkit-transform: translateX(0); transform: translateX(0); opacity: 1;} +} + +@keyframes tada { + from {-webkit-transform: scale3d(1, 1, 1); transform: scale3d(1, 1, 1);} + 10%, + 20% {-webkit-transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg);transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg);} + 30%, + 50%, + 70%, + 90% {-webkit-transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg);transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg);} + 40%, + 60%, + 80% {-webkit-transform: rotate3d(0, 0, 1, -10deg); transform: rotate3d(0, 0, 1, -10deg);} + to {-webkit-transform: scale3d(1, 1, 1); transform: scale3d(1, 1, 1);} +} + +body.circular-checkbox input[type=checkbox] { + border-radius: 50%; +} + +/* headers */ +/*编辑状态是否显示H1 H2标记*/ +/*适配Live preview模式*/ +body.clutter-free-headings div:not(.cm-active).cm-line span:not(.cm-formatting-header):not(.cm-hashtag):not(.cm-inline-code):not(.cm-highlight).cm-header::before { + font-size: 0.6rem; + width: auto; + margin-right: 1px; + border-radius: var(--radius-xs); + color: var(--text-muted); + overflow: visible; + font-family: var(--font-interface); + font-weight: normal !important; +} + +body.clutter-free-headings div.mod-cm6.is-live-preview div:not(.cm-active).cm-line .cm-header ~ span.cm-header::before, +body.clutter-free-headings div.mod-cm6.is-live-preview div:not(.cm-active).cm-line .cm-header.cm-hmd-internal-link::before { + display: none; +} + +body.clutter-free-headings div:not(.cm-active).cm-line span:not(.cm-formatting-header).cm-header-1::before { + content: 'H1'; + margin-top: calc(var(--h1-size) - 0.1em); +} + +body.clutter-free-headings div:not(.cm-active).cm-line span:not(.cm-formatting-header).cm-header-2::before { + content: 'H2'; + margin-top: calc(var(--h2-size) - 0.2em); +} + +body.clutter-free-headings div:not(.cm-active).cm-line span:not(.cm-formatting-header).cm-header-3::before { + content: 'H3'; + margin-top: calc(var(--h3-size) - 0.2em); +} +body.clutter-free-headings div:not(.cm-active).cm-line span:not(.cm-formatting-header).cm-header-4::before { + content: 'H4'; + margin-top: calc(var(--h4-size) - 0.3em); +} + +body.clutter-free-headings div:not(.cm-active).cm-line span:not(.cm-formatting-header).cm-header-5::before { + content: 'H5'; + margin-top: calc(var(--h5-size) - 0.4em); +} + +body.clutter-free-headings div:not(.cm-active).cm-line span:not(.cm-formatting-header).cm-header-6::before { + content: 'H6'; + margin-top: calc(var(--h6-size) - 0.4em); +} + +/*适配source mode 模式*/ +body.clutter-free-headings div.mod-cm6:not(.is-live-preview) div:not(.cm-active).cm-line span:not(.cm-formatting-header).cm-header ~ span.cm-header::before { + display: none; +} +body.clutter-free-headings div.mod-cm6:not(.is-live-preview) div:not(.cm-active).cm-line span.cm-formatting-header { + display:none; +} +/*适配传统模式*/ +body.clutter-free-headings div:not(.CodeMirror-activeline)>.CodeMirror-line.hmd-inactive-line span.cm-formatting-header::before { + position: absolute; + margin-top: 10px; + font-size: 0.7rem; + width: auto; + margin-left: -18px; + padding: 0px 2px; + border-radius: var(--radius-xs); + color: var(--text-muted); + overflow: visible; + font-family: var(--font-default); + font-weight: normal !important; +} +body.clutter-free-headings div:not(.CodeMirror-activeline)>.CodeMirror-line:not(.hmd-inactive-line) span.cm-formatting-header::before { + position: absolute; + margin-top: 10px; + font-size: 0.7rem; + width: auto; + margin-left: -6px; + border-radius: var(--radius-xs); + color: var(--text-muted); + overflow: visible; + font-family: var(--font-default); + font-weight: normal !important; +} + +body.clutter-free-headings div:not(.CodeMirror-activeline)>.CodeMirror-line span.cm-formatting-header { + color: transparent !important; + background: none; +} + +body.clutter-free-headings div:not(.CodeMirror-activeline)>.CodeMirror-line span.cm-formatting-header-1::before { + content: 'H1'; +} +body.clutter-free-headings div:not(.CodeMirror-activeline)>.CodeMirror-line span.cm-formatting-header-2::before { + content: 'H2'; +} +body.clutter-free-headings div:not(.CodeMirror-activeline)>.CodeMirror-line span.cm-formatting-header-3::before { + content: 'H3'; +} +body.clutter-free-headings div:not(.CodeMirror-activeline)>.CodeMirror-line span.cm-formatting-header-4::before { + content: 'H4'; +} +body.clutter-free-headings div:not(.CodeMirror-activeline)>.CodeMirror-line span.cm-formatting-header-5::before { + content: 'H5'; +} +body.clutter-free-headings div:not(.CodeMirror-activeline)>.CodeMirror-line span.cm-formatting-header-6::before { + content: 'H6'; +} + +body.h1-toggle-underline :is(.markdown-preview-view,.markdown-rendered) h1, +body.h1-toggle-underline .markdown-source-view.is-live-preview .HyperMD-header.HyperMD-header-1.cm-line { + border-bottom: var(--h1-underline-width, 2px) var(--h1-underline-style, solid) var(--h1-underline-color, var(--h1-color)); +} +body.h2-toggle-underline :is(.markdown-preview-view,.markdown-rendered) h2, +body.h2-toggle-underline .markdown-source-view.is-live-preview .HyperMD-header.HyperMD-header-2.cm-line { + border-bottom: var(--h2-underline-width, 1px) var(--h2-underline-style, solid) var(--h2-underline-color, var(--h2-color)); +} +body.h3-toggle-underline :is(.markdown-preview-view,.markdown-rendered) h3, +body.h3-toggle-underline .markdown-source-view.is-live-preview .HyperMD-header.HyperMD-header-3.cm-line { + border-bottom: var(--h3-underline-width, 1px) var(--h3-underline-style, solid) var(--h3-underline-color, var(--h3-color)); +} +body.h4-toggle-underline :is(.markdown-preview-view,.markdown-rendered) h4, +body.h4-toggle-underline .markdown-source-view.is-live-preview .HyperMD-header.HyperMD-header-4.cm-line { + border-bottom: var(--h4-underline-width, 1px) var(--h4-underline-style, solid) var(--h4-underline-color, var(--h4-color)); +} +body.h5-toggle-underline :is(.markdown-preview-view,.markdown-rendered) h5, +body.h5-toggle-underline .markdown-source-view.is-live-preview .HyperMD-header.HyperMD-header-5.cm-line { + border-bottom: var(--h5-underline-width, 1px) var(--h5-underline-style, solid) var(--h5-underline-color, var(--h5-color)); +} +body.h6-toggle-underline :is(.markdown-preview-view,.markdown-rendered) h6, +body.h6-toggle-underline .markdown-source-view.is-live-preview .HyperMD-header.HyperMD-header-6.cm-line { + border-bottom: var(--h6-underline-width, 1px) var(--h6-underline-style, solid) var(--h6-underline-color, var(--h6-color)); +} + +body.inline-title-toggle-underline .inline-title { + border-bottom: var(--inline-title-underline-width, 2px) var(--inline-title-underline-style, solid) var(--inline-title-underline-color, var(--h1-color)); +} + +body.h1-toggle-short-underline :is(.markdown-preview-view,.markdown-rendered) h1, +body.h2-toggle-short-underline :is(.markdown-preview-view,.markdown-rendered) h2, +body.h3-toggle-short-underline :is(.markdown-preview-view,.markdown-rendered) h3, +body.h4-toggle-short-underline :is(.markdown-preview-view,.markdown-rendered) h4, +body.h5-toggle-short-underline :is(.markdown-preview-view,.markdown-rendered) h5, +body.h6-toggle-short-underline :is(.markdown-preview-view,.markdown-rendered) h6, +body.h1-toggle-short-underline .markdown-source-view.is-live-preview .HyperMD-header.HyperMD-header-1.cm-line, +body.h2-toggle-short-underline .markdown-source-view.is-live-preview .HyperMD-header.HyperMD-header-2.cm-line, +body.h3-toggle-short-underline .markdown-source-view.is-live-preview .HyperMD-header.HyperMD-header-3.cm-line, +body.h4-toggle-short-underline .markdown-source-view.is-live-preview .HyperMD-header.HyperMD-header-4.cm-line, +body.h5-toggle-short-underline .markdown-source-view.is-live-preview .HyperMD-header.HyperMD-header-5.cm-line, +body.h6-toggle-short-underline .markdown-source-view.is-live-preview .HyperMD-header.HyperMD-header-6.cm-line, +body.inline-title-toggle-short-underline .inline-title { + text-decoration: underline; +} + +body.header-1-background .cm-header-1, +body.header-1-background :is(.markdown-preview-view,.markdown-rendered) h1 { + background-color: var(--h1-bg-color); +} +body.header-2-background .cm-header-2, +body.header-2-background :is(.markdown-preview-view,.markdown-rendered) h2 { + background-color: var(--h2-bg-color); +} +body.header-3-background .cm-header-3, +body.header-3-background :is(.markdown-preview-view,.markdown-rendered) h3 { + background-color: var(--h3-bg-color); +} +body.header-4-background .cm-header-4, +body.header-4-background :is(.markdown-preview-view,.markdown-rendered) h4 { + background-color: var(--h4-bg-color); +} +body.header-5-background .cm-header-5, +body.header-5-background :is(.markdown-preview-view,.markdown-rendered) h5 { + background-color: var(--h5-bg-color); +} +body.header-6-background .cm-header-6, +body.header-6-background :is(.markdown-preview-view,.markdown-rendered) h6 { + background-color: var(--h6-bg-color); +} + +body.toggle-inline-title-background .inline-title { + background: no-repeat center/100% var(--inline-title-bg-url) var(--inline-title-bg-color); +} + +.cm-contentContainer :is(.cm-header-1,.cm-header-2,.cm-header-3,.cm-header-4) { + line-height: calc(var(--paragraph-spacing) + 0.5); +} + +body.h1-text-align-center .HyperMD-header.HyperMD-header-1.cm-line, +body.h2-text-align-center .HyperMD-header.HyperMD-header-2.cm-line, +body.h3-text-align-center .HyperMD-header.HyperMD-header-3.cm-line, +body.h4-text-align-center .HyperMD-header.HyperMD-header-4.cm-line, +body.h5-text-align-center .HyperMD-header.HyperMD-header-5.cm-line, +body.h6-text-align-center .HyperMD-header.HyperMD-header-6.cm-line, +body.h1-text-align-center :is(.markdown-preview-view,.markdown-rendered) h1, +body.h2-text-align-center :is(.markdown-preview-view,.markdown-rendered) h2, +body.h3-text-align-center :is(.markdown-preview-view,.markdown-rendered) h3, +body.h4-text-align-center :is(.markdown-preview-view,.markdown-rendered) h4, +body.h5-text-align-center :is(.markdown-preview-view,.markdown-rendered) h5, +body.h6-text-align-center :is(.markdown-preview-view,.markdown-rendered) h6, +body.inline-title-text-align-center .inline-title { + text-align: center; +} +body.h1-text-align-end .HyperMD-header.HyperMD-header-1.cm-line, +body.h2-text-align-end .HyperMD-header.HyperMD-header-2.cm-line, +body.h3-text-align-end .HyperMD-header.HyperMD-header-3.cm-line, +body.h4-text-align-end .HyperMD-header.HyperMD-header-4.cm-line, +body.h5-text-align-end .HyperMD-header.HyperMD-header-5.cm-line, +body.h6-text-align-end .HyperMD-header.HyperMD-header-6.cm-line, +body.h1-text-align-end :is(.markdown-preview-view,.markdown-rendered) h1, +body.h2-text-align-end :is(.markdown-preview-view,.markdown-rendered) h2, +body.h3-text-align-end :is(.markdown-preview-view,.markdown-rendered) h3, +body.h4-text-align-end :is(.markdown-preview-view,.markdown-rendered) h4, +body.h5-text-align-end :is(.markdown-preview-view,.markdown-rendered) h5, +body.h6-text-align-end :is(.markdown-preview-view,.markdown-rendered) h6, +body.inline-title-text-align-end .inline-title { + text-align: end; +} + +body.retain-header-color :is(.markdown-preview-view,.markdown-rendered) :is(h1,h2,h3,h4,h5,h6) em, +body.retain-header-color :is(.markdown-preview-view,.markdown-rendered) :is(h1,h2,h3,h4,h5,h6) strong, +body.retain-header-color :is(.markdown-preview-view,.markdown-rendered) :is(h1,h2,h3,h4,h5,h6) strong em, +body.retain-header-color .cm-s-obsidian .cm-header[class*="cm-em"], +body.retain-header-color .cm-s-obsidian .cm-header[class*="cm-strong"] { + background-image: initial; + background-clip: initial; + -webkit-background-clip: initial; + -webkit-text-fill-color: initial; + background-color: initial; +} +body.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h1 em, +body.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h1 strong, +body.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h1 strong em, +body.retain-header-color .cm-s-obsidian .cm-header.cm-header-1[class*="cm-em"], +body.retain-header-color .cm-s-obsidian .cm-header.cm-header-1[class*="cm-strong"] { + color: var(--h1-color) !important; + font-family: var(--h1-font) !important; +} +body.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h2 em, +body.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h2 strong, +body.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h2 strong em, +body.retain-header-color .cm-s-obsidian .cm-header.cm-header-2[class*="cm-em"], +body.retain-header-color .cm-s-obsidian .cm-header.cm-header-2[class*="cm-strong"] { + color: var(--h2-color) !important; + font-family: var(--h2-font) !important; +} +body.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h3 em, +body.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h3 strong, +body.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h3 strong em, +body.retain-header-color .cm-s-obsidian .cm-header.cm-header-3[class*="cm-em"], +body.retain-header-color .cm-s-obsidian .cm-header.cm-header-3[class*="cm-strong"] { + color: var(--h3-color) !important; + font-family: var(--h3-font) !important; +} +body.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h4 em, +body.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h4 strong, +body.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h4 strong em, +body.retain-header-color .cm-s-obsidian .cm-header.cm-header-4[class*="cm-em"], +body.retain-header-color .cm-s-obsidian .cm-header.cm-header-4[class*="cm-strong"] { + color: var(--h4-color) !important; + font-family: var(--h4-font) !important; +} +body.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h5 em, +body.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h5 strong, +body.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h5 strong em, +body.retain-header-color .cm-s-obsidian .cm-header.cm-header-5[class*="cm-em"], +body.retain-header-color .cm-s-obsidian .cm-header.cm-header-5[class*="cm-strong"] { + color: var(--h5-color) !important; + font-family: var(--h5-font) !important; +} +body.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h6 em, +body.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h6 strong, +body.retain-header-color :is(.markdown-preview-view,.markdown-rendered) h6 strong em, +body.retain-header-color .cm-s-obsidian .cm-header.cm-header-6[class*="cm-em"], +body.retain-header-color .cm-s-obsidian .cm-header.cm-header-6[class*="cm-strong"] { + color: var(--h6-color) !important; + font-family: var(--h6-font) !important; +} + +:is(.markdown-preview-section,.markdown-rendered):not(:first-child) :is(h1,h2,h3,h4,h5) { + margin-top: 13px !important; +} + +:is(.markdown-preview-section,.markdown-rendered):not(:first-child) h6 { + margin-top: 0 !important; + margin-bottom: 0 !important; +} + +/*preview Header hover*/ +/* adapted from Obsidian-Typora-Vue https://github.com/ZekunC/Obsidian-Typora-Vue-Theme */ +:is(.markdown-preview-view,.markdown-rendered) :is(h1,h2,h3,h4,h5,h6) { + position: relative; +} +body:not(.remove-heading-indicator) :is(.markdown-preview-view,.markdown-rendered) h1:hover::before { + content: 'H1'; + position: absolute; + font-size: 0.7rem; + width: auto; + margin-left: -24px; + border: 1px solid; + padding: 0px 2px; + border-radius: var(--radius-xs); + top: 25px; +} +body:not(.remove-heading-indicator) :is(.markdown-preview-view,.markdown-rendered) h2:hover::before { + content: 'H2'; + position: absolute; + font-size: 0.7rem; + width: auto; + margin-left: -25px; + border: 1px solid; + padding: 0px 2px; + border-radius: var(--radius-xs); + top: 23px; +} +body:not(.remove-heading-indicator) :is(.markdown-preview-view,.markdown-rendered) h3:hover::before { + content: 'H3'; + position: absolute; + font-size: 0.65rem; + width: auto; + margin-left: -25px; + border: 1px solid; + padding: 0px 2px; + border-radius: var(--radius-xs); + top: 22px; +} +body:not(.remove-heading-indicator) :is(.markdown-preview-view,.markdown-rendered) h4:hover::before { + content: 'H4'; + position: absolute; + font-size: 0.6rem; + width: auto; + margin-left: -25px; + border: 1px solid; + padding: 0px 2px; + border-radius: var(--radius-xs); + top: 22px; +} +body:not(.remove-heading-indicator) :is(.markdown-preview-view,.markdown-rendered) h5:hover::before { + content: 'H5'; + position: absolute; + font-size: 0.6rem; + width: auto; + margin-left: -25px; + border: 1px solid; + padding: 0px 2px; + border-radius: var(--radius-xs); + top: 22px; +} +body:not(.remove-heading-indicator) :is(.markdown-preview-view,.markdown-rendered) h6:hover::before { + content: 'H6'; + position: absolute; + font-size: 0.6rem; + width: auto; + margin-left: -25px; + border: 1px solid; + padding: 0px 2px; + border-radius: var(--radius-xs); + top: 22px; +} + +/*---*/ +.markdown-rendered hr { + border-color: var(--background-modifier-border-hr); +} + +/* inspired by Obsidianite */ +body.fancy-hr-icon .markdown-rendered hr { + overflow: initial; + margin-block-start: 2.5em; + margin-block-end: 2.5em; + border: none; + height: 0; + min-height: 0.7em; + border-bottom: 2px solid; + border-image-slice: 1; + border-width: 2px; + border-image: linear-gradient(to right, transparent 0%, var(--hr-color-icon-1) 30%, var(--hr-color-icon-2) 46%, transparent 46%, transparent 54%, var(--hr-color-icon-3) 54%, var(--hr-color-icon-4) 70%, transparent 100%) 1; +} + +body.fancy-hr-icon .markdown-rendered hr::after { + content: var(--fancy-hr-icon); + display: inline-block; + position: relative; + left: 50%; + font-size: 1em; + transform: translate(-50%, -0.35em) rotate(var(--fancy-hr-rotate)); + transform-origin: 50% 50%; + padding: 0.3rem; + color: var(--theme-color); +} + +body.fancy-hr-icon div:not(.CodeMirror-activeline) > .CodeMirror-line span.cm-hr { + opacity: 0; + position: relative; +} + +body.fancy-hr-icon div > .CodeMirror-line span.cm-hr { + display: inline-block; +} + +body.fancy-hr-icon div:not(.CodeMirror-activeline) > .CodeMirror-line.HyperMD-hr::before { + position: absolute; + content: ''; + width: 100%; + height: 2px; + border-image: linear-gradient(to right, transparent 0%, var(--hr-color-icon-1) 30%, var(--hr-color-icon-2) 46%, transparent 46%, transparent 54%, var(--hr-color-icon-3) 54%, var(--hr-color-icon-4) 70%, transparent 100%) 1; + left: 0; + top: 50%; +} + +body.fancy-hr-icon div:not(.CodeMirror-activeline) > .CodeMirror-line.HyperMD-hr::after { + content: var(--fancy-hr-icon); + display: inline-block; + position: absolute; + left: 50%; + top: 50%; + font-size: 1em; + transform: translate(-50%, -50%) rotate(var(--fancy-hr-rotate)); + transform-origin: 50% 50%; + padding: 0.5rem; + color: var(--theme-color); +} + +body.fancy-hr-icon .cm-s-obsidian hr { + border-image: linear-gradient(to right, transparent 0%, var(--hr-color-icon-1) 30%, var(--hr-color-icon-2) 46%, transparent 46%, transparent 54%, var(--hr-color-icon-3) 54%, var(--hr-color-icon-4) 70%, transparent 100%) 1; + border-width: 2px; +} + +body.fancy-hr-icon .markdown-source-view.mod-cm6 .hr::after { + content: var(--fancy-hr-icon); + display: inline-block; + position: absolute; + font-size: 1em; + left: 50%; + top: 50%; + transform: translate(-50%, -50%) rotate(var(--fancy-hr-rotate)); + transform-origin: 50% 50%; + padding: 0.5rem; + color: var(--theme-color); +} + +body.fancy-hr-no-icon .cm-s-obsidian hr { + border-image: linear-gradient(to right, transparent 0%, var(--hr-color-1) 20%, var(--hr-color-2) 40%, var(--hr-color-3) 60%, var(--hr-color-4) 80%, transparent 100%) 1; + border-width: 2px; +} + +body.fancy-hr-no-icon .markdown-rendered hr { + margin-block-start: 2.5em; + margin-block-end: 2.5em; + border: none; + height: 0; + border-bottom: 2px solid; + border-width: 2px; + border-image: linear-gradient(to right, transparent 0%, var(--hr-color-1) 20%, var(--hr-color-2) 40%, var(--hr-color-3) 60%, var(--hr-color-4) 80%, transparent 100%) 1; +} + +body.fancy-hr-no-icon div:not(.CodeMirror-activeline) > .CodeMirror-line.HyperMD-hr::before { + position: absolute; + content: ''; + width: 100%; + height: 2px; + background-image: linear-gradient(to right, transparent 0%, var(--hr-color-1) 20%, var(--hr-color-2) 40%, var(--hr-color-3) 60%, var(--hr-color-4) 80%, transparent 100%); + left: 0; + top: 50%; +} + +body.fancy-hr-number .markdown-rendered { + counter-reset: fancyhrno; +} + +body.fancy-hr-number .markdown-rendered hr { + overflow: initial; + margin-block-start: 2.5em; + margin-block-end: 2.5em; + border: none; + height: 0; + min-height: 0.7em; + border-bottom: 2px solid; + border-image-slice: 1; + border-width: 2px; + border-image-source: linear-gradient(to right, transparent 0%, var(--hr-color-numbers-line-1) 30%, var(--hr-color-numbers-line-2) 46%, transparent 46%, transparent 54%, var(--hr-color-numbers-line-3) 54%, var(--hr-color-numbers-line-4) 70%, transparent 100%); + counter-increment: fancyhrno; +} + +body.fancy-hr-number .markdown-rendered hr::after { + content: counter(fancyhrno); + display: inline-block; + font-family: var(--font-monospace-theme); + font-weight: bold; + position: relative; + left: 50%; + transform: translate(-50%, -0.2em); + color: var(--hr-color-numbers-color); + background: var(--hr-color-numbers-bg-color); + border-radius: 50%; + padding: 0 0.44em 0 0.5em; +} + +body.fancy-hr-number.hollow-number .markdown-rendered hr::after, +body.fancy-hr-number.hollow-number .markdown-source-view.mod-cm6 hr::after, +body.fancy-hr-number.hollow-number .markdown-source-view div:not(.CodeMirror-activeline) > .HyperMD-hr.CodeMirror-line::after { + -webkit-text-fill-color: var(--hr-numbers-text-fill); + -webkit-text-stroke: 1px var(--hr-numbers-text-stroke); + font-family: var(--font-text-theme); +} + +body.fancy-hr-number div:not(.CodeMirror-activeline) > .CodeMirror-line span.cm-hr { + opacity: 0; + position: relative; +} + +body.fancy-hr-number div > .CodeMirror-line span.cm-hr { + display: inline-block; +} + +body.fancy-hr-number .markdown-source-view { + counter-reset: fancyhrno1; +} + +body.fancy-hr-number .markdown-source-view div:not(.CodeMirror-activeline) > .HyperMD-hr.CodeMirror-line::before { + position: absolute; + content: ''; + width: 100%; + height: 2px; + background-image: linear-gradient(to right, transparent 0%, var(--hr-color-numbers-line-1) 30%, var(--hr-color-numbers-line-2) 46%, transparent 46%, transparent 54%, var(--hr-color-numbers-line-3) 54%, var(--hr-color-numbers-line-4) 70%, transparent 100%); + left: 0; + top: 50%; + counter-increment: fancyhrno1; +} + +body.fancy-hr-number .markdown-source-view div:not(.CodeMirror-activeline) > .HyperMD-hr.CodeMirror-line::after { + content: counter(fancyhrno1); + display: inline-block; + font-family: var(--font-monospace-theme); + font-weight: bold; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + color: var(--hr-color-numbers-color); + background: var(--hr-color-numbers-bg-color); + border-radius: 50%; + padding: 0 0.44em 0 0.5em; +} + +body.fancy-hr-number .cm-s-obsidian hr { + border-image: linear-gradient(to right, transparent 0%, var(--hr-color-numbers-line-1) 30%, var(--hr-color-numbers-line-2) 46%, transparent 46%, transparent 54%, var(--hr-color-numbers-line-3) 54%, var(--hr-color-numbers-line-4) 70%, transparent 100%) 1; + border-width: 2px; + counter-increment: fancyhrno; +} + +body.fancy-hr-number .markdown-source-view.mod-cm6 { + counter-reset: fancyhrno; +} + +body.fancy-hr-number .markdown-source-view.mod-cm6 .hr::after { + left: 50%; + top: 50%; + content: counter(fancyhrno); + display: inline-block; + font-family: var(--font-monospace-theme); + font-weight: bold; + position: absolute; + transform: translate(-50%, -50%); + color: var(--hr-color-numbers-color); + background: var(--hr-color-numbers-bg-color); + border-radius: 50%; + padding: 0 0.45em 0 0.5em; +} + +.nav-files-container { + padding: 0 3px 10px; +} + +/* blockquote */ +:is(.markdown-preview-view,.markdown-rendered) blockquote { + padding: 0.5em 0.5em 0.5em 0.6em; + border-right-width: 0; + border-left: solid; + border-top-width: 0; + border-bottom-width: 0; + border-left-width: 5px; + border-color: var(--theme-color); + background-color: var(--background-blockquote); + border-radius: var(--radius-s); + margin-inline-start: 2.5%; + margin-inline-end: 2.5%; +} + +:is(.markdown-preview-view,.markdown-rendered) blockquote p { + margin-left: 1px; + margin-right: 0; + font-size: var(--font-size-preview-blockquote); +} + +body:not(.font-family-change-to-default) :is(.markdown-preview-view,.markdown-rendered), +body:not(.font-family-change-to-default) .markdown-source-view.mod-cm6 .cm-scroller, +body:not(.font-family-change-to-default) .markdown-source-view { + font-family: var(--font-text); +} + +/* preview page */ +:is(.markdown-preview-view,.markdown-rendered).is-readable-line-width :is(.markdown-preview-section,.markdown-rendered), +.markdown-source-view.is-readable-line-width .CodeMirror, +:is(.markdown-preview-view,.markdown-rendered).is-readable-line-width .markdown-preview-sizer, +:is(.markdown-preview-view,.markdown-rendered) :is(.markdown-preview-section,.markdown-rendered), +.markdown-source-view .CodeMirror, +:is(.markdown-preview-view,.markdown-rendered) .markdown-preview-sizer, +.markdown-source-view.mod-cm6 .cm-scroller, +.cm-s-obsidian.is-folding.is-readable-line-width .markdown-reading-view { + line-height: var(--line-height-main); + letter-spacing: calc(var(--letter-space-main) * 0.03em); + /*text-align: var();*/ + -webkit-font-smoothing: subpixel-antialiased; +} + +:is(.markdown-preview-view,.markdown-rendered).is-readable-line-width:not(.matrix) .markdown-preview-sizer, +.markdown-source-view.is-readable-line-width:not(.matrix) .CodeMirror, +:is(.markdown-preview-view,.markdown-rendered):not(.matrix) .is-readable-line-width :is(.markdown-preview-section,.markdown-rendered), +:is(.markdown-preview-view,.markdown-rendered):not(.matrix) .is-readable-line-width :is(.markdown-preview-section,.markdown-rendered) > div, +:is(.markdown-preview-view,.markdown-rendered).is-readable-line-width:not(.matrix) :is(.markdown-preview-section,.markdown-rendered) { + width: var(--file-line-width); + max-width: 100%; + margin: 0 auto; +} + +.markdown-source-view.mod-cm6.is-readable-line-width:not(.is-rtl) .cm-contentContainer { + max-width: var(--file-line-width); +} + +.markdown-source-view.mod-cm6.is-readable-line-width:not(.is-rtl) .cm-content { +/* width: var(--file-line-width); + max-width: 100%; */ + margin: 0 auto; +} + +.markdown-source-view.mod-cm6.is-line-wrap.is-readable-line-width .cm-line:not(.HyperMD-table-row) { + max-width: 100%; +} + +body:not(.default-split-style) .workspace>.workspace-split:not(.mod-root) .CodeMirror, +body:not(.default-split-style) .workspace>.workspace-split:not(.mod-root) .cm-scroller, +body:not(.default-split-style) .workspace>.workspace-split:not(.mod-root) .markdown-preview-sizer { + line-height: var(--line-height-split); + font-size: var(--font-size-split); +} +body:not(.default-split-style) .workspace>.workspace-split:not(.mod-root) :is(.markdown-preview-view,.markdown-rendered) { + padding: 7px 9px 7px 19px; +} +body:not(.default-split-style) .workspace>.workspace-split:not(.mod-root) .cm-scroller { + padding: 7px 10px 7px 30px; +} +body:not(.default-split-style) .workspace>.workspace-split:not(.mod-root) .cm-gutters { + padding-right: 10px; +} +body:not(.default-split-style) .workspace>.workspace-split:not(.mod-root) .cm-lineNumbers .cm-gutterElement { + padding: 0; +} + +/* code */ +.cm-s-obsidian .hmd-fold-html-stub, +.cm-s-obsidian .hmd-fold-code-stub, +.cm-s-obsidian.CodeMirror .HyperMD-hover > .HyperMD-hover-content code, +body:not(.tag-default) .cm-s-obsidian .cm-formatting-hashtag, +.cm-s-obsidian .cm-inline-code, +.cm-s-obsidian .HyperMD-codeblock, +.cm-s-obsidian .HyperMD-hr, +.cm-s-obsidian .cm-hmd-frontmatter, +.cm-s-obsidian .cm-hmd-orgmode-markup, +.cm-s-obsidian .cm-formatting-code, +.cm-s-obsidian .cm-math, +.cm-s-obsidian span.hmd-fold-math-placeholder, +.cm-s-obsidian .CodeMirror-linewidget kbd, +.cm-s-obsidian .hmd-fold-html kbd { + font-family: var(--font-monospace); +} +.is-live-preview .admonition-content .math-block>mjx-container { + padding: 0.3em 0; +} + +.math.math-block mjx-container[jax='CHTML'] { + outline: none; + font-size: var(--font-size-latex); +} + +.markdown-source-view mjx-math, +:is(.markdown-preview-view,.markdown-rendered) :not(:is(h1,h2,h3,h4,h5,h6))>.math>mjx-container>mjx-math { + color: var(--mjx-inline-math-color); +} +.markdown-source-view .cm-header-1 ~ .math mjx-math { + color: var(--h1-color); +} +.markdown-source-view .cm-header-2 ~ .math mjx-math { + color: var(--h2-color); +} +.markdown-source-view .cm-header-3 ~ .math mjx-math { + color: var(--h3-color); +} +.markdown-source-view .cm-header-4 ~ .math mjx-math { + color: var(--h4-color); +} +.markdown-source-view .cm-header-5 ~ .math mjx-math { + color: var(--h5-color); +} +.markdown-source-view .cm-header-6 ~ .math mjx-math { + color: var(--h6-color); +} + +div.math.math-block mjx-math{ + color: var(--mjx-math-color); +} + +.cm-s-obsidian pre.HyperMD-codeblock, +:is(.markdown-preview-view,.markdown-rendered) code, +.markdown-rendered code { + color: var(--text-color-code); + font-size: var(--font-size-code) !important; + font-family: var(--font-monospace); + text-align: start; +} +.cm-s-obsidian span.cm-math:not(.cm-formatting-math-begin):not(.cm-formatting-math-end) { + font-size: var(--font-size-code) !important; + font-family: var(--font-monospace); + text-align: start; +} + +.cm-s-obsidian .cm-widgetBuffer[aria-hidden="true"]+.cm-inline-code:has(+ .cm-widgetBuffer[aria-hidden="true"]) { + border-radius: var(--radius-s); + padding: 2px 2px 1px; +} + +.cm-s-obsidian div.HyperMD-codeblock-bg { + border-left: none; + border-right: none; + border-top: none; +} + +:is(.markdown-preview-view,.markdown-rendered) pre { + background-color: var(--background-code); + padding: 1em 1.5em; +} + +:is(.markdown-preview-view,.markdown-rendered) code { + vertical-align: auto; + background-color: var(--background-code-2) ; +} + +:is(.markdown-preview-view,.markdown-rendered) pre code { + background-color: transparent !important; + color:var(--code-normal); +} + +.cm-s-obsidian span.cm-inline-code:not(.cm-formatting):not(.cm-hmd-indented-code):not(.obsidian-search-match-highlight), +.cm-formatting.cm-formatting-code.cm-inline-code { + color: var(--text-color-code); + background-color: var(--background-code-2); +} + +.cm-s-obsidian .cm-inline-code.cm-strong { + color: var(--text-color-code) !important; +} + +/*******codebox settings*******/ +/* ================================== */ +/* ===== editor syntax highlight ==== */ +/* ================================== */ +body.theme-dark { + --code-tag: var(--red); +} +body { + --code-selection-background: var(--text-selection); + --code-selection-color: var(--code-normal); + --code-type: var(--code-function); + --code-qualifier: var(--aqua); + --code-property: var(--blue); + --code-value: var(--green); + --code-tag: var( --purple); + --code-operator: var(--code-property); + --code-hr: var(--code-punctuation); + --code-string-2: var(--code-string); + --code-language: var(--text-muted); + --code-attribute: var(--code-function); + --code-atom: var(--orange-1); + --code-comment: var(--darkgreen); +} + + +:root, +.code-theme-custom { + /* material: palenight theme */ + --code-keyword: #c792ea; + --code-atom: #f78c6c; + --code-number: #ff5370; + --code-type: #decb6b; + --code-def: #82aaff; + --code-property: #c792ea; + --code-variable: #f07178; + --code-variable-2: #53ada3; + --code-variable-3: #e7852fe7; + --code-definition: #82aaff; + --code-callee: #89ddff; + --code-qualifier: #decb6b; + --code-operator: #89ddff; + --code-hr: #98e342; + --code-link: #696d70; + --code-error-bg: #ff5370; + --code-header: #da7dae; + --code-builtin: #ffcb6b; + --code-meta: #ffcb6b; + --code-matching-bracket: #ffffff; + --code-tag: #ff5370; + --code-tag-in-comment: #ff5370; + --code-string-2: #f07178; + --code-bracket: #ff5370; + --code-comment: #676e95; + --code-string: #c3e88d; + --code-attribute: #c792ea; + --code-attribute-in-comment: #c792ea; + --background-code: #292d3e; + --code-normal: #d4d4d4; +} +.theme-light, +.theme-dark { + --code-active-line-background-color: var(--activeline-background); +} + +.code-theme-custom { + --code-active-line-background-color: #353a50c2; +} + +body.theme-light.code-theme-material-palenight, +body.theme-dark.code-theme-material-palenight { + /* material: palenight theme */ + --code-keyword: #c792ea; + --code-atom: #f78c6c; + --code-number: #ff5370; + --code-type: #decb6b; + --code-def: #82aaff; + --code-property: #c792ea; + --code-variable: #f07178; + --code-variable-2: #eeffff; + --code-variable-3: #f07178; + --code-definition: #82aaff; + --code-callee: #89ddff; + --code-qualifier: #decb6b; + --code-operator: #89ddff; + --code-hr: #98e342; + --code-link: #696d70; + --code-error-bg: #ff5370; + --code-header: #da7dae; + --code-builtin: #ffcb6b; + --code-meta: #ffcb6b; + --code-matching-bracket: #ffffff; + --code-tag: #ff5370; + --code-tag-in-comment: #ff5370; + --code-string-2: #f07178; + --code-bracket: #ff5370; + --code-comment: #676e95; + --code-string: #c3e88d; + --code-attribute: #c792ea; + --code-attribute-in-comment: #c792ea; + --background-code: #292d3eba; + --code-active-line-background-color: #353a50; + --code-normal: #d4d4d4; +} + +body.theme-light.code-theme-solarized-light, +body.theme-dark.code-theme-solarized-light { + /* solarized */ + --code-keyword: #cb4b16; + --code-atom: #d33682; + --code-number: #d33682; + --code-type: #6c71c4; + --code-def: #2aa198; + --code-property: #2aa198; + --code-variable: #839496; + --code-variable-2: #b58900; + --code-variable-3: #6c71c4; + --code-function: var(--code-def) ; + --code-definition: #82aaff; + --code-callee: #89ddff; + --code-qualifier: #b58900; + --code-operator: #6c71c4; + --code-hr: #98e342; + --code-link: #93a1a1; + --code-error-bg: #ff5370; + --code-header: #586e75; + --code-builtin: #d33682; + --code-meta: #859900; + --code-matching-bracket: #859900; + --code-tag: #93a1a1; + --code-tag-in-comment: #ff5370; + --code-string-2: #b58900; + --code-bracket: #cb4b16; + --code-comment: #586e75; + --code-string: #859900; + --code-attribute: #2aa198; + --code-attribute-in-comment: #c792ea; + --background-code: #fdf6e3e1; + --code-active-line-background-color: #fffcf4; + --code-normal: #657b83; +} + +body.theme-dark.code-theme-bt-default { + --background-code: #1111118c; + --code-variable: var(--red) ; + --code-normal: #ebdbb2; + --code-comment: var(--darkgreen) ; + --code-function: var(--light-yellow) ; + --code-important: var(--darkblue); + --code-keyword: var(--darkblue);; + --code-operator: #a89984; + --code-property: var(--blue) ; + --code-punctuation: var(--gray-2) ; + --code-string: var(--green) ; + --code-tag: var(--red) ; + --code-value: var(--green) ; + --code-string-2:var(--yellow) ; + --code-active-line-background-color: #111111eb; +} +body.theme-light.code-theme-bt-default { + --code-keyword:var(--blue-green); + --code-tag: var(--purple); + --code-function: var(--red); + --code-important: var(--blue-green); + --code-active-line-background-color: var(--activeline-background); + --code-string-2: var(--orange-1); + --code-variable-2: var(--light-purple); + --code-meta: var(--text-faint); +} + +body.code-theme-Gruvbox-dark { + --code-selection-color: #fbf1c7; + --code-selection-background: #7c6f6456; + --code-active-line-background-color: #533c3cee; + --background-code: #1d2021c6; + --code-variable: var(--code-property); + --code-normal: #ebdbb2; + --code-comment: #a89984; + --code-function: #fabd2f; + --code-important: #fb4934; + --code-keyword: #fb4934; + --code-operator: #a89984; + --code-property: #fb4934; + --code-punctuation: #a89984; + --code-string: #b8bb26; + --code-tag: #fabd2f; + --code-value: #d3869b; + --code-meta:var(--code-comment); +} + +body.theme-light.code-theme-dracula { + --background-code: #e6e6e671; + --code-normal: var(--tex-normal); + --code-string: var(--orange) ; + --code-string-2: var(--orange-1) ; + --code-variable: var(--blue-green); + --code-variable-2: var(--light-purple) ; + --code-meta: var(--text-faint); + --code-active-line-background-color:#dee1b9a5; +} +body.code-theme-dracula { + --background-code: #282a36c0; + --code-normal: #f8f8f2; + --code-comment: #6272a4; + --code-string: #f1fa8c; + --code-string-2: #ffb86c;; + --code-number: #bd93f9; + --code-variable: #50fa7b; + --code-variable-2: #ffffff; + --code-def: #50fa7b; + --code-operator: #8be9fd; + --code-keyword: #ff79c6; + --code-atom: #bd93f9; + --code-meta: #f8f8f2; + --code-tag: #ff79c6; + --code-attribute: #50fa7b; + --code-qualifier: #50fa7b; + --code-property: #66d9ef; + --code-builtin: #50fa7b; + --code-variable-3: #dc8e3b; + --code-type: #ffb86c; + --code-active-line-background-color: #414458; + --code-matchingbracket: #fffff; +} +body.theme-light.code-theme-monokai { + --code-comment: #aca47a; +} +body.code-theme-monokai { + --background-code: #272822d9; + --code-normal: #F8F8F2; + --code-keyword:#F92772; + --code-value: #AE81FF; + --code-string-2:#E6DB74; + --code-comment: #75715E; + --code-active-line-background-color: #17013f9f; +} +body.code-theme-sublime { + --code-operator: #9a6e3a; + --code-variable: #5180de; + --code-keyword: #EA5E66; + --code-string: #40bf31; + --code-function: #F9AE58; + --code-string-2: #F9AE58; + --code-type: #F9AE58; + --code-def: #F9AE58; +} + + +.cm-s-obsidian span.cm-variable { + color: var(--code-variable); +} +.cm-s-obsidian span.cm-variable-2 { + color: var(--code-variable-2); +} + +.cm-s-obsidian span.cm-variable-3 { + color: var(---code-variable-3); +} +.token.class, +.token.class-name { + color: var(--code-string-2) ; +} + +span.cm-variable + .cm-hmd-codeblock + span.cm-variable { + color: var(--code-variable-2); +} + +span.cm-variable + .cm-hmd-codeblock + span.cm-variable + .cm-hmd-codeblock + span.cm-variable { + color: var(--code-variable-3); +} +span.cm-type { + color: var(--code-keyword); +} +span.cm-def { + color:var(--code-function); +} +.cm-type { + color: var(--code-type); +} +.token.atrule, +.token.attr-value, +.cm-property, +.cm-attribute { + color: var(--code-attribute); +} + +.cm-qualifier { + color: var(--code-qualifier); +} + +.cm-operator { + color:var(--code-operator); +} + +.cm-hr { + color: var(--code-hr); +} +.cm-string-2 { + color: var(--code-string-2); +} + +.cm-s-obsidian .cm-hmd-frontmatter.cm-atom, +.cm-s-obsidian .cm-templater-command.cm-atom, +.cm-s-obsidian .cm-math.cm-atom, +.cm-s-obsidian .HyperMD-codeblock .cm-atom, +.markdown-preview-view pre.cm-s-obsidian .cm-atom { + color: var(--code-atom); +} + +.cm-s-obsidian .cm-hmd-frontmatter.cm-meta, +.cm-s-obsidian .cm-templater-command.cm-meta, +.cm-s-obsidian .cm-math.cm-meta, +.cm-s-obsidian .HyperMD-codeblock .cm-meta, +.markdown-preview-view pre.cm-s-obsidian .cm-meta { + color: var(--code-meta); +} + +.cm-s-obsidian .cm-hmd-frontmatter.cm-builtin, +.cm-s-obsidian .cm-templater-command.cm-builtin, +.cm-s-obsidian .cm-math.cm-builtin, +.cm-s-obsidian .HyperMD-codeblock .cm-builtin, +.markdown-preview-view pre.cm-s-obsidian .cm-builtin, +.markdown-preview-view pre code span.builtin { + color: var(--code-builtin); +} + + +.markdown-preview-view pre code span.class { + color: var(--code-qualifier); +} + +.markdown-preview-view pre code span.function { + color: var(--code-function); +} + +.markdown-preview-view pre code span.punctuation { + color: var(--code-punctuation); +} + +.markdown-preview-view pre code span.operator { + color: var(--code-operator); + background: transparent; +} + +.markdown-preview-view pre code span.entity { + color: var(--code-attribute); +} + +.markdown-preview-view pre code span.parameter { + color: var(--code-property); +} + +.markdown-preview-view pre code span.property { + color: var(--code-property); +} + +.markdown-preview-view pre code span.important { + color: var(--code-important); +} + +.markdown-preview-view pre code span.attr-name { + color: var(--code-tag); +} + +.markdown-preview-view pre code span.attr-value { + color: var(--code-string); +} + +.markdown-preview-view pre code span.builtin { + color: var(--code-builtin); +} + +.markdown-preview-view pre code span.unit { + color: var(--code-value); +} + +.markdown-preview-view span.token.macro-name { + color: var(--code-important); +} + +span.token.directive-hash { + color: var(--code-tag); +} +.cm-s-obsidian span.cm-comment { + color: var(--code-comment); +} + +.muted-code-activeline-bg .markdown-source-view.cm-s-obsidian.mod-cm6 .cm-active.cm-line.HyperMD-codeblock-bg { + background-color: var(--background-code) !important; +} +.muted-code-activeline-bg .markdown-source-view.cm-s-obsidian.mod-cm6 .cm-active.cm-line.HyperMD-codeblock-bg::before { + background-color: unset !important; +} +.markdown-source-view.cm-s-obsidian.mod-cm6 .cm-active.cm-line.HyperMD-codeblock-bg::before { + display: none; +} +.markdown-source-view.cm-s-obsidian.mod-cm6 .cm-active.cm-line.HyperMD-codeblock-bg { + background-color: var(--code-active-line-background-color) !important; + --text-selection:var(--code-selection-background); + z-index: -1; +} + +pre code[class*="language-"] { + padding: 1em 0.5em; +} +pre[class*="language-"]::selection, +pre[class*="language-"] ::selection, +code[class*="language-"]::selection, +code[class*="language-"] ::selection { + color: var(--code-selection-color); + background: var(--code-active-line-background-color); +} + +/*Advanced Codeblock */ +.HyperMD-codeblock.HyperMD-codeblock-bg.cm-line span.live-preview-codeblock-line-nums { + margin-left: -1.5em; +} + +.code-line-number .HyperMD-codeblock-begin { + counter-reset: line-numbers; +} + +.code-line-number .HyperMD-codeblock.cm-line:not(.HyperMD-codeblock-begin):not(.HyperMD-codeblock-end) { + padding-left: 3em; + position: relative; +} + +.code-line-number .HyperMD-codeblock.cm-line:not(.HyperMD-codeblock-begin):not(.HyperMD-codeblock-end)::after { + align-items: flex-start; + color: var(--text-faint); + content: counter(line-numbers); + counter-increment: line-numbers; + display: flex; + font-size: 0.8em; + height: 100%; + justify-content: flex-end; + left: 0; + position: absolute; + text-align: right; + width: 2em; + padding-right: 0.5em; + bottom: -2px; + border-right: 1px solid var(--scrollbar-thumb-bg); +} + +.code-line-number .HyperMD-codeblock.cm-line.cm-active:not(.HyperMD-codeblock-begin):not(.HyperMD-codeblock-end)::after { + color: var(--color-accent); +} + +.code-line-number .HyperMD-codeblock .cm-foldPlaceholder::before { + display: none; +} + + +/* ================================== */ +.cm-s-obsidian .cm-hmd-frontmatter.cm-qualifier, +.cm-s-obsidian .cm-math.cm-qualifier, +.cm-s-obsidian .cm-qualifier { + color: var(--yellow) ; +} + +.cm-s-obsidian pre.HyperMD-codeblock .cm-qualifier { + color: var(--code-qualifier) ; +} + +.cm-s-obsidian .cm-hmd-frontmatter.cm-property, +.cm-s-obsidian .cm-math.cm-property, +.cm-s-obsidian pre.HyperMD-codeblock .cm-property { + color: var(--code-property) ; +} + +.cm-s-obsidian .cm-math.cm-atom, +.cm-s-obsidian pre.HyperMD-codeblock .cm-atom { + color: var(--text-normal) ; +} + +.cm-s-obsidian .cm-hmd-frontmatter.cm-number, +.cm-s-obsidian .cm-math.cm-number, +.cm-s-obsidian pre.HyperMD-codeblock .cm-number { + color: var(--code-value) ; +} + +.cm-s-obsidian .cm-hmd-frontmatter.cm-comment, +.cm-s-obsidian .cm-math.cm-comment, +.cm-s-obsidian pre.HyperMD-codeblock .cm-comment { + color: var(--code-comment) ; +} + +.theme-dark .cm-s-obsidian .cm-hmd-frontmatter.cm-tag, +.theme-dark .cm-s-obsidian .cm-math.cm-tag, +.theme-dark .cm-s-obsidian pre.HyperMD-codeblock .cm-tag { + color: var(--code-tag) ; +} + +.theme-light .cm-s-obsidian .cm-hmd-frontmatter.cm-tag, +.theme-light .cm-s-obsidian .cm-math.cm-tag, +.theme-light .cm-s-obsidian pre.HyperMD-codeblock .cm-tag { + color: var(--code-tag) ; +} + +.cm-atom.cm-hmd-frontmatter { + color: var(--code-atom) ; +} + +.cm-meta.cm-hmd-frontmatter { + color: var(--code-meta) ; +} +.token.punctuation, +.cm-punctuation, +.cm-bracket { + color: var(--code-punctuation) !important ; +} + +.theme-dark .cm-s-obsidian span.cm-keyword { + font-weight: 600 ; +} + + +/*inline code*/ +.cm-s-obsidian.mod-cm6 .HyperMD-codeblock span.cm-inline-code { + display: inline-block; + padding: unset; +} + +.cm-s-obsidian span.cm-formatting-code.cm-inline-code { + color: var(--text-muted); + border-radius: 3px 0 0 3px; +} + +.cm-s-obsidian span[class="cm-inline-code"]+span.cm-formatting-code.cm-inline-code, +.cm-s-obsidian span[class*="cm-inline-code"][class*="cm-list"]+span.cm-formatting-code.cm-inline-code, +.cm-s-obsidian span[class*="cm-inline-code"][class*="cm-quote"]+span.cm-formatting-code.cm-inline-code, +.cm-s-obsidian span[class*="cm-inline-code"][class*="cm-header"]+span.cm-formatting-code.cm-inline-code, +.cm-s-obsidian span[class*="cm-inline-code"][class*="cm-em"]+span.cm-formatting-code.cm-inline-code, +.cm-s-obsidian span[class*="cm-inline-code"][class*="cm-strong"]+span.cm-formatting-code.cm-inline-code { + color: var(--text-muted); + border-radius: 0 3px 3px 0; +} + +.cm-formatting.cm-formatting-code-block.cm-hmd-codeblock { + color: var(--code-language); +} +.cm-hmd-frontmatter { + color: var(--code-normal); +} +.cm-hmd-frontmatter.cm-string { + color: var(--code-string); +} +/*bold code text except code language*/ +:not(pre)>code:not([class*='language-']) { + font-weight: var(--font-weight-inline-code); + padding: 2px 2px 1px; + font-family: var(--font-family-inline-code) !important; +} + +.cm-s-obsidian span.cm-inline-code { + padding: 2px 0 1px; + color: var(--text-color-code); + font-weight: var(--font-weight-inline-code); + font-family: var(--font-family-inline-code) !important; + font-size: var(--font-size-code) !important; +} + +.cm-formatting.cm-formatting-list.cm-formatting-list-ol { + color: var(--list-ol-number-color); +} + +:not(.default-ol-list-marker) .cm-formatting.cm-formatting-list.cm-formatting-list-ol { + margin-left: -2px; +} + +.cm-s-obsidian .HyperMD-table-row.HyperMD-table-row.HyperMD-table-row { + min-width: max-content; + white-space: pre-wrap; +} + +.markdown-source-view.mod-cm6 .HyperMD-list-line.cm-line { + font-family: var(--font-family-list); +} + +li { + line-height: var(--line-height-list); + font-family: var(--font-family-list); +} + +li>p:not(.task-list-item) { + margin-top: 0.75em; + margin-bottom: 0.75em; +} + +.markdown-source-view ol > li, +.markdown-source-view ul > li, +.markdown-preview-view ol > li, +.markdown-preview-view ul > li, +.markdown-rendered ul > li, +.mod-cm6 .HyperMD-list-line.cm-line { + padding-top: calc(var(--list-spacing-bt) * 0.075em); + padding-bottom: calc(var(--list-spacing-bt) * 0.075em); +} + +ul, +ol ul, +ol ol ul, +ol ol ol ul { + list-style: disc; +} +ul ul, +ol ul ul, +ul ol ul, +ol ol ul ul { + list-style: circle; +} +ul ul ul, +ol ul ul ul, +ul ol ul ul, +ul ul ol ul { + list-style: square; +} +ul ul ul ul, +ol ul ul ul ul, +ul ol ul ul ul, +ul ul ol ul ul, +ul ul ul ol ul { + list-style: circle; +} + + +body.custom-ordered-list ol { + list-style: var(--list-ol-marker-1); +} +body.custom-ordered-list :is(ul, ol) ol { + list-style: var(--list-ol-marker-2); +} +body.custom-ordered-list :is(ul, ol) :is(ul, ol) ol { + list-style: var(--list-ol-marker-3); +} +body.custom-ordered-list :is(ul, ol) :is(ul, ol) :is(ul, ol) ol { + list-style: var(--list-ol-marker-4); +} + +body.custom-ordered-list ol>li::marker { + font-weight: 600; + color: var(--list-ol-number-color); + white-space: pre; + font-family: Inter; +} + +:is(ol,ul) li { + font-size: var(--font-size-list); +} + +ol > li::marker { + color: var(--list-ol-number-color); +} + +ol > li.is-collapsed::marker, +ul > li.is-collapsed::marker, +.cm-s-obsidian .is-collapsed ~ .cm-formatting-list { + color: var(--list-marker-color-collapsed); +} + +/*list-no-border*/ +body.list-no-border ul>li:not(.task-list-item) { + border-left: none !important; +} + +body.list-no-border ol>li { + border-left: none !important; +} + +/* Adapted from https://gist.github.com/KillyMXI/cbef8edff6dd55d9e6ea4df66567e9b1 */ +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-1:not(:has(~ .HyperMD-list-line-1 ~ .HyperMD-list-line:hover)):has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6, .HyperMD-list-line-5, .HyperMD-list-line-4, .HyperMD-list-line-3, .HyperMD-list-line-2):hover)::after, +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-1:not(:has(~ .HyperMD-list-line-1 ~ .HyperMD-list-line:hover)) ~ .HyperMD-list-line:has(~ .HyperMD-list-line-2:hover, ~ .HyperMD-list-line-2 ~ :is(.HyperMD-list-line-3, .HyperMD-list-line-4, .HyperMD-list-line-5, .HyperMD-list-line-6, .HyperMD-list-line-7):hover)::before, +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-2:not(:has(~ .HyperMD-list-line-2 ~ .HyperMD-list-line:hover)):is(:hover, :has(~ :is(.HyperMD-list-line-3, .HyperMD-list-line-4, .HyperMD-list-line-5, .HyperMD-list-line-6, .HyperMD-list-line-7):hover))::before { + --list-threading-offset: calc(4px + 0.12em); +} + +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-2:not(:has(~ .HyperMD-list-line-2 ~ .HyperMD-list-line:hover)):has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6, .HyperMD-list-line-5, .HyperMD-list-line-4, .HyperMD-list-line-3):hover)::after, +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-2:not(:has(~ .HyperMD-list-line-2 ~ .HyperMD-list-line:hover)) ~ .HyperMD-list-line:has(~ .HyperMD-list-line-3:hover, ~ .HyperMD-list-line-3 ~ :is(.HyperMD-list-line-4, .HyperMD-list-line-5, .HyperMD-list-line-6, .HyperMD-list-line-7):hover)::before, +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-3:not(:has(~ .HyperMD-list-line-3 ~ .HyperMD-list-line:hover)):is(:hover, :has(~ :is(.HyperMD-list-line-4, .HyperMD-list-line-5, .HyperMD-list-line-6, .HyperMD-list-line-7):hover))::before { + --list-threading-offset: calc(4px + 0.12em + var(--list-indent)); +} + +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-3:not(:has(~ .HyperMD-list-line-3 ~ .HyperMD-list-line:hover)):has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6, .HyperMD-list-line-5, .HyperMD-list-line-4):hover)::after, +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-3:not(:has(~ .HyperMD-list-line-3 ~ .HyperMD-list-line:hover)) ~ .HyperMD-list-line:has(~ .HyperMD-list-line-4:hover, ~ .HyperMD-list-line-4 ~ :is(.HyperMD-list-line-5, .HyperMD-list-line-6, .HyperMD-list-line-7):hover)::before, +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-4:not(:has(~ .HyperMD-list-line-4 ~ .HyperMD-list-line:hover)):is(:hover, :has(~ :is(.HyperMD-list-line-5, .HyperMD-list-line-6, .HyperMD-list-line-7):hover))::before { + --list-threading-offset: calc(4px + 0.12em + 2 * var(--list-indent)); +} + +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-4:not(:has(~ .HyperMD-list-line-4 ~ .HyperMD-list-line:hover)):has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6, .HyperMD-list-line-5):hover)::after, +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-4:not(:has(~ .HyperMD-list-line-4 ~ .HyperMD-list-line:hover)) ~ .HyperMD-list-line:has(~ .HyperMD-list-line-5:hover, ~ .HyperMD-list-line-5 ~ :is(.HyperMD-list-line-6, .HyperMD-list-line-7):hover)::before, +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-5:not(:has(~ .HyperMD-list-line-5 ~ .HyperMD-list-line:hover)):is(:hover, :has(~ :is(.HyperMD-list-line-6, .HyperMD-list-line-7):hover))::before { + --list-threading-offset: calc(4px + 0.12em + 3 * var(--list-indent)); +} + +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-5:not(:has(~ .HyperMD-list-line-5 ~ .HyperMD-list-line:hover)):has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6):hover)::after, +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-5:not(:has(~ .HyperMD-list-line-5 ~ .HyperMD-list-line:hover)) ~ .HyperMD-list-line:has(~ .HyperMD-list-line-6:hover, ~ .HyperMD-list-line-6 ~ :is(.HyperMD-list-line-7):hover)::before, +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-6:not(:has(~ .HyperMD-list-line-6 ~ .HyperMD-list-line:hover)):is(:hover, :has(~ :is(.HyperMD-list-line-7):hover))::before { + --list-threading-offset: calc(4px + 0.12em + 4 * var(--list-indent)); +} + +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-6:not(:has(~ .HyperMD-list-line-6 ~ .HyperMD-list-line:hover)):has(~ :is(.HyperMD-list-line-7):hover)::after, +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-6:not(:has(~ .HyperMD-list-line-6 ~ .HyperMD-list-line:hover)) ~ .HyperMD-list-line:has(~ .HyperMD-list-line-7:hover, ~ .HyperMD-list-line-7 ~ :is(.HyperMD-list-line-8):hover)::before, +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-7:not(:has(~ .HyperMD-list-line-7 ~ .HyperMD-list-line:hover)):hover::before { + --list-threading-offset: calc(4px + 0.12em + 5 * var(--list-indent)); +} + +body.bt-connected-indent-hover.bt-colorful-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-2:not(:has(~ .HyperMD-list-line-2 ~ .HyperMD-list-line:hover)):has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6, .HyperMD-list-line-5, .HyperMD-list-line-4, .HyperMD-list-line-3):hover)::after, +body.bt-connected-indent-hover.bt-colorful-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-2:not(:has(~ .HyperMD-list-line-2 ~ .HyperMD-list-line:hover)) ~ .HyperMD-list-line:has(~ .HyperMD-list-line-3:hover, ~ .HyperMD-list-line-3 ~ :is(.HyperMD-list-line-4, .HyperMD-list-line-5, .HyperMD-list-line-6, .HyperMD-list-line-7):hover)::before, +body.bt-connected-indent-hover.bt-colorful-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-3:not(:has(~ .HyperMD-list-line-3 ~ .HyperMD-list-line:hover)):is(:hover, :has(~ :is(.HyperMD-list-line-4, .HyperMD-list-line-5, .HyperMD-list-line-6, .HyperMD-list-line-7):hover))::before { + filter: hue-rotate(60deg); +} + +body.bt-connected-indent-hover.bt-colorful-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-3:not(:has(~ .HyperMD-list-line-3 ~ .HyperMD-list-line:hover)):has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6, .HyperMD-list-line-5, .HyperMD-list-line-4):hover)::after, +body.bt-connected-indent-hover.bt-colorful-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-3:not(:has(~ .HyperMD-list-line-3 ~ .HyperMD-list-line:hover)) ~ .HyperMD-list-line:has(~ .HyperMD-list-line-4:hover, ~ .HyperMD-list-line-4 ~ :is(.HyperMD-list-line-5, .HyperMD-list-line-6, .HyperMD-list-line-7):hover)::before, +body.bt-connected-indent-hover.bt-colorful-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-4:not(:has(~ .HyperMD-list-line-4 ~ .HyperMD-list-line:hover)):is(:hover, :has(~ :is(.HyperMD-list-line-5, .HyperMD-list-line-6, .HyperMD-list-line-7):hover))::before { + filter: hue-rotate(120deg); +} + +body.bt-connected-indent-hover.bt-colorful-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-4:not(:has(~ .HyperMD-list-line-4 ~ .HyperMD-list-line:hover)):has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6, .HyperMD-list-line-5):hover)::after, +body.bt-connected-indent-hover.bt-colorful-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-4:not(:has(~ .HyperMD-list-line-4 ~ .HyperMD-list-line:hover)) ~ .HyperMD-list-line:has(~ .HyperMD-list-line-5:hover, ~ .HyperMD-list-line-5 ~ :is(.HyperMD-list-line-6, .HyperMD-list-line-7):hover)::before, +body.bt-connected-indent-hover.bt-colorful-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-5:not(:has(~ .HyperMD-list-line-5 ~ .HyperMD-list-line:hover)):is(:hover, :has(~ :is(.HyperMD-list-line-6, .HyperMD-list-line-7):hover))::before { + filter: hue-rotate(180deg); +} + +body.bt-connected-indent-hover.bt-colorful-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-5:not(:has(~ .HyperMD-list-line-5 ~ .HyperMD-list-line:hover)):has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6):hover)::after, +body.bt-connected-indent-hover.bt-colorful-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-5:not(:has(~ .HyperMD-list-line-5 ~ .HyperMD-list-line:hover)) ~ .HyperMD-list-line:has(~ .HyperMD-list-line-6:hover, ~ .HyperMD-list-line-6 ~ :is(.HyperMD-list-line-7):hover)::before, +body.bt-connected-indent-hover.bt-colorful-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-6:not(:has(~ .HyperMD-list-line-6 ~ .HyperMD-list-line:hover)):is(:hover, :has(~ :is(.HyperMD-list-line-7):hover))::before { + filter: hue-rotate(240deg); +} + +body.bt-connected-indent-hover.bt-colorful-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-6:not(:has(~ .HyperMD-list-line-6 ~ .HyperMD-list-line:hover)):has(~ :is(.HyperMD-list-line-7):hover)::after, +body.bt-connected-indent-hover.bt-colorful-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-6:not(:has(~ .HyperMD-list-line-6 ~ .HyperMD-list-line:hover)) ~ .HyperMD-list-line:has(~ .HyperMD-list-line-7:hover, ~ .HyperMD-list-line-7 ~ :is(.HyperMD-list-line-8):hover)::before, +body.bt-connected-indent-hover.bt-colorful-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-7:not(:has(~ .HyperMD-list-line-7 ~ .HyperMD-list-line:hover)):hover::before { + filter: hue-rotate(300deg); +} + +/* tails */ +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-1:not(:has(~ .HyperMD-list-line-1 ~ .HyperMD-list-line:hover)):has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6, .HyperMD-list-line-5, .HyperMD-list-line-4, .HyperMD-list-line-3, .HyperMD-list-line-2):hover)::after, +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-2:not(:has(~ .HyperMD-list-line-2 ~ .HyperMD-list-line:hover)):has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6, .HyperMD-list-line-5, .HyperMD-list-line-4, .HyperMD-list-line-3):hover)::after, +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-3:not(:has(~ .HyperMD-list-line-3 ~ .HyperMD-list-line:hover)):has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6, .HyperMD-list-line-5, .HyperMD-list-line-4):hover)::after, +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-4:not(:has(~ .HyperMD-list-line-4 ~ .HyperMD-list-line:hover)):has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6, .HyperMD-list-line-5):hover)::after, +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-5:not(:has(~ .HyperMD-list-line-5 ~ .HyperMD-list-line:hover)):has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6):hover)::after, +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-6:not(:has(~ .HyperMD-list-line-6 ~ .HyperMD-list-line:hover)):has(~ :is(.HyperMD-list-line-7):hover)::after { + content: ""; + position: absolute; + left: var(--list-threading-offset); + bottom: 0; + height: calc(100% - 1em); + width: var(--bt-indentation-width-hover); + background-color: var(--bt-connected-indent-line-color); +} +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line.HyperMD-task-line::after { + max-height: calc(100% - 1.2em); +} + +/* in-between lines */ +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-1:not(:has(~ .HyperMD-list-line-1 ~ .HyperMD-list-line:hover)) ~ .HyperMD-list-line:has(~ .HyperMD-list-line-2:hover, ~ .HyperMD-list-line-2 ~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6, .HyperMD-list-line-5, .HyperMD-list-line-4, .HyperMD-list-line-3):hover)::before, +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-2:not(:has(~ .HyperMD-list-line-2 ~ .HyperMD-list-line:hover)) ~ .HyperMD-list-line:has(~ .HyperMD-list-line-3:hover, ~ .HyperMD-list-line-3 ~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6, .HyperMD-list-line-5, .HyperMD-list-line-4):hover)::before, +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-3:not(:has(~ .HyperMD-list-line-3 ~ .HyperMD-list-line:hover)) ~ .HyperMD-list-line:has(~ .HyperMD-list-line-4:hover, ~ .HyperMD-list-line-4 ~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6, .HyperMD-list-line-5):hover)::before, +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-4:not(:has(~ .HyperMD-list-line-4 ~ .HyperMD-list-line:hover)) ~ .HyperMD-list-line:has(~ .HyperMD-list-line-5:hover, ~ .HyperMD-list-line-5 ~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6):hover)::before, +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-5:not(:has(~ .HyperMD-list-line-5 ~ .HyperMD-list-line:hover)) ~ .HyperMD-list-line:has(~ .HyperMD-list-line-6:hover, ~ .HyperMD-list-line-6 ~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6):hover)::before, +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-6:not(:has(~ .HyperMD-list-line-6 ~ .HyperMD-list-line:hover)) ~ .HyperMD-list-line:has(~ .HyperMD-list-line-7:hover)::before { + content: ""; + position: absolute; + left: var(--list-threading-offset); + top: 0; + height: 100%; + width: var(--bt-indentation-width-hover); + background-color: var(--bt-connected-indent-line-color); +} + +/* elbows */ +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-2:not(:has(~ .HyperMD-list-line-2 ~ .HyperMD-list-line:hover)):is(:hover, :has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6, .HyperMD-list-line-5, .HyperMD-list-line-4, .HyperMD-list-line-3):hover))::before, +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-3:not(:has(~ .HyperMD-list-line-3 ~ .HyperMD-list-line:hover)):is(:hover, :has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6, .HyperMD-list-line-5, .HyperMD-list-line-4):hover))::before, +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-4:not(:has(~ .HyperMD-list-line-4 ~ .HyperMD-list-line:hover)):is(:hover, :has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6, .HyperMD-list-line-5):hover))::before, +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-5:not(:has(~ .HyperMD-list-line-5 ~ .HyperMD-list-line:hover)):is(:hover, :has(~ :is(.HyperMD-list-line-7, .HyperMD-list-line-6):hover))::before, +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-6:not(:has(~ .HyperMD-list-line-6 ~ .HyperMD-list-line:hover)):is(:hover, :has(~ :is(.HyperMD-list-line-7):hover))::before, +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line-7:not(:has(~ .HyperMD-list-line-7 ~ .HyperMD-list-line:hover)):hover::before { + content: ""; + position: absolute; + left: var(--list-threading-offset); + width: var(--list-indent); + top: 0; + height: calc(var(--line-height-list) / 2 * var(--font-size-list) + var(--list-spacing-bt) * 0.075em * 1.5); + border-bottom-left-radius: var(--radius-m); + border-bottom: var(--bt-indentation-width-hover) solid var(--bt-connected-indent-line-color); + border-left: var(--bt-indentation-width-hover) solid var(--bt-connected-indent-line-color); +} +body.bt-connected-indent-hover .cm-s-obsidian:not(.kanban) .HyperMD-list-line.HyperMD-task-line::before { + max-width: calc(var(--list-indent) - 0.35em); +} + +body.bt-colorful-indentation-lines.bt-indentation-line-gradient ul ul::before, +body.bt-colorful-indentation-lines.bt-indentation-line-gradient ol ol::before { + border-right-color: var(--bt-connected-indent-line-color) !important; + border-image: linear-gradient(var(--bt-indentation-gradient-color-1), var(--bt-indentation-gradient-color-2)) 10; +} + +body.bt-colorful-indentation-lines.bt-indentation-line-image :is(ul, ol) :is(ul, ol)::before { + border-right-color: var(--bt-connected-indent-line-color) !important; + border-image: var(--bt-indentation-line-image) 10; +} + +body.bt-colorful-indentation-lines :is(ul, ol) :is(ul, ol)::before { + border-right-color: var(--bt-connected-indent-line-color) !important; + border-right-width: var(--bt-colorful-indentation-width); + border-right-style: double; +} +body.bt-colorful-indentation-lines :is(ul, ol) :is(ul, ol) :is(ul, ol)::before { + border-right-color: var(--bt-connected-indent-line-color) !important; + filter: hue-rotate(60deg); +} +body.bt-colorful-indentation-lines :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol)::before { + border-right-color: var(--bt-connected-indent-line-color) !important; + filter: hue-rotate(120deg); +} +body.bt-colorful-indentation-lines :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol)::before { + border-right-color: var(--bt-connected-indent-line-color) !important; + filter: hue-rotate(180deg); +} +body.bt-colorful-indentation-lines :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol)::before { + border-right-color: var(--bt-connected-indent-line-color) !important; + filter: hue-rotate(240deg); +} +body.bt-colorful-indentation-lines :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol)::before { + border-right-color: var(--bt-connected-indent-line-color) !important; + filter: hue-rotate(300deg); +} + +body.bt-colorful-indentation-lines-editing .HyperMD-list-line-2 .cm-hmd-list-indent > .cm-indent::before, +body.bt-colorful-indentation-lines-editing .HyperMD-list-line-3 .cm-hmd-list-indent > .cm-indent::before, +body.bt-colorful-indentation-lines-editing .HyperMD-list-line-4 .cm-hmd-list-indent > .cm-indent::before, +body.bt-colorful-indentation-lines-editing .HyperMD-list-line-5 .cm-hmd-list-indent > .cm-indent::before, +body.bt-colorful-indentation-lines-editing .HyperMD-list-line-6 .cm-hmd-list-indent > .cm-indent::before, +body.bt-colorful-indentation-lines-editing .HyperMD-list-line-7 .cm-hmd-list-indent > .cm-indent::before, +body.bt-colorful-indentation-lines-editing .HyperMD-list-line-8 .cm-hmd-list-indent > .cm-indent::before, +body.bt-colorful-indentation-lines-editing .HyperMD-list-line-9 .cm-hmd-list-indent > .cm-indent::before { + border-color: var(--bt-connected-indent-line-color) +} + +body.bt-colorful-indentation-lines-editing .HyperMD-list-line-3 .cm-hmd-list-indent > .cm-indent ~ .cm-indent::before, +body.bt-colorful-indentation-lines-editing .HyperMD-list-line-4 .cm-hmd-list-indent > .cm-indent ~ .cm-indent::before, +body.bt-colorful-indentation-lines-editing .HyperMD-list-line-5 .cm-hmd-list-indent > .cm-indent ~ .cm-indent::before, +body.bt-colorful-indentation-lines-editing .HyperMD-list-line-6 .cm-hmd-list-indent > .cm-indent ~ .cm-indent::before, +body.bt-colorful-indentation-lines-editing .HyperMD-list-line-7 .cm-hmd-list-indent > .cm-indent ~ .cm-indent::before, +body.bt-colorful-indentation-lines-editing .HyperMD-list-line-8 .cm-hmd-list-indent > .cm-indent ~ .cm-indent::before, +body.bt-colorful-indentation-lines-editing .HyperMD-list-line-9 .cm-hmd-list-indent > .cm-indent ~ .cm-indent::before { + border-color: var(--bt-connected-indent-line-color); + filter: hue-rotate(60deg); +} + +body.bt-colorful-indentation-lines-editing .HyperMD-list-line-4 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent::before, +body.bt-colorful-indentation-lines-editing .HyperMD-list-line-5 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent::before, +body.bt-colorful-indentation-lines-editing .HyperMD-list-line-6 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent::before, +body.bt-colorful-indentation-lines-editing .HyperMD-list-line-7 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent::before, +body.bt-colorful-indentation-lines-editing .HyperMD-list-line-8 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent::before, +body.bt-colorful-indentation-lines-editing .HyperMD-list-line-9 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent::before { + border-color: var(--bt-connected-indent-line-color); + filter: hue-rotate(120deg); +} + +body.bt-colorful-indentation-lines-editing .HyperMD-list-line-5 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent::before, +body.bt-colorful-indentation-lines-editing .HyperMD-list-line-6 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent::before, +body.bt-colorful-indentation-lines-editing .HyperMD-list-line-7 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent::before, +body.bt-colorful-indentation-lines-editing .HyperMD-list-line-8 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent::before, +body.bt-colorful-indentation-lines-editing .HyperMD-list-line-9 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent::before { + border-color: var(--bt-connected-indent-line-color); + filter: hue-rotate(180deg); +} + +body.bt-colorful-indentation-lines-editing .HyperMD-list-line-6 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent::before, +body.bt-colorful-indentation-lines-editing .HyperMD-list-line-7 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent::before, +body.bt-colorful-indentation-lines-editing .HyperMD-list-line-8 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent::before, +body.bt-colorful-indentation-lines-editing .HyperMD-list-line-9 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent::before { + border-color: var(--bt-connected-indent-line-color); + filter: hue-rotate(240deg); +} + +body.bt-colorful-indentation-lines-editing .HyperMD-list-line-7 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent::before, +body.bt-colorful-indentation-lines-editing .HyperMD-list-line-8 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent::before, +body.bt-colorful-indentation-lines-editing .HyperMD-list-line-9 .cm-hmd-list-indent > .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent ~ .cm-indent::before{ + border-color: var(--bt-connected-indent-line-color); + filter: hue-rotate(300deg); +} + +body.bt-connected-indent-hover .markdown-preview-view:not(.kanban) li { + position: relative; +} + +/* In-between items */ +body.bt-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout="kanban"]) > div > :is(ul, ol) li > :is(ul, ol) > li:has(~ li:hover)::before, +body.bt-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout="kanban"]) > div > :is(ul, ol) :is(ul, ol):has(~ *:hover) > li::before { + content: ""; + position: absolute; + background-color: var(--bt-connected-indent-line-color); + width: var(--bt-indentation-width-hover); + top: calc(var(--list-spacing-bt) * 0.075em - var(--font-size-list) * 0.6); + left: calc(-1.5 * var(--list-indent) - 1px); + bottom: calc(var(--list-spacing-bt) * 0.075em - var(--font-size-list) * 0.5); +} + +/* Elbows items */ +body.bt-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout="kanban"]) > div > :is(ul, ol) li > :is(ul, ol) > li:hover::before { + content: ""; + position: absolute; + background-color: transparent; + top: calc(var(--list-spacing-bt) * 0.075em - var(--font-size-list) * 0.6); + left: calc(-1.5 * var(--list-indent) - 1px); + width: calc(1em + var(--size-4-4)); + height: calc(var(--font-size-list) * 1.27); + border-bottom-left-radius: var(--radius-m); + border-bottom: var(--bt-indentation-width-hover) solid var(--bt-connected-indent-line-color); + border-left: var(--bt-indentation-width-hover) solid var(--bt-connected-indent-line-color); +} + +body.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout="kanban"]) > div > :is(ul, ol) li > :is(ul, ol) > li > :is(ul, ol) > li:has( ~ li:hover)::before, +body.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout="kanban"]) > div > :is(ul, ol) li > :is(ul, ol) > li > :is(ul, ol) > li:hover::before, +body.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout="kanban"]) > div > :is(ul, ol) li:hover > :is(ul, ol) > li > ul:has(+ ol) > li::before, +body.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout="kanban"]) > div > :is(ul, ol) li:hover > :is(ul, ol) > li > ol:has(+ ul) > li::before { + filter: hue-rotate(60deg); +} + +body.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout="kanban"]) > div > :is(ul, ol) li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li:has( ~ li:hover)::before, +body.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout="kanban"]) > div > :is(ul, ol) li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li:hover::before, +body.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout="kanban"]) > div > :is(ul, ol) li:hover > :is(ul, ol) > li > :is(ul, ol) > li > ul:has(+ ol) > li::before, +body.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout="kanban"]) > div > :is(ul, ol) li:hover > :is(ul, ol) > li > :is(ul, ol) > li > ol:has(+ ul) > li::before { + filter: hue-rotate(120deg); +} + +body.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout="kanban"]) > div > :is(ul, ol) li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) >li:has( ~ li:hover)::before, +body.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout="kanban"]) > div > :is(ul, ol) li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li:hover::before, +body.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout="kanban"]) > div > :is(ul, ol) li:hover > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > ul:has(+ ol) > li::before, +body.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout="kanban"]) > div > :is(ul, ol) li:hover > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > ol:has(+ ul) > li::before { + filter: hue-rotate(180deg); +} + +body.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout="kanban"]) > div > :is(ul, ol) li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) >li:has( ~ li:hover)::before, +body.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout="kanban"]) > div > :is(ul, ol) li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li:hover::before, +body.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout="kanban"]) > div > :is(ul, ol) li:hover > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > ul:has(+ ol) > li::before, +body.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout="kanban"]) > div > :is(ul, ol) li:hover > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > ol:has(+ ul) > li::before { + filter: hue-rotate(240deg); +} + +body.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout="kanban"]) > div > :is(ul, ol) li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li:has( ~ li:hover)::before, +body.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout="kanban"]) > div > :is(ul, ol) li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li:hover::before, +body.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout="kanban"]) > div > :is(ul, ol) li:hover > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > ul:has(+ ol) > li::before, +body.bt-connected-indent-hover.bt-colorful-connected-indent-hover .markdown-preview-view:not(.kanban) *:not([data-callout="kanban"]) > div > :is(ul, ol) li:hover > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > :is(ul, ol) > li > ol:has(+ ul) > li::before { + filter: hue-rotate(300deg); +} + + +/*===========*/ +:is(.markdown-preview-view,.markdown-rendered) :is(b,strong), +.view-header-title { + font-weight: bold; +} + +span.cm-strong, +:not(font)>strong, +.cm-s-obsidian .cm-highlight.cm-strong { + font-weight: var(--font-weight-strong); +} + +span.cm-strong, +:not(font)>strong, +.cm-s-obsidian .cm-highlight.cm-strong { + color: var(--accent-strong) !important; + font-family: var(--font-family-strong) !important; +} + +font>strong { + font-family: var(--font-family-strong) !important; +} + +span.cm-em, +span.cm-em.cm-highlight, +span.cm-em.cm-quote, +span.cm-em.cm-highlight.cm-quote, +:is(.markdown-preview-view,.markdown-rendered) :not(font):not(strong)>em, +:is(.markdown-preview-view,.markdown-rendered) em>mark { + color: var(--accent-em); + font-family: var(--font-family-em); + font-style: var(--font-style-em); +} + +*:not(font)>em>strong, +*:not(font)>strong>em, +.cm-strong.cm-em { + padding-right: 0.05em; + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-color: #f55454; + background-image: linear-gradient(120deg, var(--strong-em-color-1) 0%, var(--strong-em-color-2) 80%); + font-family: var(--font-family-strong) !important; +} + +:is(.markdown-preview-view,.markdown-rendered) :not(font)>strong>em>mark { + background-color: var(--mark-highlight-strong-em); + padding: 1px 3px; + border-radius: var(--radius-xs); +} + +em>strong>font, +strong>em>font, +strong>em>mark>font { + background-image: initial; + background-clip: initial; + -webkit-background-clip: initial; + -webkit-text-fill-color: initial; + background-color: initial; +} + +/*internal link with strong&em*/ +strong>em>.internal-link, +.cm-strong.cm-em.cm-hmd-internal-link { + -webkit-text-fill-color: initial; + text-decoration: underline !important; +} + +.markdown-source-view.mod-cm5 span.cm-formatting.cm-formatting-strong.cm-strong, +.markdown-source-view.mod-cm5 span.cm-formatting.cm-formatting-em.cm-em { + opacity: 0.2; +} + +.theme-dark .markdown-source-view.mod-cm5 .cm-formatting.cm-formatting-strong.cm-em.cm-strong { + opacity: 0.2; + -webkit-text-fill-color: var(--green); +} + +.theme-light .markdown-source-view.mod-cm5 .cm-formatting.cm-formatting-strong.cm-em.cm-strong { + opacity: 0.2; + -webkit-text-fill-color: var(--orange); +} + +a:not([class*="is-unresolved"]).internal-link>strong, +a.external-link>strong, +a:not([class*="is-unresolved"]).internal-link>em, +a.external-link>em { + color: var(--text-accent); +} + +body.remove-external-link-icon a.external-link { + background-image: none; +} +body.remove-external-link-icon span.external-link +{ + background-image:none; +} +/*link format [[]]*/ +.cm-formatting-link.cm-strong.cm-em { + -webkit-text-fill-color: var(--text-faint); + opacity: 0.2; +} + +div.CodeMirror-activeline .CodeMirror-line span.cm-formatting-link.cm-strong.cm-em { + opacity: 1; +} + +.theme-dark div.CodeMirror-activeline .CodeMirror-line span.cm-formatting.cm-formatting-strong.cm-strong { + opacity: 1; + color: var(--text-accent); +} + +.theme-dark div.CodeMirror-activeline .CodeMirror-line span.cm-formatting.cm-formatting-em.cm-em { + opacity: 1; + color: var(--text-orange); +} + +.theme-dark div.CodeMirror-activeline .CodeMirror-line span.cm-formatting.cm-formatting-strong.cm-em.cm-strong { + opacity: 1; + color: var(--green); +} + +.theme-light div.CodeMirror-activeline .CodeMirror-line span.cm-formatting.cm-formatting-strong.cm-strong { + opacity: 1; + color: var(--orange); +} + +.theme-light div.CodeMirror-activeline .CodeMirror-line span.cm-formatting.cm-formatting-em.cm-em, +.theme-light div.CodeMirror-activeline .CodeMirror-line span.cm-formatting.cm-formatting-strong.cm-em.cm-strong { + opacity: 1; + color: var(--orange); +} + +.workspace>.workspace-split>.workspace-leaf:first-of-type:last-of-type .view-header { + border: none; + background: var(--background-primary); +} + +/*smaller header title*/ +.view-header-title { + font-size: var(--font-size-file-header-title); +} + +.popover.hover-popover { + overflow: hidden; + box-shadow: 0 0 6px 6px var(--theme-color-translucent-015); +} + +.popover.hover-popover:not(.hover-editor) > *:not(.mod-empty) { + width: calc(var(--popover-width) * var(--popover-width-factor)); + height: calc(var(--popover-height) * var(--popover-height-factor)); + max-height: calc(var(--popover-height) * var(--popover-height-factor)); +} + +/*hover editor plugin*/ +.popover.hover-editor .popover-title:after { + background: none !important; +} + +body:not(.remove-heading-indicator) .popover h1:hover::before, +body:not(.remove-heading-indicator) .markdown-embed h1:hover::before, +body:not(.remove-heading-indicator) .markdown-preview-view .callout-content h1:hover::before { + content: 'H1'; + position: absolute; + font-size: 0.4em; + width: auto; + border: 1px solid; + padding: 0 2px; + border-radius: var(--radius-xs); + top: -1.1em; +} +body:not(.remove-heading-indicator) .popover h2:hover::before, +body:not(.remove-heading-indicator) .markdown-embed h2:hover::before, +body:not(.remove-heading-indicator) .markdown-preview-view .callout-content h2:hover::before { + content: 'H2'; + position: absolute; + font-size: 0.45em; + width: auto; + border: 1px solid; + padding: 0 2px; + border-radius: var(--radius-xs); + top: -1.1em; +} +body:not(.remove-heading-indicator) .popover h3:hover::before, +body:not(.remove-heading-indicator) .markdown-embed h3:hover::before, +body:not(.remove-heading-indicator) .markdown-preview-view .callout-content h3:hover::before { + content: 'H3'; + position: absolute; + font-size: 0.45em; + width: auto; + border: 1px solid; + padding: 0 2px; + border-radius: var(--radius-xs); + top: -1.1em; +} +body:not(.remove-heading-indicator) .popover h4:hover::before, +body:not(.remove-heading-indicator) .markdown-embed h4:hover::before, +body:not(.remove-heading-indicator) .markdown-preview-view .callout-content h4:hover::before { + content: 'H4'; + position: absolute; + font-size: 0.5em; + width: auto; + border: 1px solid; + padding: 0 2px; + border-radius: var(--radius-xs); + top: -1.1em; +} +body:not(.remove-heading-indicator) .popover h5:hover::before, +body:not(.remove-heading-indicator) .markdown-embed h5:hover::before, +body:not(.remove-heading-indicator) .markdown-preview-view .callout-content h5:hover::before { + content: 'H5'; + position: absolute; + font-size: 0.55em; + width: auto; + border: 1px solid; + padding: 0 2px; + border-radius: var(--radius-xs); + top: -1.1em; +} +body:not(.remove-heading-indicator) .popover h6:hover::before, +body:not(.remove-heading-indicator) .markdown-embed h6:hover::before, +body:not(.remove-heading-indicator) .markdown-preview-view .callout-content h6:hover::before { + content: 'H6'; + position: absolute; + font-size: 0.6em; + width: auto; + border: 1px solid; + padding: 0 2px; + border-radius: var(--radius-xs); + top: -1.1em; +} + +body:not(.remove-heading-indicator) .markdown-embed :is(h1, h2, h3, h4, h5, h6):hover::before, +body:not(.remove-heading-indicator) .callout-content :is(h1, h2, h3, h4, h5, h6):hover::before{ + margin-left: 0 !important; +} +body:not(.remove-heading-indicator) .callout-content :is(h1, h2, h3, h4, h5, h6):hover::before { + top: -1.25em; +} + +:is(.markdown-preview-section,.markdown-rendered) table:not(.dataview.table-view-table) { + + border-collapse: collapse; + overflow: auto; + margin: 20px auto; +} + +body.table-width-100 :is(.markdown-preview-section,.markdown-rendered) table:not(.dataview.table-view-table) { + width: 100%; +} +body.table-width-auto :is(.markdown-preview-section,.markdown-rendered) table:not(.dataview.table-view-table) { + width: auto; +} + +:is(.markdown-preview-section,.markdown-rendered) table:not(.dataview.table-view-table):active, +:is(.markdown-preview-section,.markdown-rendered) table:not(.dataview.table-view-table):hover { + overflow: hidden; + resize: both !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 { + background-image: none; +} +/*修复Itinerary插件显示问题*/ +:is(.markdown-preview-view,.markdown-rendered) :is(.markdown-preview-section,.markdown-rendered) .block-language-itinerary.fc table { + overflow: unset; +} + +/*modified from https://codepen.io/brettdewoody/pen/oBjbbB */ +body.no-wrapped-table-cell table:not([class*="table-view-table"]), +body.no-wrapped-dvtable-cell .dataview.table-view-table { + width: 100%; + table-layout: fixed; +} + +body.no-wrapped-table-cell table:not([class*="table-view-table"]) :is(th,td), +body.no-wrapped-dvtable-cell .dataview.table-view-table :is(th,td) { + white-space: nowrap; + overflow-x: auto; + text-overflow: ellipsis; +} + +body.no-wrapped-table-cell table:not([class*="table-view-table"]) :is(th,td):hover, +body.no-wrapped-dvtable-cell .dataview.table-view-table :is(th,td):hover { + text-overflow: clip; +} +/*modified from https://forum.obsidian.md/t/custom-css-for-tables-5-new-styles-ready-to-use-in-your-notes/17084 */ + +/****dataview table***/ +table.table-view-table > thead > tr > th { + font-size: 0.9em; +} +table.table-view-table > tbody > tr > td { + font-size: 0.85em; +} + +body.wrapped-dvtable:not(.no-wrapped-dvtable-cell):not(.no-wrapped-dvtable) :is(.markdown-preview-view,.markdown-rendered) table.dataview.table-view-table>thead>tr, +body.wrapped-dvtable:not(.no-wrapped-dvtable-cell):not(.no-wrapped-dvtable) :is(.markdown-preview-view,.markdown-rendered) .table.dataview.table-view-table>tbody>tr, +body.wrapped-table:not(.no-wrapped-table-cell):not(.no-wrapped-table) :is(.markdown-preview-view,.markdown-rendered) table:not([class*="table-view-table"]) >thead>tr, +body.wrapped-table:not(.no-wrapped-table-cell):not(.no-wrapped-table) :is(.markdown-preview-view,.markdown-rendered) table:not([class*="table-view-table"]) >tbody>tr { + white-space: pre-wrap; + word-break: break-word; + overflow-wrap: anywhere; +} + +body.no-wrapped-dvtable .block-language-dataview, +body.no-wrapped-table table:not([class*="table-view-table"]) { + width: 100%; + margin: 0; + overflow-x: auto; + white-space: nowrap; +} +body.no-wrapped-dvtable table.dataview th { + padding: 0 20px; + font-size: 1em; +} + +body.no-wrapped-dvtable table.dataview tbody tr td:first-child { + font-size: 0.9em; +} + +body.no-wrapped-dvtable table.dataview td:not(:first-child), +body.no-wrapped-dvtable table.dataview tr > td:last-of-type { + font-size: 0.9em; + max-width: unset; +} + +body.auto-serial-number-dvtable .markdown-source-view:not(.cards) .dataview.table-view-table { + counter-reset: sec; +} +body.auto-serial-number-dvtable .markdown-source-view:not(.cards) .dataview.table-view-table> tbody > tr> td:first-child::before { + counter-increment: sec; + content:counter(sec) ". "; +} + +body.auto-serial-number-dvtable .markdown-preview-view:not(.cards) .dataview.table-view-table { + counter-reset: section; +} +body.auto-serial-number-dvtable .markdown-preview-view:not(.cards) .dataview.table-view-table> tbody > tr> td:first-child::before { + counter-increment: section; + content:counter(section) ". "; +} + +body:not(.no-wrapped-dvtable) :is(.markdown-preview-view,.markdown-rendered) .table-view-table>tbody>tr>td, +body:not(.no-wrapped-dvtable) .markdown-source-view.mod-cm6 .table-view-table>tbody>tr>td { + max-width: 18em; +} + +:is(.markdown-preview-view,.markdown-rendered) table tbody>tr:nth-child(odd), +.markdown-source-view table tbody>tr:nth-child(odd) { + background-color: var(--table-background-color-odd); +} + +:is(.markdown-preview-view,.markdown-rendered) table tbody>tr, +.markdown-source-view table tbody>tr { + background-color: var(--table-background-color); +} + +:is(.markdown-preview-view,.markdown-rendered) :is(th,td) { + padding: 4px 10px; + border: none; +} + +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view) th, +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view) thead tr > th:nth-child(2n+2) { + background-color: var(--table-thead-background-color); + font-family: var(--font-family-strong); +} + + +/*table hover*/ +:is(.markdown-preview-view,.markdown-rendered) td:hover, +.markdown-rendered tbody tr > td:nth-child(2n+2):hover { + background-color: var(--table-hover-color); +} + +/*table raw hover*/ +:is(.markdown-preview-view,.markdown-rendered) table tbody>tr:hover, +.markdown-rendered tbody tr:nth-child(odd):hover { + background-color: var(--table-hover-raw-color); +} + +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view) th:hover, +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view) thead tr > th:nth-child(2n+2):hover { + background-color: var(--table-hover-thead-color); +} + + +body.toggle-table-transition :is(.markdown-preview-view,.markdown-rendered,.markdown-source-view) tbody tr:nth-child(odd):hover, +body.toggle-table-transition :is(.markdown-preview-view,.markdown-rendered,.markdown-source-view) tbody tr:hover{ + background: var(--table-hover-raw-color); + transform: scale(1.02); + transition: transform 0.1s cubic-bezier(0.11, 0.33, 0.23, 0.33); +} + +body.toggle-table-transition :is(.markdown-preview-view,.markdown-rendered,.markdown-source-view) tbody td:hover{ + background: var(--table-hover-color); + transform: scale(1.02); + transition: transform 0.1s cubic-bezier(0.22, 0.66, 0.46, 0.66); +} + +body.show-border-table :is(.markdown-preview-view,.markdown-rendered) :is(th,td) { + border: 1px solid var(--table-border-color); +} + +:is(.markdown-preview-view,.markdown-rendered) table { + box-shadow: 2px 2px 12px rgba(0, 0, 0, 0.1); +} + +body.table-style-one.theme-light { + --table-background-color-odd: rgba(0, 0, 0, 0.02); + --table-background-color: rgba(0, 0, 0, 0.02); + --table-thead-background-color: rgba(0, 0, 0, 0.1); + --table-hover-color: rgba(0, 0, 0, 0.03); + --table-hover-raw-color: rgba(0, 0, 0, 0.05); + --table-hover-thead-color: var(--table-thead-background-color); +} +body.table-style-one.theme-dark { + --table-background-color-odd: rgba(0, 0, 0, 0.3); + --table-background-color: rgba(0, 0, 0, 0.3); + --table-thead-background-color: rgba(0, 0, 0, 0.5); + --table-hover-color: rgba(0, 0, 0, 0.5); + --table-hover-raw-color: rgba(0, 0, 0, 0.5); + --table-hover-thead-color: var(--table-thead-background-color); +} + +body.table-style-two.theme-light { + --table-background-color-odd: rgba(0, 0, 0, 0.02); + --table-background-color: rgba(0, 0, 0, 0.05); + --table-thead-background-color: rgba(0, 0, 0, 0.1); + --table-hover-color: rgba(0, 0, 0, 0.03); + --table-hover-raw-color: rgba(0, 0, 0, 0.09); + --table-hover-thead-color: var(--table-thead-background-color); +} +body.table-style-two.theme-dark { + --table-background-color-odd: rgba(0, 0, 0, 0.3); + --table-background-color: rgba(0, 0, 0, 0.4); + --table-thead-background-color: rgba(0, 0, 0, 0.5); + --table-hover-color: rgba(0, 0, 0, 0.5); + --table-hover-raw-color: rgba(0, 0, 0, 0.5); + --table-hover-thead-color: var(--table-thead-background-color); +} + +body.table-style-two :is(.markdown-preview-view,.markdown-rendered) th { + border: none; + border-bottom: 2px solid; +} +body.table-style-two :is(.markdown-preview-view,.markdown-rendered) td { + border: none; +} + +body.table-style-three :is(.markdown-preview-view,.markdown-rendered) th, +body.table-style-three .markdown-source-view th, +body.table-style-three :is(.markdown-preview-view,.markdown-rendered) th:hover, +body.table-style-three .markdown-source-view th:hover, +body.table-style-three :is(.markdown-preview-view,.markdown-rendered) td:hover, +body.table-style-three .markdown-source-view td:hover, +body.table-style-three :is(.markdown-preview-view,.markdown-rendered) table tbody>tr:hover, +body.table-style-three .markdown-source-view table tbody>tr:hover, +body.table-style-three :is(.markdown-preview-view,.markdown-rendered) table tbody>tr:nth-child(odd), +body.table-style-three .markdown-source-view table tbody>tr:nth-child(odd), +body.table-style-three :is(.markdown-preview-view,.markdown-rendered) table tbody>tr, +body.table-style-three .markdown-source-view table tbody>tr { + background-color: transparent; +} + +/*Full-width table dvtable callout backlinks layout*/ +/*modified from https://github.com/efemkay */ +:is(body.full-width-table,body.full-width-dvtable,body.full-width-callout,body.full-width-backlinks) .markdown-source-view.mod-cm6 .cm-contentContainer.cm-contentContainer, +:is(body.full-width-table,body.full-width-dvtable,body.full-width-callout,body.full-width-backlinks) .markdown-source-view.mod-cm6 .cm-contentContainer.cm-contentContainer > div, +:is(body.full-width-table,body.full-width-dvtable,body.full-width-callout,body.full-width-backlinks) .markdown-source-view.mod-cm6 .cm-contentContainer.cm-contentContainer > div.cm-content, +:is(body.full-width-table,body.full-width-dvtable,body.full-width-callout,body.full-width-backlinks) .markdown-source-view.mod-cm6 .cm-contentContainer.cm-contentContainer > div.cm-content .cm-table-widge { + max-width: 100%; + /* width: 100%; ob1.0*/ +} + +:is(body.full-width-table,body.full-width-dvtable,body.full-width-callout,body.full-width-backlinks) .markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer, +:is(body.full-width-table,body.full-width-dvtable,body.full-width-callout,body.full-width-backlinks) .markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer > div { + max-width: 100%; + margin-inline: auto; + width: 100%; +} + +/* Editing View -- set all divs back to normal width (ensuring specificity rule over some theme), then expand to full-width for each selected css class */ +:is(body.full-width-table,body.full-width-dvtable,body.full-width-callout,body.full-width-backlinks) div.markdown-source-view.mod-cm6 .cm-contentContainer.cm-contentContainer > div > div, +:is(body.full-width-table,body.full-width-dvtable,body.full-width-callout,body.full-width-backlinks) div.markdown-source-view.mod-cm6 .cm-contentContainer.cm-contentContainer > div > .cm-line { + max-width: var(--file-line-width); + margin-inline: auto !important; +} /* important for margin needed because app.css:2842 use it */ + +body.full-width-dvtable .markdown-source-view.mod-cm6 .cm-contentContainer.cm-contentContainer > div > div.cm-preview-code-block:not(.admonition-parent), +body.full-width-table .markdown-source-view.mod-cm6 .cm-contentContainer.cm-contentContainer > div > div:is(.HyperMD-table-row, .cm-table-widget), +body.full-width-callout .markdown-source-view.mod-cm6 .cm-contentContainer.cm-contentContainer > div > div:is(.cm-callout,.admonition-parent), +body.full-width-backlinks .markdown-source-view.mod-cm6 .cm-contentContainer.cm-contentContainer > div:is(.embedded-backlinks) > div { + max-width: 100%; +} + +body.full-width-dvtable .markdown-source-view.mod-cm6 .cm-contentContainer.cm-contentContainer > div > div.cm-preview-code-block>div[class^="block-language"]:not(.block-language-dataview) { + max-width: var(--file-line-width); + margin-inline: auto; +} + +/* Reading View -- similar to Editing View, set all divs to normal-width and then selected divs to full-width, + however, for Reading View, wide-dataview and wide-table will require Contextual Typography plugin */ +:is(body.full-width-table,body.full-width-dvtable,body.full-width-callout,body.full-width-backlinks) div.markdown-preview-view:not(.fullwidth) .markdown-preview-sizer.markdown-preview-sizer > div:not(.obsidian-banner-wrapper) { + max-width: var(--file-line-width); + margin-inline: auto; +} + + +body.full-width-dvtable .markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer > div:is(.el-lang-dataview), +body.full-width-table .markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer > div:is(.el-table), +body.full-width-callout .markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer > div:is([data-callout],.admonition-parent), +body.full-width-backlinks .markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer > div:is(.embedded-backlinks) { + max-width: 100%!important; +} + +/*Full-width table dvtable callout backlinks layout*/ +/*modified from https://github.com/efemkay */ + +/* Editing View -- set Readable Line Length (RLL) to wide (100%) for any css class with "wide" word in it. / "width:100%" added for Blue Topaz / div.cm-content added to override Mado 11 */ +div[class*="wide-"].markdown-source-view.mod-cm6 .cm-contentContainer.cm-contentContainer, +div[class*="wide-"].markdown-source-view.mod-cm6 .cm-contentContainer.cm-contentContainer > div, +div[class*="wide-"].markdown-source-view.mod-cm6 .cm-contentContainer.cm-contentContainer > div.cm-content, +div[class*="wide-"].markdown-source-view.mod-cm6 .cm-contentContainer.cm-contentContainer > div.cm-content .cm-table-widget { + max-width: 100%; + /* width: 100%; ob1.0*/ +} + +/* Reading View -- similar to Editing View, set the RLL to 100% for any css class with "wide" word in it. "width:100%" added for Blue Topaz */ +div[class*="wide-"].markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer, +div[class*="wide-"].markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer > div { + max-width: 100%; + margin-inline: auto; + width: 100%; +} + +/* === Wide Dataview, Table & Backlink === */ +/* Editing View -- set all divs back to normal width (ensuring specificity rule over some theme), then expand to full-width for each selected css class (i.e. wide-dataview, wide-table and wide-backlinks) */ +div.markdown-source-view.mod-cm6:is(.wide-dataview,.wide-table,.wide-backlinks,.wide-callout) .cm-contentContainer.cm-contentContainer > div > div, +div.markdown-source-view.mod-cm6:is(.wide-dataview,.wide-table,.wide-backlinks,.wide-callout) .cm-contentContainer.cm-contentContainer > div > .cm-line { + max-width: var(--file-line-width); + margin-inline: auto !important; +} /* important for margin needed because app.css:2842 use it */ +div[class*="-dataview"].markdown-source-view.mod-cm6 .cm-contentContainer.cm-contentContainer > div > div.cm-preview-code-block:not(.admonition-parent), +div[class*="-table"].markdown-source-view.mod-cm6 .cm-contentContainer.cm-contentContainer > div > div:is(.HyperMD-table-row, .cm-table-widget), +div[class*="-callout"].markdown-source-view.mod-cm6 .cm-contentContainer.cm-contentContainer > div > div:is(.cm-callout,.admonition-parent), +div[class*="-backlinks"].markdown-source-view.mod-cm6 .cm-contentContainer.cm-contentContainer > div:is(.embedded-backlinks) > div { + max-width: 100%; +} + +div[class*="-dataview"].markdown-source-view.mod-cm6 .cm-contentContainer.cm-contentContainer > div > div.cm-preview-code-block>div[class^="block-language"]:not(.block-language-dataview) { + max-width: var(--file-line-width); + margin-inline: auto; +} + +/* Reading View -- similar to Editing View, set all divs to normal-width and then selected divs to full-width, however, for Reading View, wide-dataview and wide-table will require Contextual Typography plugin */ +div.markdown-preview-view:is(.wide-dataview,.wide-table,.wide-backlinks,.wide-callout) .markdown-preview-sizer.markdown-preview-sizer > div { + max-width: var(--file-line-width); + margin-inline: auto; +} +div[class*="-dataview"].markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer > div:is(.el-lang-dataview), +div[class*="-table"].markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer > div:is(.el-table), +div[class*="-callout"].markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer > div:is([data-callout],.admonition-parent), +div[class*="-backlinks"].markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer > div:is(.embedded-backlinks) { + max-width: 100%!important; +} + +/***end--Full-width table display--end****/ + +.popover mark { + color: var(--text-normal); +} + +.theme-light .cm-s-obsidian span.cm-formatting-highlight, +.theme-light .cm-s-obsidian span.cm-highlight:not([class*="code"]), +.theme-light :is(.markdown-preview-view,.markdown-rendered) mark, +.theme-light .cm-formatting.cm-formatting-highlight.cm-strong.cm-em.cm-highlight, +.theme-light .popover mark, +.theme-light span.cm-strong.cm-em.cm-highlight { + background-color: hsla(var(--text-highlight-bg-h-light), var(--text-highlight-bg-s-light), var(--text-highlight-bg-l-light), var(--text-highlight-bg-a-light)); +} +.theme-dark .cm-s-obsidian span.cm-formatting-highlight, +.theme-dark .cm-s-obsidian span.cm-highlight:not([class*="code"]), +.theme-dark :is(.markdown-preview-view,.markdown-rendered) mark, +.theme-dark .cm-formatting.cm-formatting-highlight.cm-strong.cm-em.cm-highlight, +.theme-dark .popover mark, +.theme-dark span.cm-strong.cm-em.cm-highlight { + background-color: hsla(var(--text-highlight-bg-h-dark), var(--text-highlight-bg-s-dark), var(--text-highlight-bg-l-dark), var(--text-highlight-bg-a-dark)); +} + +.theme-light :is(.markdown-preview-view,.markdown-rendered) :not(font)>strong>em>mark { + background-color: hsla(var(--text-highlight-bg-h-light), calc(var(--text-highlight-bg-s-light) * 1.5), calc(var(--text-highlight-bg-l-light) * 0.6), calc(var(--text-highlight-bg-a-light) * 0.28)); +} + +.theme-dark :is(.markdown-preview-view,.markdown-rendered) :not(font)>strong>em>mark { + background-color: hsla(var(--text-highlight-bg-h-dark), calc(var(--text-highlight-bg-s-dark) * 1.5), calc(var(--text-highlight-bg-l-dark) * 1.1), calc(var(--text-highlight-bg-a-dark) * 0.55)); +} + +body:not(.remove-colorful-highlight-bg) .cm-em.cm-formatting.cm-formatting-highlight.cm-highlight, +body:not(.remove-colorful-highlight-bg) .cm-em.cm-formatting.cm-formatting-highlight.cm-highlight + .cm-em.cm-highlight:not([class*="strong"]), +.markdown-source-view.colorful-highlight .cm-em.cm-formatting.cm-formatting-highlight.cm-highlight, +.markdown-source-view.colorful-highlight .cm-em.cm-formatting.cm-formatting-highlight.cm-highlight + .cm-em.cm-highlight:not([class*="strong"]), +body:not(.remove-colorful-highlight-bg) :is(.markdown-preview-view,.markdown-rendered) :not(font):not(strong)>em>mark, +:is(.markdown-preview-view,.markdown-rendered).colorful-highlight :not(font):not(strong)>em>mark { + background-color: var(--bg-color-highlight-1); + color: var(--color-highlight-1); + font-style: normal; + font-weight: var(--font-weight-highlight-1); +} +body:not(.remove-colorful-highlight-bg) :is(.markdown-preview-view,.markdown-rendered) :not(font):not(strong)>em>mark { + border-radius: var(--radius-xs); +} + +body:not(.remove-colorful-highlight-bg) .cm-formatting.cm-formatting-highlight.cm-highlight.cm-strong, +body:not(.remove-colorful-highlight-bg) .cm-formatting.cm-formatting-highlight.cm-highlight.cm-strong + .cm-highlight.cm-strong:not([class*="em"]), +.markdown-source-view.colorful-highlight .cm-formatting.cm-formatting-highlight.cm-highlight.cm-strong, +.markdown-source-view.colorful-highlight .cm-formatting.cm-formatting-highlight.cm-highlight.cm-strong + .cm-highlight.cm-strong:not([class*="em"]), +body:not(.remove-colorful-highlight-bg) :is(.markdown-preview-view,.markdown-rendered) :not(font):not(em)>strong>mark, +:is(.markdown-preview-view,.markdown-rendered).colorful-highlight :not(font):not(em)>strong>mark { + background-color: var(--bg-color-highlight-2) !important; + color: var(--color-highlight-2) !important; + font-weight: var(--font-weight-highlight-2); +} + +body:not(.remove-colorful-highlight-bg) .cm-em.cm-formatting.cm-formatting-highlight.cm-highlight.cm-strong, +body:not(.remove-colorful-highlight-bg) .cm-em.cm-formatting.cm-formatting-highlight.cm-highlight.cm-strong + .cm-em.cm-highlight.cm-strong, +.markdown-source-view.colorful-highlight .cm-em.cm-formatting.cm-formatting-highlight.cm-highlight.cm-strong, +.markdown-source-view.colorful-highlight .cm-em.cm-formatting.cm-formatting-highlight.cm-highlight.cm-strong + .cm-em.cm-highlight.cm-strong, +body:not(.remove-colorful-highlight-bg) :is(.markdown-preview-view,.markdown-rendered) :not(font)>strong>em>mark, +:is(.markdown-preview-view,.markdown-rendered).colorful-highlight :not(font)>strong>em>mark { + background-color: var(--bg-color-highlight-3) !important; + color: var(--color-highlight-3) !important; + font-style: normal; + font-weight: var(--font-weight-highlight-3); + background-image: initial; + background-clip: initial; + -webkit-background-clip: initial; + -webkit-text-fill-color: initial; +} +body:not(.remove-colorful-highlight-bg) .cm-em.cm-formatting.cm-formatting-highlight.cm-highlight.cm-strong, +body:not(.remove-colorful-highlight-bg) .cm-em.cm-formatting.cm-formatting-highlight.cm-highlight.cm-strong + .cm-em.cm-highlight.cm-strong, +body:not(.remove-colorful-highlight-bg) .cm-em.cm-formatting.cm-formatting-highlight.cm-highlight, +body:not(.remove-colorful-highlight-bg) .cm-em.cm-formatting.cm-formatting-highlight.cm-highlight + .cm-em.cm-highlight:not([class*="strong"]) { + padding: 1px 0; +} + +body.all-rounded-corners-highlight .cm-s-obsidian span.cm-highlight, +body.all-rounded-corners-highlight :is(.markdown-preview-view,.markdown-rendered) mark { + -webkit-box-decoration-break: clone; + border-radius: 5px; + padding: 1px 2px; + margin: 0 2px; +} + +body.all-rounded-corners-highlight .cm-s-obsidian .cm-formatting.cm-formatting-highlight:has(+ span.cm-highlight) { + border-radius: 5px 0 0 5px; + padding: 1px 0; + margin: 0 -5px 0 2px; +} + +body.all-rounded-corners-highlight .cm-s-obsidian .cm-formatting.cm-formatting-highlight+span.cm-highlight:has(+ span.cm-highlight) { + padding: 1px 4px; +} + +body.all-rounded-corners-highlight .cm-s-obsidian span.cm-highlight+.cm-formatting.cm-formatting-highlight { + border-radius: 0 5px 5px 0; + padding: 1px 0; + margin: 0 2px 0 -5px; +} + +body.no-rounded-corners-highlight .cm-s-obsidian span.cm-highlight, +body.no-rounded-corners-highlight :is(.markdown-preview-view,.markdown-rendered) mark { + border-radius: 0; + padding: 0; + margin: 0; +} + +.status-bar, +.side-dock.mod-right, +.side-dock.mod-left { + border-color: var(--panel-border-color); + border-width: 1px; +} +/* ----状态栏透明开关----------- */ + +body.bt-search-bar-bottom .document-search-container { + bottom: 38px; + width: 100% !important; + position: absolute; + height: 62px !important; + margin: 0 5px; +} +body.bt-status-on .status-bar { + position: sticky; +} +.status-bar { + --bar-vertical-padding: 5px; + --bar-height: calc(22px + (var(--bar-vertical-padding))); + line-height: 1; + height: var(--bar-height); + max-height: var(--bar-height); + min-height: var(--bar-height); + overflow: hidden; + color: var(--status-bar-text-color); + border-top: 1px solid var(--panel-border-color); + background-color: var(--status-bar-bg); +} + +.is-translucent .status-bar { + margin: 0; +} + +body.dark-background-file .nav-file-title.is-active { + background-color: var(--theme-color); + color: var(--white); +} + +/** file name**/ + +body.file-name-animation .nav-file-title-content:not(.is-being-renamed):hover { + animation: filemove 1.5s 1 normal linear; +} + +body.file-name-animation .nav-file-title-content:not(.is-being-renamed) { + min-width: 200px; + white-space: nowrap; +} +body.file-name-animation .nav-file { + display: table; +} +/** file folder name**/ +body.file-name-animation .obsidian-icon-folder-icon { + vertical-align: middle; + display: inline; +} + +body.file-name-animation .nav-folder-title { + white-space: nowrap; +} + +.nav-folder-title-content.is-being-renamed { + white-space: break-spaces; +} + +body.file-name-animation .nav-folder-title-content:not(.is-being-renamed) { + min-width: 200px; + white-space: nowrap; +} +body.file-name-animation .nav-folder-title-content:not(.is-being-renamed):hover { + animation: filemove 1.5s 1 normal linear; +} + +@keyframes filemove { + 0% {transform: translate(0, 0);} + 100% {transform: translate(calc(-100% + 200px), 0);} +} + +body.file-bg-rounded-rectangle .nav-file-title.is-active, +body.file-bg-rounded-rectangle .nav-folder-title.is-active, +body:not(.is-grabbing).file-bg-rounded-rectangle .nav-file-title:hover, +body:not(.is-grabbing).file-bg-rounded-rectangle .nav-folder-title:hover { + border-radius: var(--radius-m); +} + +body.file-bg-pill .nav-file-title.is-active, +body.file-bg-pill .nav-folder-title.is-active, +body:not(.is-grabbing).file-bg-pill .nav-file-title:hover, +body:not(.is-grabbing).file-bg-pill .nav-folder-title:hover { + border-radius: 15px; +} + +body.file-bg-pill .nav-folder.mod-root>.nav-folder-title { + margin-left: -2px; +} + +.item-list { + padding: 0; +} + +body.file-bg-pill .item-list { + padding: 0 4px 0 1px; +} + +.item-list .nav-file-icon { + margin-left: 2px; +} + +.nav-file-title.is-active { + background-color: var(--theme-color-translucent-01); +} + +body:not(.is-grabbing) .tree-item-self.is-clickable.nav-folder-title:hover { + background-color: color-mix(in srgb, var(--nav-item-background-active), transparent 0%); + color: var(--text-normal); + font-weight: bold; +} + +.nav-folder-title.is-being-dragged-over { + border-radius: var(--radius-xs); + color: var(--theme-color); + background: var(--theme-color-translucent-015); +} + +body:not(.is-grabbing) .tree-item-self.is-clickable.nav-file-title.is-active:hover, +body:not(.is-grabbing) .tree-item-self.is-clickable.nav-file-title:hover, +.nav-file:not(.is-active):hover .nav-file-title, +.nav-folder:hover .nav-folder-content { + background-color: var(--theme-color-translucent-01); +} + +body.is-grabbing .nav-folder-title:hover, +body.is-grabbing .nav-file-title:hover { + font-weight: bold !important; + color: var(--theme-color); + filter: hue-rotate(160deg); + background-color: var(--theme-color-translucent-015); + opacity: 1; +} + +.workspace-leaf.mod-active .nav-folder.has-focus > .nav-folder-title, +.workspace-leaf.mod-active .nav-file.has-focus > .nav-file-title { + background-color: var(--theme-color-translucent-015); +} + +body.is-grabbing:not(.remove-file-icons):not(.bt-toggle-colorful-folder.folder-style-change-options-colorful) .nav-file-title.is-active[data-path$=".md"]>.nav-file-title-content::before, +body:not(.remove-file-icons):not(.bt-toggle-colorful-folder.folder-style-change-options-colorful) .nav-file-title.is-active[data-path$=".md"]:hover>.nav-file-title-content::before { + filter: hue-rotate(160deg); +} + +.side-dock-plugin-panel-inner { + padding-left: 6px; +} + +/*link*/ +:is(.markdown-preview-view,.markdown-rendered) .internal-link { + font-family: var(--font-family-strong) !important; +} + +body:not(.default-unresolved-link) :is(.markdown-preview-view,.markdown-rendered) .internal-link.is-unresolved>*, +body:not(.default-unresolved-link) *>.internal-link.is-unresolved, +body:not(.default-unresolved-link) .markdown-source-view.mod-cm6 .cm-hmd-internal-link .is-unresolved { + color: var(--unresolved-link) !important; +} + +body:not(.default-unresolved-link) .markdown-source-view.mod-cm6 .is-unresolved, +body:not(.default-unresolved-link) :is(.markdown-preview-view,.markdown-rendered) .internal-link.is-unresolved { + opacity: 0.7; +} + +body.link-underline-unresolved :is(.markdown-preview-view,.markdown-rendered) .internal-link.is-unresolved>*, +body.link-underline-unresolved *>.internal-link.is-unresolved, +body.link-underline-unresolved .markdown-source-view.mod-cm6 .cm-hmd-internal-link .is-unresolved, +body.link-underline-unresolved .markdown-source-view.mod-cm6 .is-unresolved, +body.link-underline-unresolved :is(.markdown-preview-view,.markdown-rendered) .internal-link.is-unresolved, +body.link-underline-unresolved .cm-hmd-internal-link .is-unresolved .cm-underline { + text-decoration: none !important; +} + +body:not(.default-unresolved-link) :is(.markdown-preview-view,.markdown-rendered) mark .internal-link.is-unresolved { + opacity: 0.9; +} + +:is(.markdown-preview-view,.markdown-rendered) .internal-link.is-unresolved:hover { + opacity: 1 !important; +} + +a.internal-link, +.cm-s-obsidian span.cm-link, +.cm-s-obsidian span.cm-hmd-internal-link { + color: var(--internal-link-color) !important; +} + +.cm-s-obsidian span.cm-link:hover, +.cm-s-obsidian span.cm-hmd-internal-link:hover { + background: var(--theme-color-translucent-01); +} +/* internal link in highlight +.cm-highlight.cm-hmd-internal-link, +:is(.markdown-preview-view,.markdown-rendered) mark .internal-link:not(.is-unresolved) { + color: var(--internal-link-color-in-highlight) !important; +} +*/ + +:is(.markdown-preview-view,.markdown-rendered) a:hover { + color: var(--text-accent); + border-radius: var(--radius-xs); + text-decoration: none !important; + transition: all 0.4s ease-in-out; + text-shadow: var(--window-shadow-hover); + background: var(--theme-color-translucent-01); +} + +body.colorful-link-animation :is(.markdown-preview-view,.markdown-rendered) a:hover { + animation: 2s colorful-link infinite; +} + +@keyframes colorful-link { + 0% { filter: hue-rotate(0deg); } + 100% { filter: hue-rotate(360deg); } +} + +a.external-link { + text-decoration: underline; + color: var(--external-link-color); +} + + +body.link-underline-external .markdown-source-view.mod-cm6 .cm-link .cm-underline, +body.link-underline-externa .markdown-source-view.mod-cm6 .cm-url .cm-underline, +body.link-underline-external a.external-link, +body:not(.link-underline-internal) .markdown-source-view.mod-cm6 .cm-hmd-internal-link >*:not(.is-unresolved).cm-underline, +body:not(.link-underline-internal) :is(.markdown-preview-view,.markdown-rendered) .internal-link:not(.is-unresolved) { + text-decoration-line:none; +} + +.cm-url:hover { + transition: all 600ms; +} + +.cm-s-obsidian div.HyperMD-codeblock-bg { + background: var(--background-code); +} + +.theme-dark :not(pre)>code[class*='language-'], +.theme-dark pre[class*='language-'] { + background: var(--background-code) ; + border-radius: var(--radius-m); +} + +.theme-light :not(pre)>code[class*='language-'], +.theme-light pre[class*='language-'] { + background: var(--background-code); + border-radius: var(--radius-m); +} + +.theme-light code[class*="language-"], +.theme-light pre[class*="language-"] { + text-shadow: none; + color: var(--code-normal); + letter-spacing: calc(var(--letter-space-code) * 0.02em); +} + +.theme-dark code[class*="language-"], +.theme-dark pre[class*="language-"] { + color: var(--code-normal); + text-shadow: none; + letter-spacing: calc(var(--letter-space-code) * 0.02em); +} + +body.codebox-frosted-glass .canvas-node-container pre[class*='language-'] { + backdrop-filter: none; +} +body.codebox-frosted-glass .cm-s-obsidian div.HyperMD-codeblock-bg, +body.codebox-frosted-glass :not(pre)>code[class*='language-'], +body.codebox-frosted-glass pre[class*='language-'] { + backdrop-filter: blur(calc(var(--blur-codebox-frosted-glass) * 2px)); +} + +code[class*="language-"] { + padding: 1em 0.5em; +} + +/*embedded*/ +body.naked-embed.theme-dark, +body.naked-embed.theme-light { + --embed-color: transparent !important; +} +body.naked-embed .markdown-source-view.mod-cm6 .markdown-embed { + border: none; +} +body.hide-embed-title .markdown-embed-title{ + display: none; +} +body.embed-hd .markdown-embed :is(.markdown-preview-view,.markdown-rendered) :is(h1,h2,h3,h4,h5,h6) { + display: none; +} +.hide-embed-banner .markdown-embed-content .obsidian-banner-wrapper { + display: none; +} + + +.popover.hover-popover :is(.markdown-preview-view,.markdown-rendered) .markdown-embed, +.popover .markdown-preview-sizer:is(.markdown-preview-section,.markdown-rendered) { + height: auto; + min-height: min-content !important; +} + + +body.embed-hover.theme-light :is(.markdown-preview-view,.markdown-rendered) .internal-embed .markdown-embed:hover { + box-shadow: 0 3px 8px 0 rgba(0, 0, 0, .25); + transition: all .2s ease-in-out; + transform: translate3d(0px, -3px, 0px); +} +body.embed-hover.theme-light .markdown-source-view .internal-embed .markdown-embed:hover { + background: var(--background-primary-alt); + color: var(--text-normal); + border-radius: 6px; + border-width: 1px; + box-shadow: 0 1rem 2rem rgba(0, 0, 0, 0.1); +} + +body.embed-hover.theme-dark .internal-embed .markdown-embed:hover { + box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); + transform: translate3d(0px, -3px, 0px); +} + +body:not(.is-mobile).hover-scrollbars .markdown-embed:not(.canvas-node-content), +body:not(.is-mobile).hover-scrollbars .popover.hover-popover .markdown-embed .markdown-embed { + padding: 0 0 0 1em; +} +.markdown-embed:not(.canvas-node-content), +.popover.hover-popover .markdown-embed .markdown-embed { + background-color: var(--embed-color); + border: 1px solid var(--embed-color); + border-radius: var(--radius-xs); + margin-bottom: 0; + padding: 0 0.5em 0 1em; + margin-top: 0; +} +.popover.hover-popover, +.popover.hover-popover .markdown-embed { + background-color: var(--background-popover); +} + + +.markdown-embed-link, +.file-embed-link { + position: absolute; + top: 2px; + right: 2px; + color: var(--text-faint); + cursor: pointer; + opacity: 0; +} + +.markdown-embed:hover .markdown-embed-link, +.markdown-embed:hover .file-embed-link { + opacity: 1; +} + +.markdown-source-view .markdown-embed { + border-color: transparent; + border-radius: var(--radius-xs); +} + +:is(.markdown-preview-view,.markdown-rendered,.cm-s-obsidian) .file-embed { + border: 2px solid var(--embed-color); + border-radius: var(--radius-l); + padding: 0.1em 0.5em; + margin: 0.1em 0; + background-color: transparent; +} + +:is(.markdown-preview-view,.markdown-rendered,.cm-s-obsidian) .file-embed:hover { + border: 2px solid var(--theme-color-translucent-04); + background-color: var(--embed-color); + border-radius: var(--radius-m); +} + +.markdown-embed .markdown-preview-sizer:is(.markdown-preview-section,.markdown-rendered):first-child :is(h1,h2,h3,h4,h5,h6) { + margin-block-start: 0.5em; +} + +.inline-embed .markdown-embed-content p:first-child { + margin: 0.5em 0; +} + +body:not(.adjustable-embed-content-height) :is(.markdown-preview-view,.markdown-rendered) .markdown-embed-content { + padding-right: 0; + max-height: 100%; + max-width: 100%; + overflow: auto; +} + +body.adjustable-embed-content-height :is(.markdown-preview-view,.markdown-rendered) .markdown-embed-content { + padding-right: 0; + max-height: var(--embed-content-height); + max-width: 100%; + overflow: auto; +} + +.file-embed-icon { + color: var(--theme-color); + vertical-align: middle; +} + +.markdown-embed-title { + font-weight: 600; + font-size: var(--font-size-embed-title-size); + line-height: inherit; + height: unset; + word-wrap: break-word; + white-space: pre-wrap; +} + +.file-embed-title { + font-weight: 600; + text-align: left; + line-height: 1.5em; + font-size: var(--font-size-embed-file); +} + +/* Source: https://github.com/AGMStudio/prism-theme-one-dark */ +body:not(.whole-code-wrap) code[class*='language-'], +body:not(.whole-code-wrap) pre[class*='language-'] { + word-spacing: normal; + word-break: normal; + word-wrap: break-word; + white-space: pre; + -moz-tab-size: 4 !important; + -o-tab-size: 4 !important; + tab-size: 4 !important; +} + +body.whole-code-wrap code[class*='language-'], +body.whole-code-wrap pre[class*='language-'] { + word-spacing: normal; + word-wrap: break-word; + white-space: pre-wrap; + word-break: normal; +} + + + +/* Inline code */ +:not(pre)>code[class*='language-'] { + padding: .1em !important; + border-radius: var(--radius-s) !important; + white-space: normal !important; +} + +.token.important, +.token.bold { + font-weight: bold !important; +} + +.token.italic { + font-style: italic !important; +} + +.token.entity { + cursor: help !important; +} + +/*show language type in preview mode*/ +/*Thanks to elutao from https://snippets.cacher.io/snippet/018387c872dc39277996 */ +body:not(.remove-language-type) pre::before { + font-family: var(--font-default); + color: #95a3b5; + opacity: 0.7; + font-size: 0.85em; + font-weight: 600; + position: absolute; + right: 48px; + top: 0.05em; +} + +pre { + position: relative; +} + +body:not(.remove-language-type) pre[class~='language-c']::before { + content: "C"; +} +body:not(.remove-language-type) pre[class~='language-py']::before, +body:not(.remove-language-type) pre[class~='language-python']::before { + content: "PYTHON"; +} +body:not(.remove-language-type) pre[class~='language-nginx']::before { + content: "NGINX"; +} +body:not(.remove-language-type) pre[class~='language-css']::before { + content: "CSS"; +} +body:not(.remove-language-type) pre[class~='language-javascript']::before { + content: "JS"; +} +body:not(.remove-language-type) pre[class~='language-js']::before { + content: "JS"; +} +body:not(.remove-language-type) pre[class~='language-php']::before { + content: "PHP"; +} +body:not(.remove-language-type) pre[class~='language-shell']::before, +body:not(.remove-language-type) pre[class~='language-bash']::before { + content: "SHELL"; +} +body:not(.remove-language-type) pre[class~='language-flow']::before { + content: "FLOW"; +} +body:not(.remove-language-type) pre[class~='language-sequence']::before { + content: "SEQUENCE"; +} +body:not(.remove-language-type) pre[class~='language-sql']::before { + content: "SQL"; +} +body:not(.remove-language-type) pre[class~='language-yaml']::before { + content: "YAML"; +} +body:not(.remove-language-type) pre[class~='language-ini']::before { + content: "INI"; +} +body:not(.remove-language-type) pre[class~='language-xml']::before { + content: "XML"; +} +body:not(.remove-language-type) pre[class~='language-git']::before { + content: "GIT"; +} +body:not(.remove-language-type) pre[class~='language-cs']::before { + content: "C#"; +} +body:not(.remove-language-type) pre[class~='language-cpp']::before { + content: "C++"; +} +body:not(.remove-language-type) pre[class~='language-java']::before { + content: "JAVA"; +} +body:not(.remove-language-type) pre[class~='language-html']::before { + content: "HTML"; +} +body:not(.remove-language-type) pre[class~='language-txt']::before { + content: "TXT"; +} +body:not(.remove-language-type) pre[class~='language-r']::before { + content: "R"; +} +body:not(.remove-language-type) pre[class~='language-matlab']::before { + content: "MATLAB"; +} + +/* ==== fold icons ==== */ +.CodeMirror-guttermarker-subtle { + color: var(--text-normal); +} + +/*-- reduce left padding --*/ +div:not(.CodeMirror-activeline)>.CodeMirror-line span.cm-formatting.cm-formatting-header { + font-size: 0.6rem !important; + opacity: 0.5; +} + +div.CodeMirror-activeline .CodeMirror-line span.cm-formatting.cm-formatting-header { + font-size: 0.6rem !important; + opacity: 1; +} + +span.cm-formatting.cm-formatting-header { + opacity: 0.45; +} + +body.image-border img{ + border: 1px solid rgba(var(--mono-rgb-100),0.1); + filter: drop-shadow(0px 0px 3px rgba(var(--mono-rgb-100),0.2)); +} +/* images : reduce displayed size of embedded files, zoom on hover */ +body:not(.obsidian-default-image) :is(.markdown-preview-view, .markdown-rendered) .workspace-leaf-content[data-type="markdown"] img:not([class*="emoji"]) { + max-width: var(--image-max-width); + margin-left: auto; + margin-right: auto; +} + +body:not(.obsidian-default-image) .print :is(.markdown-preview-view, .markdown-rendered) img:not([class*="emoji"]) { + display: block; +} + +body:not(.obsidian-default-image) .workspace-leaf-content[data-type="markdown"] .view-content :not(.canvas-node-content)>img:not([class*="emoji"]) { + cursor: zoom-in; + display: block; + margin-left: auto ; + margin-right: auto; +} + +body:not(.image-zoom) .markdown-reading-view button img, +body:not(.image-zoom) .markdown-reading-view .callout-title-inner img { + pointer-events: none; +} + +body:not(.image-zoom) .markdown-reading-view img:not([class*="emoji"]):active, +.workspace-leaf-content[data-type="image"] img:active { + cursor: zoom-out !important; + position: fixed; + object-fit: contain; + max-height: 100%; + max-width: 100%; + height: 100%; + width: 100%; + margin: 1px auto 0; + padding: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 200; + background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MCIgaGVpZ2h0PSI4MCIgdmlld0JveD0iMCAwIDgwIDgwIj4KICA8ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgPHJlY3Qgd2lkdGg9IjgwIiBoZWlnaHQ9IjgwIiBmaWxsPSIjRjJGNEY2Ii8+CiAgICA8ZyBmaWxsPSIjRkZGIj4KICAgICAgPHJlY3Qgd2lkdGg9IjIiIGhlaWdodD0iNzkiIHg9Ijc4Ii8+CiAgICAgIDxyZWN0IHdpZHRoPSIxIiBoZWlnaHQ9IjE5IiB4PSIxOSIvPgogICAgICA8cmVjdCB3aWR0aD0iMSIgaGVpZ2h0PSIxOSIgeD0iMzkiLz4KICAgICAgPHJlY3Qgd2lkdGg9IjEiIGhlaWdodD0iMTkiIHg9IjU5Ii8+CiAgICAgIDxyZWN0IHdpZHRoPSIxIiBoZWlnaHQ9IjE5IiB4PSIxOSIgeT0iMjAiLz4KICAgICAgPHJlY3Qgd2lkdGg9IjEiIGhlaWdodD0iMTkiIHg9IjM5IiB5PSIyMCIvPgogICAgICA8cmVjdCB3aWR0aD0iMSIgaGVpZ2h0PSIxOSIgeD0iNTkiIHk9IjIwIi8+CiAgICAgIDxyZWN0IHdpZHRoPSIxIiBoZWlnaHQ9IjE5IiB4PSIxOSIgeT0iNDAiLz4KICAgICAgPHJlY3Qgd2lkdGg9IjEiIGhlaWdodD0iMTkiIHg9IjM5IiB5PSI0MCIvPgogICAgICA8cmVjdCB3aWR0aD0iMSIgaGVpZ2h0PSIxOSIgeD0iNTkiIHk9IjQwIi8+CiAgICAgIDxyZWN0IHdpZHRoPSIxIiBoZWlnaHQ9IjE5IiB4PSIxOSIgeT0iNjAiLz4KICAgICAgPHJlY3Qgd2lkdGg9IjEiIGhlaWdodD0iMTkiIHg9IjM5IiB5PSI2MCIvPgogICAgICA8cmVjdCB3aWR0aD0iMSIgaGVpZ2h0PSIxOSIgeD0iNTkiIHk9IjYwIi8+CiAgICAgIDxyZWN0IHdpZHRoPSI3OSIgaGVpZ2h0PSIxIiB5PSIxOSIvPgogICAgICA8cmVjdCB3aWR0aD0iNzkiIGhlaWdodD0iMSIgeT0iMzkiLz4KICAgICAgPHJlY3Qgd2lkdGg9Ijc5IiBoZWlnaHQ9IjEiIHk9IjU5Ii8+CiAgICA8L2c+CiAgICA8cmVjdCB3aWR0aD0iODAiIGhlaWdodD0iMiIgeT0iNzgiIGZpbGw9IiNGRkYiLz4KICA8L2c+Cjwvc3ZnPgo="); +} + +body:not(.obsidian-default-image) .internal-embed.image-embed.is-loaded img:not([class*="emoji"]) { + max-width: var(--image-max-width); + margin: 3px auto; + display: block; +} + +.internal-embed[alt$="inline"], +.internal-embed[alt$="Inline"], +.internal-embed[alt$="INLINE"], +.internal-embed[alt$="inl"] { + display: inline ; +} + +body:not(.obsidian-default-image) .markdown-source-view.mod-cm6 img:not([class*="emoji"]) { + display: block; + margin: auto !important; + cursor: help; +} + +body.hide-vault-name .nav-folder.mod-root>.nav-folder-title { + display: none; +} + +body.file-name-wrapped .workspace-leaf-content[data-type="file-explorer"] .nav-file-title-content, +body.file-name-wrapped .workspace-leaf-content[data-type="file-explorer"] .nav-folder-title-content { + white-space: normal; +} + +.nav-file-title-content.is-being-renamed { + margin-left: 0px; + text-indent: 0px; + color: black !important; +} + +/* Cursor color in normal vim mode and opacity */ +.cm-fat-cursor .CodeMirror-cursor, +.cm-animate-fat-cursor { + width: 0.6em; + background: #db9a1f; + opacity: 0.6 !important; +} + +/*an active line highlight in vim normal mode */ +.cm-fat-cursor .CodeMirror-activeline .CodeMirror-linebackground, +.CodeMirror-activeline-background.CodeMirror-linebackground, +.cm-active.cm-line { + background-color: var(--activeline-background) !important; +} + +.mute-code-indent-line .markdown-source-view.mod-cm6 .HyperMD-codeblock .cm-indent::before { + display: none; +} + +.muted-activeline-bg .CodeMirror-activeline-background.CodeMirror-linebackground, +.muted-activeline-bg .markdown-source-view.cm-s-obsidian.mod-cm6 .cm-active.cm-line:not(.HyperMD-codeblock-bg) { + background-color: transparent !important; +} + +.CodeMirror pre.CodeMirror-line, +.CodeMirror pre.CodeMirror-line-like { + padding-left: 0; +} + +.CodeMirror pre.HyperMD-codeblock.CodeMirror-line { + padding-left: 4px; + letter-spacing: calc(var(--letter-space-code) * 0.02em); +} + +.CodeMirror pre.HyperMD-quote.CodeMirror-line { + padding-left: 4px; +} + +.cm-s-obsidian pre.HyperMD-header { + padding-top: 0.25em; +} + +/*linenumber*/ +.is-mobile .cm-lineNumbers .cm-gutterElement, +.cm-s-obsidian .CodeMirror-linenumber { + font-family: var(--font-monospace-theme); + font-size: 0.85em; +} + +.cm-gutter.cm-lineNumbers { + font-family: var(--font-monospace-theme); +} + +.cm-lineNumbers .cm-active.cm-gutterElement { + color: var(--text-accent); + /* background: var(--activeline-background); */ +} + +/*----file explorer smaller fonts & line height----*/ +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title, +.workspace-leaf-content[data-type="file-explorer"] .nav-folder-title { + font-size: var(--font-size-folder-and-file); + font-family: var(--font-family-folder-file-title); + border-radius: 0; +} + +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title { + padding: 1px 5px 3px 4px; + color: var(--text-folder-file); +} + +.workspace-leaf-content[data-type="file-explorer"] .nav-folder-title, +.workspace-leaf-content[data-type="file-explorer"] .tree-item-self.is-clickable.mod-collapsible.nav-folder-title { + font-weight: 600; + padding: 4px 0 4px 23px; + color: var(--text-normal); +} + +/*rename*/ +.nav-file-title-content.is-being-renamed, +.nav-folder-title-content.is-being-renamed { + cursor: text; + border-color: transparent; + background-color: white; + color: black; +} + +/*---- nav arrows adjust location ----*/ +body:not(.default-icons) .nav-folder-collapse-indicator { + position: absolute; + transition: transform 20ms linear 0s; +} + +/* body.default-icons .nav-folder-collapse-indicator { + margin-left: -9px; +} */ + +body:not(.default-icons):not(.remove-arrow) .nav-folder-collapse-indicator::before { + position: absolute; + content: "↓"; + margin-left: 3px; + font-family: 'Inter'; + font-weight: bold; + color: var(--text-accent); + transition: transform 10ms linear 0s; +} + +body:not(.default-icons) .nav-folder-collapse-indicator svg { + display: none; + color: var(--accent-strong); + height: 7px; + width: 7px; +} + +body:not(.unmuted-collapsed-folder):not(.is-grabbing) .nav-folder.is-collapsed .nav-folder-title-content:not(.is-being-renamed) { + opacity: 0.55; +} + +body:not(.default-icons) .nav-folder.is-collapsed .nav-folder-collapse-indicator::before { + transform: rotate(-90deg); + opacity: 0.55; +} + +/*search icon 1*/ +body:not(.default-icons) .backlink-pane .search-result-container .collapse-icon { + transition: transform 20ms linear 0s; +} + +body:not(.default-icons) .backlink-pane .search-result-container .collapse-icon::before { + content: "↓"; + font-size: 14px; + font-family: 'Inter'; + font-weight: bold; + color: var(--text-accent); + transition: transform 10ms linear 0s; +} + +body:not(.default-icons) .backlink-pane .search-result-container .collapse-icon svg { + display: none; + color: var(--accent-strong); + height: 7px; + width: 7px; +} + +body:not(.default-icons) .backlink-pane .search-result-container .tree-item.search-result.is-collapsed .collapse-icon::before { + transform: rotate(-90deg); + opacity: 0.5; +} + +/* search panel icons */ +body:not(.default-icons) .workspace-leaf .search-result-container.mod-global-search .tree-item-self.search-result-file-title.is-clickable .collapse-icon { + transition: transform 20ms linear 0s; +} + +body:not(.default-icons) .workspace-leaf .search-result-container.mod-global-search .tree-item-self.search-result-file-title.is-clickable .collapse-icon::before { + content: "↓"; + font-size: 14px; + font-weight: bold; + font-family: 'Inter'; + color: var(--text-accent); + transition: transform 10ms linear 0s; +} + +body:not(.default-icons) .workspace-leaf .search-result-container.mod-global-search .tree-item-self.search-result-file-title.is-clickable .collapse-icon svg { + display: none; + color: var(--accent-strong); + height: 7px; + width: 7px; +} + +body:not(.default-icons) .workspace-leaf .search-result-container.mod-global-search .tree-item.search-result.is-collapsed .collapse-icon::before { + transform: rotate(-90deg); + opacity: 0.5; +} + +/* header collaspe indicators*/ +:is(.markdown-preview-view,.markdown-rendered) div.is-collapsed :is(h1,h2,h3,h4,h5,h6)::after, +:is(.markdown-preview-view,.markdown-rendered) li.is-collapsed::after { + content: "..."; + padding: 5px; + color: var(--text-faint); +} + +body:not(.default-icons) div.heading-collapse-indicator.collapse-indicator { + position: absolute; + margin: 15px 0 0 -20px; + padding: 0; + transition: transform 20ms linear 0s; +} + +body:not(.default-icons) :is(h1,h2) div.heading-collapse-indicator.collapse-indicator { + position: absolute; + transition: transform 20ms linear 0s; +} + +body:not(.default-icons) div.heading-collapse-indicator.collapse-indicator::before { + content: "↓"; + position: absolute; + font-size: 15px; + font-weight: bold; + font-family: 'Inter'; + color: var(--text-accent); + transition: transform 10ms linear 0s; + opacity: 0; +} + +body:not(.default-icons) .heading-collapse-indicator.collapse-indicator.collapse-icon svg { + display: none; +} + +body:not(.default-icons) div.is-collapsed div.heading-collapse-indicator.collapse-indicator { + transform: translateX(7px) translateY(7px) rotate(-90deg); +} + +body:not(.default-icons) div.is-collapsed div.heading-collapse-indicator.collapse-indicator::before, +body:not(.default-icons) :is(h1,h2,h3,h4,h5,h6):hover div.heading-collapse-indicator.collapse-indicator::before { + opacity: 1; +} + +body:not(.default-icons) .outline .tree-item .collapse-icon { + padding: 0; + transition: transform 20ms linear 0s; +} + +body:not(.default-icons) .outline .tree-item .collapse-icon::before { + content: "↓"; + font-size: 1em; + font-weight: bold; + font-family: 'Inter'; + color: var(--text-accent); + transition: transform 10ms linear 0s; +} + +body:not(.default-icons) .outline .tree-item .collapse-icon svg { + display: none; + color: var(--accent-strong); + height: 7px; + width: 7px; +} + +body:not(.default-icons) .outline .tree-item.is-collapsed .collapse-icon::before { + transform: rotate(-90deg); + opacity: 0.5; +} + +/*vertical lines in outline page*/ +.outline .tree-item-children { + margin-left: 14px; + border-left: 1px solid #94949433; + border-radius: 0; + transition: all 400ms ease-in-out; +} + +body.default-icons .outline .tree-item-children { + margin-left: 12.5px; +} + +.outline .tree-item-children:hover { + border-left-color: var(--theme-color-translucent-04); +} + +.tree-item-flair { + line-height: 17px; + padding-top: 3px; + height: 1.45rem; +} + +body.nowrap-outline .outline .tree-item-inner { + white-space: nowrap; +} +/*****from https://www.yuque.com/fanmofeng/obsidian/ioifq0 *******/ + +body.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .outline .collapse-icon { + padding-inline-end: var(--size-2-3); +} +body.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .outline .collapse-icon::before { + content: "" !important; +} +body.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .outline .tree-item { + position: relative; +} +body.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .outline .tree-item-self { + position: relative; + margin-bottom: 0; + white-space: nowrap; + margin-top: -1px; /* fix item gap */ +} +body.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .outline .tree-item-self .tree-item-inner { + padding-left: 4px; + overflow: hidden; + text-overflow: ellipsis; + height: calc(var(--nav-item-size) * 1.8); + line-height: calc(var(--nav-item-size) * 1.8); +} +body.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .outline .tree-item-self .tree-item-inner::before { + content: ""; + width: var(--size-4-1); + height: var(--size-4-1); + border: 2px solid hsla(var(--color-accent-hsl), 0.9); + border-radius: 50%; + position: absolute; + margin-left:-1.5em; + top: 50%; + transform: translateY(-50%); +} +body.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .outline .tree-item-self .tree-item-icon ~ .tree-item-inner { + padding-left: 4px; +} +body.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .outline .tree-item-self .tree-item-icon ~ .tree-item-inner::before { + content: none; +} +body.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .outline .tree-item.is-collapsed .tree-item-icon::before { + box-shadow: 0 0 0 4px var(--background-modifier-hover); +} +body.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .outline .tree-item::after { + content: ""; + width: 1.5px; + position: absolute; + background-color: transparent; + top: calc(calc(var(--nav-item-size) * 1.8) / 2 * -1); + left: -10px; + height: calc(100% - calc(var(--nav-item-size) * 1.8) + var(--size-4-8)); +} +body.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .outline .tree-item-icon { + cursor: pointer; +} +body.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .outline .tree-item-icon::before { + margin-top: 50%; + width: var(--size-4-2); + height: var(--size-4-2); + background-color: hsla(var(--color-accent-hsl), 0.9); + border-radius: 50%; + position: absolute; + left: 4px; + top: 50%; + transform: translateY(-50%); +} +body.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .outline .tree-item-icon svg { + display: block; +} +body.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .outline .tree-item-icon svg path { + display: none; +} +body.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .outline .tree-item:hover > .tree-item-children > .tree-item::after { + background-color: hsla(var(--color-accent-hsl), 0.9); +} +body.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .outline .tree-item:hover > .tree-item-self:hover + .tree-item-children .tree-item::after { + background-color: transparent; +} +body.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .outline .tree-item:hover > .tree-item-children > .tree-item:hover::after, body.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .outline .tree-item:hover > .tree-item-children > .tree-item:hover ~ .tree-item::after { + background-color: transparent; +} +body.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .outline .tree-item:hover > .tree-item-children > .tree-item:hover::before { + content: ""; + position: absolute; + top: calc(calc(var(--nav-item-size) * 1.8) / 2 * -1); + left: -10px; + bottom: calc(100% - (calc(var(--nav-item-size) * 1.8) + var(--size-4-2)) / 2 - 1px); + width: 16px; + border-bottom-left-radius: var(--radius-m); + border-bottom: 1.5px solid hsla(var(--color-accent-hsl), 0.9); + border-left: 2px solid hsla(var(--color-accent-hsl), 0.9); +} +body.logseq-outline-style .workspace-leaf-content[data-type=outline] .view-content .outline :is(.tree-item-children, .tree-item-self .tree-item-self) { + padding-left: 0; + margin-left: var(--size-4-5); + border-left: none; +} + +/*tag collapse indicator*/ +.tag-container .tree-item-children { + border-left: 1px solid #94949433; + border-radius: 0 3px 3px 0; + transition: all 300ms ease-in-out; +} + +.tag-container .tree-item-children > div[style="width: 1px; height: 0.1px; margin-bottom: 0px;"] { + height: 0 !important; +} + +.tag-container .tree-item-self .tree-item-icon svg { + display: none; +} + +.tag-container .tree-item-self .tree-item-icon::before { + content: "#"; + font-size: 1em; + font-weight: bold; + font-family: 'Inter'; + color: var(--text-accent); + transition: transform 10ms linear 0s; +} + +.tag-container .tree-item-children:hover { + border-left-color: var(--theme-color); +} + +.tag-container .tree-item.is-collapsed .collapse-icon { + opacity: 0.5; +} + +/*setting panel*/ + +.modal .modal-title { + margin-left: 1em; +} +.modal-content .cmdr-setting-content { + height: auto; +} +[class='modal'] { + max-width: unset ; + width: unset; + min-width: var(--dialog-width); +} + +.modal.mod-settings { + border: none; +} + +.modal.mod-narrow .modal-content { + overflow: hidden; +} + +.vertical-tab-nav-item { + padding: 6px 6px 6px 24px; + margin-bottom: 0; +} + + +.modal.mod-settings .vertical-tab-content-container { + padding: 0; +} + +.modal-content .cmdr-setting-content { + height: auto; +} + +.vertical-tab-content .setting-item { + padding: 8px 0; +} + +.is-phone .setting-item-heading { + margin-top: 0px; + margin-bottom: 0px; +} + +.modal button:not(.mod-cta):not(.mod-warning):hover { + background-color: var(--interactive-accent-hover); + color: #fdfdfd; +} +.modal .community-modal-details { + background-color: var(--background-primary); +} +.community-theme-container .clickable-icon { + color: var(--accent-strong) +} + +.dropdown { + background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDIwMDEwOTA0Ly9FTiIKICJodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL1JFQy1TVkctMjAwMTA5MDQvRFREL3N2ZzEwLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4wIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiB3aWR0aD0iMTI4MC4wMDAwMDBwdCIgaGVpZ2h0PSI2NDAuMDAwMDAwcHQiIHZpZXdCb3g9IjAgMCAxMjgwLjAwMDAwMCA2NDAuMDAwMDAwIgogcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCI+CjxtZXRhZGF0YT4KQ3JlYXRlZCBieSBwb3RyYWNlIDEuMTUsIHdyaXR0ZW4gYnkgUGV0ZXIgU2VsaW5nZXIgMjAwMS0yMDE3CjwvbWV0YWRhdGE+CjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuMDAwMDAwLDY0MC4wMDAwMDApIHNjYWxlKDAuMTAwMDAwLC0wLjEwMDAwMCkiCmZpbGw9IiMyMTk2ZjMiIHN0cm9rZT0ibm9uZSI+CjxwYXRoIGQ9Ik0xMCA2MzkyIGMwIC00IDE0MzggLTE0NDUgMzE5NSAtMzIwMiBsMzE5NSAtMzE5NCAzMTk1IDMxOTQgYzE3NTcKMTc1NyAzMTk1IDMxOTggMzE5NSAzMjAyIDAgNSAtMjg3NSA4IC02MzkwIDggLTM1MTUgMCAtNjM5MCAtMyAtNjM5MCAtOHoiLz4KPC9nPgo8L3N2Zz4K); +} + +/*translucent setting panel*/ +body.translucent-setting-panel .modal-bg { + background-color: var(--background-secondary-translucent-1); +} + + + +body.setting-default-frosted-glass .prompt { + background-color: var(--bg-color-settings-4); + backdrop-filter: blur(3px); +} + +body.setting-default-frosted-glass.theme-dark .prompt { + backdrop-filter: blur(8px); +} + +body.setting-default-frosted-glass .vertical-tab-header-group-title { + color: var(--text-normal); + border-top: 1px dashed var(--text-muted); +} + +body.translucent-setting-panel .modal-bg, +body.setting-default-frosted-glass .modal-bg { + background-color: var(--bg-color-settings-0); + backdrop-filter: blur(5px); +} + +body.translucent-setting-panel .modal.mod-settings, +body.setting-default-frosted-glass .modal.mod-settings { + background-color: var(--bg-color-settings-0-1); + box-shadow: 0 0 20px var(--bg-color-settings-1); +} + +body.translucent-setting-panel .modal.mod-settings, +body.setting-default-frosted-glass .modal.mod-settings { + border: none; +} +body.setting-default-frosted-glass .vertical-tab-header, +body.translucent-setting-panel .vertical-tab-header { + background-color: var(--bg-color-settings-1); +} +body.translucent-setting-panel .horizontal-tab-nav-item, +body.translucent-setting-panel .vertical-tab-nav-item, +body.setting-default-frosted-glass .horizontal-tab-nav-item, +body.setting-default-frosted-glass .vertical-tab-nav-item { + background-color: transparent; +} + +body.translucent-setting-panel .horizontal-tab-nav-item:hover, +body.translucent-setting-panel .vertical-tab-nav-item:hover, +body.translucent-setting-panel .horizontal-tab-nav-item.is-active, +body.translucent-setting-panel .vertical-tab-nav-item.is-active, +body.setting-default-frosted-glass .horizontal-tab-nav-item:hover, +body.setting-default-frosted-glass .vertical-tab-nav-item:hover, +body.setting-default-frosted-glass .horizontal-tab-nav-item.is-active, +body.setting-default-frosted-glass .vertical-tab-nav-item.is-active { + background-color: var(--bg-color-settings-2); + color: var(--text-normal); + font-weight: bold; +} + +body.translucent-setting-panel .horizontal-tab-content, +body.translucent-setting-panel .vertical-tab-content, +body.setting-default-frosted-glass .horizontal-tab-content, +body.setting-default-frosted-glass .vertical-tab-content { + background-color: var(--bg-color-settings-3); +} + +body.translucent-setting-panel .vertical-tab-content { + background-color: var(--bg-color-settings-1); +} + +body.setting-default-frosted-glass .vertical-tab-header-group-title { + border: none; +} + +/* ======= graph view ==============*/ +.workspace-leaf-content[data-type="graph"] .graph-controls { + background-color: var(--graph-control-bg); + border: none; +} +.workspace-split.mod-root .workspace-leaf-content[data-type="graph"] .view-content { + background-color: var(--graph-canvas-bg); +} + +.graph-view.color-fill { + color: var(--graph-circle); +} +.graph-view.color-circle { + color: var(--graph-circle-outline); +} +.graph-view.color-line { + color: var(--graph-line); +} +.graph-view.color-text { + color: var(--graph-text-color); +} +.graph-view.color-fill-highlight { + color: var(--graph-circle-fill-highlight); +} +.graph-view.color-line-highlight { + color: var(--graph-line-fill-highlight); +} +.graph-view.color-fill-tag { + color: var(--graph-tag) !important; +} +.graph-view.color-fill-attachment { + color: var(--graph-attach) !important; +} +.graph-view.color-fill-unresolved { + color: var(--graph-unresolved); + opacity: 1; +} +.graph-view.color-arrow { + color: var(--graph-arrow); + opacity: 1; +} + +/*Horizontal line in edit mode. Changes --- to full-width line*/ +/*thanks to Piotr from obsidian forum*/ +div:not(.CodeMirror-activeline)>.CodeMirror-line span.cm-hr { + color: transparent; +} + +div:not(.CodeMirror-activeline)>.CodeMirror-line span.cm-hr:after { + content: ""; + position: absolute; + height: 1px; + width: 100%; + background: var(--text-muted); + left: 0; + top: 50%; +} + +/*change collapse icon position in left side*/ +.workspace-ribbon.mod-left .workspace-ribbon-collapse-btn { + margin-top: 0; + padding: 7px 6px 2px 6px; +} + +/* colourful notes */ +/* from Notation by death_au https://github.com/deathau/Notation-for-Obsidian */ +/* Original idea from: https://gist.github.com/mklepaczewski/54e451f09994b9d450de81c8baaf8aa4 */ +/* but also with simpler classes so you can use `` as well */ + :is(.markdown-preview-view,.markdown-rendered) pre.language-note-gray-bg code, + :is(.markdown-preview-view,.markdown-rendered) pre.language-note-brown-bg code, + :is(.markdown-preview-view,.markdown-rendered) pre.language-note-orange-bg code, + :is(.markdown-preview-view,.markdown-rendered) pre.language-note-yellow-bg code, + :is(.markdown-preview-view,.markdown-rendered) pre.language-note-green-bg code, + :is(.markdown-preview-view,.markdown-rendered) pre.language-note-blue-bg code, + :is(.markdown-preview-view,.markdown-rendered) pre.language-note-purple-bg code, + :is(.markdown-preview-view,.markdown-rendered) pre.language-note-pink-bg code, + :is(.markdown-preview-view,.markdown-rendered) pre.language-note-red-bg code, +.print pre.language-note-gray-bg code, +.print pre.language-note-brown-bg code, +.print pre.language-note-orange-bg code, +.print pre.language-note-yellow-bg code, +.print pre.language-note-green-bg code, +.print pre.language-note-blue-bg code, +.print pre.language-note-purple-bg code, +.print pre.language-note-pink-bg code, +.print pre.language-note-red-bg code, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-gray-bg code, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-brown-bg code, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-orange-bg code, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-yellow-bg code, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-green-bg code, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-blue-bg code, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-purple-bg code, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-pink-bg code, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-red-bg code{ + background: unset !important; + background-color:unset !important; + white-space: pre-wrap !important; +} + +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-notice, +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-gray-background, +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-gray-bg, +.gray-background, +.gray-bg, +.print pre.language-note-gray-bg .popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-notice, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-gray-background, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-gray-bg { + background-color: var(--background-gray) !important; +} +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-brown-background, +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-brown-bg, +.brown-background, +.brown-bg, +.print pre.language-note-brown-bg, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-brown-background, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-brown-bg { + background-color: var(--background-brown) !important; +} +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-orange-background, +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-orange-bg, +.orange-background, +.orange-bg, +.print pre.language-note-orange-bg, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-orange-background, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-orange-bg { + background-color: var(--background-orange) !important; +} +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-yellow-background, +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-yellow-bg, +.yellow-background, +.yellow-bg, +.print pre.language-note-yellow-bg, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-yellow-background, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-yellow-bg { + background-color: var(--background-yellow) !important; +} +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-green-background, +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-green-bg, +.green-background, +.green-bg, +.print pre.language-note-green-bg, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-green-background, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-green-bg { + background-color: var(--background-green) !important; +} + :is(.markdown-preview-view,.markdown-rendered) pre.language-note-blue-background, + :is(.markdown-preview-view,.markdown-rendered) pre.language-note-blue-bg, +.blue-background, +.blue-bg, +.print pre.language-note-blue-bg, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-blue-background, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-blue-bg { + background-color: var(--background-blue) !important; +} +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-purple-background, +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-purple-bg, +.purple-background, +.purple-bg, +.print pre.language-note-purple-bg, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-purple-background, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-purple-bg { + background-color: var(--background-purple) !important; +} +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-pink-background, +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-pink-bg, +.pink-background, +.pink-bg, +.print pre.language-note-pink-bg, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-pink-background, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-pink-bg { + background-color: var(--background-pink) !important; +} +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-red-background, +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-red-bg, +.red-background, +.red-bg, +.print pre.language-note-red-bg, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-red-background, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-red-bg { + background-color: var(--background-red) !important; +} +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-important, +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-imp, +.print pre.language-note-important, +.print pre.language-note-imp, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-important, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-imp { + border: 4px dashed var(--note-important) !important; +} +pre.language-note-important:before, +pre.language-note-imp::before { + content: "Important"; + color: var(--note-important) !important; + font-weight: 800; + top: -1px; +} + +/*colourful text*/ +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-gray, +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-brown, +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-orange, +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-yellow, +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-green, +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-blue, +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-purple, +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-pink, +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-red, +.print pre.language-note-gray, +.print pre.language-note-brown, +.print pre.language-note-orange, +.print pre.language-note-yellow, +.print pre.language-note-green, +.print pre.language-note-blue, +.print pre.language-note-purple, +.print pre.language-note-pink, +.print pre.language-note-red, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-gray, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-brown, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-orange, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-yellow, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-green, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-blue, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-purple, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-pink, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-red { + background-color: transparent !important; + margin: 3px 0; + padding: 5px 10px; +} + +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-gray code.language-note-gray, +.print code.language-note-gray, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-gray code.language-note-gray { + color: var(--text-gray) !important; + background: unset !important; +} +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-brown code.language-note-brown, +.print code.language-note-brown, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-brown code.language-note-brown { + color: var(--text-brown) !important; + background: unset !important; +} +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-orange code.language-note-orange, +.print code.language-note-orange, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-orange code.language-note-orange { + color: var(--text-orange) !important; + background: unset !important; +} +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-yellow code.language-note-yellow, +.print code.language-note-yellow, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-yellow code.language-note-yellow { + color: var(--text-yellow) !important; + background: unset !important; +} +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-green code.language-note-green, +.print code.language-note-green, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-green code.language-note-green { + color: var(--text-green) !important; + background: unset !important; +} +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-blue code.language-note-blue, +.print code.language-note-blue, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-blue code.language-note-blue { + color: var(--text-blue) !important; + background: unset !important; +} +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-purple code.language-note-purple, +.print code.language-note-purple, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-purple code.language-note-purple { + color: var(--text-purple) !important; + background: unset !important; +} +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-pink code.language-note-pink, +.print code.language-note-pink, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-pink code.language-note-pink { + color: var(--text-pink) !important; + background: unset !important; +} +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-red code.language-note-red, +.print code.language-note-red, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-red code.language-note-red { + color: var(--text-red) !important; + background: unset !important; +} + +/* cloze */ +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-cloze code.language-note-cloze, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-cloze code.language-note-cloze { + color: var(--text-normal) !important; + background-color: var(--text-normal)!important; + display: block; + padding: 0px !important; + text-shadow: none; + margin: 1em 0.7em 0; + font-size: var(--font-size-cloze) !important; +} + +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-cloze, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-cloze { + background-color: transparent; +} + +code.language-note-cloze.is-loaded:hover { + cursor: pointer; +} +:is(.markdown-preview-view,.markdown-rendered) pre.language-note-cloze code.language-note-cloze.is-loaded:active, +.popover :is(.markdown-preview-view,.markdown-rendered) pre.language-note-cloze code.language-note-cloze.is-loaded:active { + background-color: transparent !important; +} + +pre.language-note-cloze::before { + content: "TO RECALL"; + color: var(--note-cloze); + font-weight: 800; + left: 22px; +} + +/*hidden box*/ +/*改自 https://github.com/chokcoco/iCSS/issues/153 */ +@property --hibox { + syntax: ''; + inherits: false; + initial-value: 24px; +} + +:is(.markdown-preview-view,.markdown-rendered) pre.language-hibox { + background-color: transparent; +} + +:is(.markdown-preview-view,.markdown-rendered) pre.language-hibox code.language-hibox:hover { + color: var(--text-normal); + --hibox: 900px; + overflow: auto; +} + +:is(.markdown-preview-view,.markdown-rendered) pre.language-hibox code.language-hibox { + position: relative; + height: auto; + overflow: hidden; + background: radial-gradient(circle at 0px 0px, var(--theme-color-translucent-015) 0, var(--theme-color-translucent-015) var(--hibox), transparent var(--hibox), transparent 0); + transition: --hibox 0.4s linear; + color: var(--background-code); + color: transparent; +} + + +/*======== optionnal mermaid style below ========*/ +.markdown-source-view.mod-cm6 .cm-content > [contenteditable=false] { + overflow: auto; +} + +body.resizable-mermaid .mermaid { + resize: both; + overflow: auto; + position: relative; +} + +:is(.markdown-preview-section,.markdown-rendered) .mermaid, +.markdown-source-view.mod-cm6 .cm-scroller .mermaid { + letter-spacing: 0; +} + +.markdown-source-view.mod-cm6 .mermaid svg { + margin: 0 auto; + display: block; +} + +.mermaid .label { + font-family: var(--mermaid-font-family) !important; + color: var(--text-normal) !important; +} + +.mermaid .label text { + fill: var(--background-primary-alt) !important; +} + +.mermaid .node:not([class*="id"]) rect:not([style*="fill"]):not([style*="stroke"]), +.mermaid .node:not([class$="id"]) circle:not([style*="fill"]):not([style*="stroke"]), +.mermaid .node:not([class$="id"]) ellipse:not([style*="fill"]):not([style*="stroke"]), +.mermaid .node:not([class$="id"]) polygon:not([style*="fill"]):not([style*="stroke"]), +.mermaid .node:not([class$="id"]) path:not([style*="fill"]):not([style*="stroke"]) { + fill: var(--background-primary) !important; +} + +.mermaid .node .label { + text-align: center !important; +} + +.mermaid .node.clickable { + cursor: pointer !important; +} + +.mermaid .arrowheadPath { + fill: var(--text-faint) !important; +} + +.mermaid .edgePath .path, +.mermaid .flowchart-link { + stroke: var(--text-faint) !important; +} + +.mermaid .edgeLabel { + background-color: var(--background-primary) !important; + text-align: center !important; +} + +.mermaid .edgeLabel rect { + opacity: 0 !important; +} + +.mermaid .cluster rect { + fill: var(--background-primary-alt) !important; + stroke: var(--text-faint) !important; +} + +.mermaid .cluster text { + fill: var(--background-primary) !important; +} + +/* Sequence Diagram variables */ +.mermaid .actor { + stroke: var(--text-accent) !important; +} + +.mermaid .actor-line { + stroke: var(--text-muted) !important; +} + +.mermaid .messageLine0 { + stroke-dasharray: none !important; + stroke: var(--text-muted) !important; +} + +.mermaid .messageLine1 { + stroke-dasharray: 2, 2 !important; + stroke: var(--text-muted) !important; +} + +.mermaid #arrowhead path, +.mermaid #crosshead path { + fill: var(--text-muted) !important; + stroke: var(--text-muted) !important; +} + +.mermaid .sequenceNumber { + fill: var(--background-primary) !important; +} + +.mermaid #sequencenumber, +.mermaid .messageText { + fill: var(--text-muted) !important; +} + +.mermaid .labelBox { + stroke: var(--text-accent) !important; + fill: var(--background-secondary-alt) !important; +} + +.mermaid .labelText, +.mermaid .labelText>tspan, +.mermaid .loopText, +.mermaid .loopText>tspan { + fill: var(--text-muted) !important; + stroke: none !important; +} + +.mermaid .loopLine { + stroke-dasharray: 2, 2 !important; + stroke: var(--text-accent) !important; + fill: var(--text-accent) !important; +} + +.mermaid .note { + stroke: var(--text-normal) !important; + fill: var(--mermaid-seq-dia-color) !important; +} + +.mermaid .noteText, +.mermaid .noteText>tspan { + fill: var(--text-normal) !important; + stroke: none !important; +} + +/* Gantt chart variables */ +.mermaid .activation0, +.mermaid .activation1, +.mermaid .activation2 { + fill: var(--background-secondary) !important; + stroke: var(--text-accent) !important; +} + +/** Section styling */ +.mermaid .mermaid-main-font { + font-family: var(--mermaid-font-family) !important; +} + +.mermaid .section { + stroke: none !important; + opacity: 0.3 !important; +} + +.mermaid .section0 { + fill: var(--text-faint) !important; +} + +.mermaid .section2 { + fill: var(--text-accent) !important; +} + +.mermaid .section1, +.mermaid .section3 { + fill: var(--text-muted) !important; + opacity: 0.15 !important; +} + +.mermaid .sectionTitle0, +.mermaid .sectionTitle1, +.mermaid .sectionTitle2, +.mermaid .sectionTitle3 { + fill: var(--text-normal) !important; +} + +.mermaid .sectionTitle { + text-anchor: start !important; + font-size: 15px !important; + font-weight: bold; + line-height: 14px !important; + font-family: var(--mermaid-font-family) !important; +} + +/* Grid and axis */ +.mermaid .grid .tick { + stroke: var(--text-muted) !important; + opacity: 1 !important; + shape-rendering: crispEdges !important; +} + +.mermaid .grid .tick text { + font-family: var(--mermaid-font-family) !important; + font-size: 13px; +} + +.mermaid .grid path { + stroke-width: 0 !important; +} + +/* Today line */ +.today { + fill: none !important; + stroke: var(--background-modifier-error) !important; + stroke-width: 2px !important; +} + +/* Task styling */ + +/* Default task */ +.task { + stroke-width: 0.5px !important; +} + +.taskText:not([font-size]) { + font-size: 9px !important; +} + +.taskTextOutsideRight { + fill: var(--text-normal) !important; + text-anchor: start !important; + font-size: 12px !important; + font-family: var(--mermaid-font-family) !important; +} + +.taskTextOutsideLeft { + fill: var(--text-normal) !important; + text-anchor: end !important; + font-size: 9px !important; +} + +/* Special case clickable */ +.task.clickable { + cursor: pointer !important; +} + +.taskText.clickable { + cursor: pointer !important; + fill: var(--interactive-accent_hover) !important; + font-weight: bold !important; +} + +.taskTextOutsideLeft.clickable { + cursor: pointer !important; + fill: var(--interactive-accent_hover) !important; + font-weight: bold !important; +} + +.taskTextOutsideRight.clickable { + cursor: pointer !important; + fill: var(--interactive-accent_hover) !important; + font-weight: bold !important; +} + +/* Specific task settings for the sections*/ +.taskText0, +.taskText1, +.taskText2, +.taskText3 { + fill: var(--text-normal) !important; + font-size: 13px; +} + +.task0, +.task1, +.task2, +.task3 { + fill: var(--theme-color-translucent-04) !important; + stroke: var(--text-muted) !important; +} + +.taskTextOutside0, +.taskTextOutside2, +.taskTextOutside1, +.taskTextOutside3 { + fill: var(--text-muted) !important; +} + +/* Active task */ +.active0, +.active1, +.active2, +.active3 { + fill: var(--mermaid-active-task-color) !important; + stroke: var(--text-muted) !important; +} + +.activeText0, +.activeText1, +.activeText2, +.activeText3 { + fill: var(--text-normal) !important; +} + +/* Completed task */ +.done0, +.done1, +.done2, +.done3 { + stroke: var(--text-muted) !important; + fill: var(--background-secondary) !important; +} + +.doneText0, +.doneText1, +.doneText2, +.doneText3 { + fill: var(--text-normal) !important; +} + +/* Tasks on the critical line */ +.crit0, +.crit1, +.crit2, +.crit3 { + stroke: var(--red-1) !important; + fill: var(--red-1) !important; +} + +.activeCrit0, +.activeCrit1, +.activeCrit2, +.activeCrit3 { + stroke: var(--accent-strong) !important; + fill: var(--text-accent) !important; +} + +.doneCrit0, +.doneCrit1, +.doneCrit2, +.doneCrit3 { + stroke: var(--accent-strong) !important; + fill: var(--text-muted) !important; + cursor: pointer !important; + shape-rendering: crispEdges !important; +} + +.milestone { + transform: rotate(45deg) scale(0.8, 0.8) !important; +} + +.milestoneText { + font-style: italic !important; +} + +.doneCritText0, +.doneCritText1, +.doneCritText2, +.doneCritText3, +.activeCritText0, +.activeCritText1, +.activeCritText2, +.activeCritText3 { + fill: var(--text-normal) !important; +} + +.titleText { + text-anchor: middle !important; + font-size: 20px !important; + fill: var(--text-normal) !important; + font-family: var(--mermaid-font-family) !important; +} + +g.classGroup text { + fill: var(--text-normal) !important; + stroke: none !important; + font-size: 8px !important; +} + +g.classGroup text .title { + font-weight: bolder !important; +} + +g.clickable { + cursor: pointer !important; +} + +g.classGroup rect { + fill: var(--background-secondary-alt) !important; + stroke: var(--theme-color) !important; +} + +g.classGroup line { + stroke: var(--theme-color) !important; + stroke-width: 1 !important; +} + +.classLabel .box { + stroke: none !important; + stroke-width: 0 !important; + fill: var(--background-secondary-alt) !important; + opacity: 0.2 !important; +} + +.classLabel .label { + fill: var(--text-accent) !important; + font-size: 10px !important; +} + +.relation { + stroke: var(--text-accent) !important; + fill: none !important; +} + +.dashed-line { + stroke-dasharray: 3 !important; +} + +#compositionStart, +#compositionEnd, +#dependencyStart, +#dependencyEnd, +#extensionStart, +#extensionEnd { + fill: var(--text-accent) !important; + stroke: var(--text-accent) !important; +} + +#aggregationStart, +#aggregationEnd { + fill: var(--background-secondary-alt) !important; + stroke: var(--text-accent) !important; +} + +.commit-id, +.commit-msg, +.branch-label { + fill: var(--text-muted) !important; + color: var(--text-muted) !important; + font-family: var(--mermaid-font-family) !important; +} + +.pieTitleText { + text-anchor: middle !important; + font-size: 18px !important; + fill: var(--text-normal) !important; + font-family: var(--mermaid-font-family) !important; +} + +.slice { + font-family: var(--mermaid-font-family) !important; +} + +g.stateGroup text { + fill: var(--text-accent) !important; + stroke: none !important; + font-size: 10px !important; + font-family: var(--mermaid-font-family) !important; +} + +g.stateGroup text { + fill: var(--text-accent) !important; + stroke: none !important; + font-size: 10px !important; +} + +g.stateGroup .state-title { + font-weight: bolder !important; + fill: var(--text-normal) !important; +} + +g.stateGroup rect { + fill: var(--background-secondary-alt) !important; + stroke: var(--background-secondary-alt) !important; +} + +g.stateGroup line, +.transition { + stroke: var(--text-accent) !important; +} + +.stateGroup .composit { + fill: var(--background-secondary) !important; + border-bottom: 1px !important; +} + +.stateGroup .alt-composit { + fill: var(--background-primary) !important; + border-bottom: 1px !important; +} + +.state-note { + stroke: var(--text-faint) !important; + fill: var(--text-accent) !important; +} + +.state-note text { + fill: black !important; + stroke: none !important; + font-size: 10px !important; +} + +.stateLabel .box { + stroke: none !important; + stroke-width: 0 !important; + fill: var(--background-secondary-alt) !important; + opacity: 0.5 !important; +} + +.stateLabel text { + fill: black !important; + font-size: 10px !important; + font-weight: bold !important; + font-family: var(--mermaid-font-family) !important; +} + +.node circle.state-start { + fill: var(--text-normal) !important; + stroke: var(--text-normal) !important; +} + +.node circle.state-end { + fill: var(--text-normal) !important; + stroke: var(--text-normal) !important; + stroke-width: 1.5 !important; +} + +#statediagram-barbEnd { + fill: var(--text-accent) !important; +} + +.statediagram-cluster rect { + fill: var(--background-secondary-alt) !important; +} + +.statediagram-cluster rect.outer, +.statediagram-state .title-state, +.statediagram-state rect.basic { + rx: 5px !important; + ry: 5px !important; +} + +.statediagram-state .divider { + stroke: var(--text-accent) !important; +} + +.statediagram-cluster.statediagram-cluster .inner { + fill: var(--background-secondary) !important; +} + +.statediagram-cluster.statediagram-cluster-alt .inner { + fill: var(--background-secondary-alt) !important; +} + +.statediagram-cluster .inner { + rx: 0 !important; + ry: 0 !important; +} + +.statediagram-state rect.divider { + stroke-dasharray: 10, 10 !important; + fill: var(--background-secondary) !important; +} + +.note-edge { + stroke-dasharray: 5 !important; +} + +.statediagram-note rect { + fill: var(--text-accent) !important; + stroke: var(--text-muted) !important; + stroke-width: 1px !important; + rx: 0 !important; + ry: 0 !important; +} + +/* Classes common for multiple diagrams */ +.error-icon { + fill: var(--text-error) !important; +} + +.error-text { + fill: var(--text-muted) !important; + stroke: var(--text-muted) !important; +} + +.edge-pattern-solid { + stroke-dasharray: 0 !important; +} + +.edge-pattern-dashed { + stroke-dasharray: 3 !important; +} + +.edge-pattern-dotted { + stroke-dasharray: 2 !important; +} + +.marker { + fill: var(--text-muted) !important; +} + +.marker.cross { + stroke: var(--text-muted) !important; +} + +.mermaid div:not(text.tracker-month-label) #arrowhead, +.mermaid div:not(text.tracker-month-label) #sequencenumber, +.mermaid div:not(text.tracker-month-label) .cluster text, +.mermaid div:not(text.tracker-month-label) .label text, +.mermaid div:not(text.tracker-month-label) text, +.mermaid div:not(text.tracker-month-label) text.actor { + fill: var(--text-muted) !important; +} + +/*emoji🙂*/ +.mermaid g>g>circle, +.mermaid g>circle { + stroke: #000000 !important; +} + +.mermaid line.task-line { + stroke: #6e6e6e !important; +} + +/* scrollbar*/ +body:not(.native-scrollbars) ::-webkit-scrollbar-thumb { + background-clip: padding-box; + border: 3px solid transparent; + border-width: 3px 2px 3px 3px; + min-height: 65px; + background-color: var(--scrollbar-thumb-bg); + border: 3.5px solid transparent !important; +} + +body:not(.native-scrollbars) ::-webkit-scrollbar { + background: transparent; +} + +body:not(.native-scrollbars) textarea:hover::-webkit-scrollbar-thumb:active, +body:not(.native-scrollbars) ::-webkit-scrollbar-thumb:hover { + background: var(--scrollbar-active-thumb-bg); +} + +body.remove-scrollbars ::-webkit-scrollbar-thumb { + display: none; +} + +/*adapted from the CSS snippet created by @subframe7536 https://forum-zh.obsidian.md/t/topic/11164*/ +body.body:not(.is-mobile).hover-scrollbars :is(.vertical-tab-header, .vertical-tab-content, .nav-files-container,.workspace-leaf-content .view-content, .search-result-container, .git-view-body, .workspace-leaf-content[data-type=markdown] .cm-scroller, .markdown-preview-view, .suggestion-container .suggestion, +.prompt-results, .markdown-embed-content, .community-modal-search-results-wrapper,.community-modal-info,.tag-container)::-webkit-scrollbar-thumb { + box-shadow: inset 0 0 0 10px !important; + background-color: transparent !important; +} + +body.body:not(.is-mobile).hover-scrollbars .community-modal-info div[class^='community-modal-info-'] { + color:var(--text-normal); +} +body.body:not(.is-mobile).hover-scrollbars .canvas-node-content .markdown-preview-view { + overflow-y: auto!important; +} +body.body:not(.is-mobile).hover-scrollbars :is(.vertical-tab-header, .vertical-tab-content, .nav-files-container, .view-content, .search-result-container, .git-view-body, .workspace-leaf-content[data-type=markdown] .cm-scroller, .markdown-preview-view, .suggestion-container .suggestion, .prompt-results, .markdown-embed-content, .community-modal-search-results-wrapper,.community-modal-info,.tag-container) { + color: transparent; + transition: color var(--anim-duration-fast) var(--anim-motion-smooth); + overflow-y: overlay; +} +body.body:not(.is-mobile).hover-scrollbars :is(.vertical-tab-header, .vertical-tab-content, .nav-files-container, .view-content, .search-result-container, .git-view-body, .workspace-leaf-content[data-type=markdown] .cm-scroller, .markdown-preview-view, .suggestion-container .suggestion, .prompt-results, .markdown-embed-content, .community-modal-search-results-wrapper,.community-modal-info,.tag-container):hover { + color: var(--scrollbar-thumb-bg); +} +body.body:not(.is-mobile).hover-scrollbars :is(.vertical-tab-header, .vertical-tab-content, .nav-files-container, .view-content, .search-result-container, .git-view-body, .workspace-leaf-content[data-type=markdown] .cm-scroller, .markdown-preview-view, .suggestion-container .suggestion, .prompt-results, .community-modal-search-results-wrapper,.tag-container) > :not(h1, h2, h3, h4, h5, h6) { + color: var(--text-normal); +} + +body.body:not(.is-mobile).hover-scrollbars :is(.vertical-tab-header, .vertical-tab-content, .nav-files-container, .view-content, .search-result-container, .git-view-body, .workspace-leaf-content[data-type=markdown] .cm-scroller, .markdown-preview-view, .suggestion-container .suggestion, .prompt-results, .markdown-embed-content, .community-modal-search-results-wrapper,.community-modal-info,.tag-container)::-webkit-scrollbar-thumb:active { + background-color: var(--scrollbar-active-thumb-bg) !important; +} + +body.body:not(.is-mobile).hover-scrollbars .popover.hover-popover > .markdown-embed > .markdown-embed-content > .markdown-preview-view { + color: transparent !important; +} +body.body:not(.is-mobile).hover-scrollbars .popover.hover-popover > .markdown-embed > .markdown-embed-content > .markdown-preview-view:hover { + color: var(--scrollbar-thumb-bg) !important; +} + + +.workspace-split::-webkit-scrollbar:vertical { + display: none; +} + +body.plugin-sliding-panes.transparent-panes .workspace-leaf.mod-am-left-of-active .workspace-leaf-content .view-content, +body.plugin-sliding-panes.transparent-panes .workspace-leaf.mod-am-left-of-active .workspace-leaf-content .view-content *, +body.plugin-sliding-panes.transparent-panes .workspace-leaf.mod-am-left-of-active .workspace-leaf-content .view-content *::before, +body.plugin-sliding-panes.transparent-panes .workspace-leaf.mod-am-left-of-active .workspace-leaf-content .view-content *::-webkit-scrollbar-thumb, +body.plugin-sliding-panes.transparent-panes .workspace-leaf.mod-am-left-of-active .workspace-leaf-content .view-content *::-webkit-scrollbar, +body.plugin-sliding-panes.transparent-panes .workspace-leaf.mod-am-left-of-active .workspace-leaf-content .view-content *::marker { + color: transparent !important; + background: none !important; + background-color: transparent !important; + border: none !important; + -webkit-text-fill-color: transparent !important; +} + +body.plugin-sliding-panes.transparent-panes .workspace-split.mod-root .workspace-leaf:not(:first-of-type) .workspace-leaf-content { + background-color: transparent; +} + +body.plugin-sliding-panes.transparent-panes .workspace-split.mod-vertical > * > .workspace-leaf-resize-handle { + width: 0; +} + +body.plugin-sliding-panes.plugin-sliding-panes.transparent-panes.theme-light .workspace-split.mod-vertical>.workspace-leaf { + box-shadow: -5px 0px 6px 0px rgba(0, 0, 0, 0.1) !important; +} + + +/*==========================*/ +/* obsidian-calendar-plugin */ +/*==========================*/ +#calendar-container { + --color-background-heading: transparent; + --color-background-weeknum: transparent; + --color-background-day: transparent; + --color-background-weekend: transparent; + + --color-dot: var(--text-accent); + --color-arrow: currentColor; + --color-button: var(--text-muted); + --color-text-weeknum: var(--calendar-week-color); + + --color-text-title: var(--text-normal); + --color-text-heading: var(--text-normal); + --color-text-day: var(--text-normal); + --color-text-today: var(--text-accent); + + padding: 0 8px 0 8px; + margin: -21px -8px 0px -8px; + line-height: 0.6; +} + +.theme-dark #calendar-container { + --color-tr: #11111166; + --color-tr-odd: #1e1e1e93; + --color-calendar-weekends: #cc8484; + --color-calendar-weekends-2: #ff9f9f21; + --calendar-today-background-color: #00b3005e; + --theme-color-translucent-3: #217cc769; +} + +.theme-light #calendar-container { + --color-tr: #ffffff6a; + --color-tr-odd: #eeeeeea2; + --color-calendar-weekends: #c74a4a; + --color-calendar-weekends-2: #fdadad21; + --theme-color-translucent-3: #91c2eb80; +} + +#calendar-container .calendar { + background-color: transparent; + padding: 0 4px 2px 4px; + margin-top: -8px; + margin-left: 2px; + border-collapse: separate; + border-spacing: 0; +} + +#calendar-container .calendar tr { + background-color: transparent; +} + +/*表格调整*/ +/*星期*/ +#calendar-container th:first-of-type { + border-top-left-radius: 3px !important; +} + +#calendar-container th:last-of-type { + border-top-right-radius: 3px !important; +} + +#calendar-container th { + padding: 8px 0; + border-bottom: 2px solid var(--text-accent); + border-radius: 0 !important; +} + +/*天*/ +#calendar-container td { + width: 12.5%; + border-right: none; + padding: 0 !important; + line-height: 23px; +} + +#calendar-container tr { + background-color: var(--color-tr); +} + +#calendar-container .day { + padding: 2px 0 0 !important; +} + +#calendar-container .day.has-note.active:not(.today) { + background-color: var(--calendar-hover-color) !important; + color: var(--text-normal) !important; + font-weight: 700; +} + +#calendar-container .day:not(:empty):hover { + background-color: var(--calendar-hover-color); +} + +#calendar-container .day:active, +#calendar-container .active, +#calendar-container .active.today { + background-color: var(--calendar-active-color) !important; + font-weight: 700; +} + +#calendar-container .active.today, +#calendar-container .day.has-note.active { + color: var(--text-accent) !important; + font-weight: 700; +} + +body.toggle-calendar-shadow #calendar-container .active.today { + box-shadow: 0 0 1px 2px var(--text-accent); +} + +body.toggle-calendar-shadow #calendar-container .today { + box-shadow: 0 0 5px var(--text-accent); +} + +#calendar-container .today { + font-weight: bolder; +} + +/*“Today”*/ +#calendar-container .reset-button { + font-size: 14px !important; + margin: 0; + padding: 0; + cursor: pointer; + line-height: 1.2; + text-align: center; +} + +/*悬停Today*/ +#calendar-container .reset-button:hover { + color: var(--sliding-panes-header-color); + background-color: var(--table-hover-raw-color); +} + +/*悬停arrow*/ +#calendar-container .arrow:hover { + color: var(--theme-color); +} + +/*dot*/ +#calendar-container .dot { + stroke: transparent; + margin: -3px 0 2px !important; +} + +#calendar-container .hollow { + margin: -3px 0 2px !important; +} + +#calendar-container .dot-container { + margin-top: 0; + margin-bottom: 0; +} + +/*月份调整 month*/ +#calendar-container .month { + font-size: 20px; + line-height: 1; +} + +/*年份调整 year*/ +#calendar-container .year { + font-size: 20px; + line-height: 1; +} + +/*星期数 week*/ +#calendar-container .week-num { + border-right: 2px solid var(--calendar-week-background-color) !important; + background-color: transparent; + font-weight: 600; + border-radius: 0; +} + +#calendar-container .week-num.active { + background-color: var(--calendar-week-background-color) !important; + color: var(--color-text-weeknum) !important; + font-weight: 800; +} + +/*星期数悬停 week hover*/ +#calendar-container .week-num:hover { + background-color: var(--calendar-week-hover) !important; +} + +/* calendar-1 translucent, v0.2, for Blue Topaz*/ +body.style-options-for-calendar-plugin-style-one.theme-dark { + --color-calendar-weekends: #cc8484; + --color-calendar-weekends-2: #ff9f9f21; + --calendar-today-background-color: #00b3005e; + --theme-color-translucent-3: #217cc769; +} + +body.style-options-for-calendar-plugin-style-one.theme-light { + --color-calendar-weekends: #c74a4a; + --color-calendar-weekends-2: #fdadad21; + --theme-color-translucent-3: #91c2eb80; +} + +body.style-options-for-calendar-plugin-style-one.theme-dark #calendar-container { + --color-tr: #11111183; +} + +body.style-options-for-calendar-plugin-style-one.theme-light #calendar-container { + --color-tr: #ffffffa9; +} + +body.style-options-for-calendar-plugin-style-one #calendar-container th { + padding: 10px 0; + border-radius: 0 !important; +} + +body.style-options-for-calendar-plugin-style-one #calendar-container th:nth-last-child(1), +body.style-options-for-calendar-plugin-style-one #calendar-container th:nth-last-child(2) { + color: var(--color-calendar-weekends) !important; +} + +body.style-options-for-calendar-plugin-style-one #calendar-container td:nth-last-child(1), +body.style-options-for-calendar-plugin-style-one #calendar-container td:nth-last-child(2) { + background-color: var(--color-calendar-weekends-2) !important; +} + +body.style-options-for-calendar-plugin-style-one #calendar-container .day { + border-radius: 50% !important; +} + +body.style-options-for-calendar-plugin-style-one #calendar-container .today { + color: var(--text-accent) !important; + font-weight: 700 !important; + background-image: unset; +} + +body.style-options-for-calendar-plugin-style-one #calendar-container .day:active, +body.style-options-for-calendar-plugin-style-one #calendar-container .active, +body.style-options-for-calendar-plugin-style-one #calendar-container .active.today { + background-color: var(--theme-color-translucent-3) !important; +} + +body.style-options-for-calendar-plugin-style-two #calendar-container .day { + border-radius: 0 !important; +} + +body.style-options-for-calendar-plugin-style-two .day.adjacent-month { + background-color: var(--background-transparent-black-or-white-3) !important; +} + +body.style-options-for-calendar-plugin-style-two #calendar-container tbody tr:first-child { + background-color: rgba(var(--table-color-rgb), 0.1) !important; +} + +body.style-options-for-calendar-plugin-style-two #calendar-container tbody tr:nth-child(2) { + background-color: rgba(var(--table-color-rgb), 0.2) !important; +} + +body.style-options-for-calendar-plugin-style-two #calendar-container tbody tr:nth-child(3) { + background-color: rgba(var(--table-color-rgb), 0.3) !important; +} + +body.style-options-for-calendar-plugin-style-two #calendar-container tbody tr:nth-child(4) { + background-color: rgba(var(--table-color-rgb), 0.4) !important; +} + +body.style-options-for-calendar-plugin-style-two #calendar-container tbody tr:nth-child(5) { + background-color: rgba(var(--table-color-rgb), 0.5) !important; +} + +body.style-options-for-calendar-plugin-style-two #calendar-container tbody tr:nth-child(6) { + background-color: rgba(var(--table-color-rgb), 0.6) !important; +} + +/*===========================*/ +/*copy button for code blocks*/ +/*===========================*/ +button.copy-code-button:not([style="right: 32pt"]) { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAABU0lEQVRYhe2WMU4CQRSG/2eMjQRptQB7j8AJnIbKEq/A2qg0SjRROgauYGljTMALLN7AA7Ak1oRIY7HPYt0IuzPLMgxggK97u2/e/PPv25kBNh0yGSSavQqYqkHEDx2n0FqaANH0SmC8RIqU2k7+1YqAs9rH3uggcw+iMoBD7UDyi75PRESuLoeBT4CeMoPhzXPt5FuVsxt98JXL3hH4cpryduX4HQCE9LQ5BBwBfDXKZRlANZUAgMtAsMJwkt+JGAA6Tn7CtTBWvT9t9IpE5DL4XCdgR636b4Xz8HZR6I7XVKFwIJlwpbaIObBsUjsQ/fa2WLkDWwEz/wWzMq13Vu6AsQAh+10hPdc0nlsAwEwAm8cahPTY9m6XxPr0gGm+xR6wlL/tgbQsrAeCi2RwnUouaacHYvu0kP1HgK91ZWzfC2IO7A+GtwDVQyf+Let7FmwcPzCZvMtlTU3QAAAAAElFTkSuQmCC); + background-repeat: no-repeat; + background-size: contain; + background-position: center; + background-color: transparent; + color: transparent; + height: 1.6em; +} + +button.copy-code-button:hover { + background-color: var(--theme-color-translucent-015); +} + +.obsidian-banner-wrapper.has-copy-button { + position:unset; +} + +/*====================*/ +/*day planner plugin*/ +/*====================*/ +.day-planner-status-bar-text { + color: var(--text-accent); + font-weight: 600; +} + +.progress-pie.day-planner { + background-color: var(--day-planner-pie); + float: left; + height: 20px; + margin: 0.3px 10px 0.3px 0; + width: 20px; + display: none; +} + +#scroll-controls input#auto-scroll.toggle { + background-image: none; +} + +.aside__line { + background: var(--day-planner-dot) !important; + left: 35px !important; +} + +.ei_Dot { + background-color: var(--day-planner-line) !important; + left: 28px !important; +} + +.ei_Title { + font-size: 15px !important; + margin-left: -10px !important; +} + +.ei_Copy { + font-size: 15px !important; + margin-left: 5px !important; +} + +.event_item { + overflow: hidden !important; +} + +#now-line, .timeline-time { + background-color: var(--day-planner-timeline) !important; +} + +.event_item:hover { + background-color: var(--day-planner-item-hover) !important; + box-shadow: 0px 0px 52px -18px rgba(0, 0, 0, 0.75); +} + +.event_item_color1 { + background-color: var(--event-item-color1) !important; +} +.event_item_color2 { + background-color: var(--event-item-color2) !important; +} +.event_item_color3 { + background-color: var(--event-item-color3) !important; +} +.event_item_color4 { + background-color: var(--event-item-color4) !important; +} +.event_item_color5 { + background-color: var(--event-item-color5) !important; +} +.event_item_color6 { + background-color: var(--event-item-color6) !important; +} +.event_item_color7 { + background-color: var(--event-item-color7) !important; +} +.event_item_color8 { + background-color: var(--event-item-color8) !important; +} +.event_item_color9 { + background-color: var(--event-item-color9) !important; +} +.event_item_color10 { + background-color: var(--event-item-color10) !important; +} + +/* ================================== */ +/* ============= kanban ============= */ +/* ================================== */ +.kanban-plugin__markdown-preview-view { + font-family: var(--font-text) !important; +} +/*body:not(.style-options-for-kanban-plugin-static-default)*/ +.workspace-leaf .kanban-plugin__lane { + border-radius: 8px; + box-shadow: 0 2px 6px 1px rgba(0, 0, 0, 0.1); +} + +.kanban-plugin { + background-color: var(--background-secondary) !important; +} + +.kanban-plugin__item-title ol:not(.contains-task-list)>li:not(.task-list-item), +.kanban-plugin__item-title ul:not(.contains-task-list)>li:not(.task-list-item) { + border-left: none; + padding: 0 1px; + margin-left: 0px; +} + +.kanban-plugin .task-list-item-checkbox { + margin: 0px 7px 0px 0; +} + +.kanban-plugin__markdown-preview-view blockquote { + padding-top: 1px; + padding-bottom: 1px; +} + +.kanban-plugin__lane-header-wrapper { + background: var(--theme-color-translucent-015) !important; + padding: 8px 11px !important; + border-radius: 5px 5px 0 0; + margin-bottom: 0px !important; + z-index: 100 !important; + border-bottom: none !important; +} + +.theme-dark .kanban-plugin__lane-header-wrapper { + background: unset !important; + padding: 8px 11px 0 !important; +} + + +.kanban-plugin__checkbox-wrapper { + background: var(--background-transparent-black-or-white-2); +} + +.kanban-plugin__item { + border: none !important; + z-index: 100 !important; +} + +.kanban-plugin__item-content-wrapper, +.kanban-plugin__item-title-wrapper { + background: var(--background-transparent-black-or-white-1) !important; + z-index: 100 !important; +} + +.kanban-plugin__item-content-wrapper:hover, +.kanban-plugin__item-title-wrapper:hover { + background: var(--background-transparent-black-or-white-3-1) !important; +} + +.kanban-plugin__item-button-wrapper { + background: var(--background-transparent-black-or-white-2) !important; + border-radius: 0 0 5px 5px; +} + +button.kanban-plugin__new-item-button { + color: var(--text-muted) !important; + font-weight: bold; + font-size: 0.8em; + z-index: 100 !important; +} + +button.kanban-plugin__new-item-button:hover { + color: var(--accent-strong) !important; +} + +.kanban-plugin__lane { + border: none !important; +} + +.kanban-plugin__lane-items { + padding: 4px !important; +} + +.kanban-plugin__markdown-preview-view ol:not(.contains-task-list)>li:not(.task-list-item), +.kanban-plugin__markdown-preview-view:not(.kanban) ul>li:not(.task-list-item) { + margin-left: unset; + padding-left: unset; + margin-bottom: unset; + margin-top: unset; +} + +/*meta*/ +.kanban-plugin__meta-row { + background: transparent !important; +} + +.kanban-plugin__item-metadata-wrapper:not(:empty) { + background: var(--background-transparent-black-or-white-3) !important; +} + +.kanban-plugin__lane { + background: transparent !important; +} + +.theme-light .kanban-plugin__lane { + background: var(--background-transparent-black-or-white-3) !important; +} + +.kanban-plugin__lane-wrapper { + border-radius: var(--radius-s); +} + +.kanban-plugin__lane-wrapper { + background-repeat: no-repeat; + background-size: cover; +} + +/* checkbox */ +.kanban-plugin__item-prefix-button-wrapper input[type=checkbox] { + margin: 1px 6px 0 0; + width: 14px; + height: 14px; + filter: hue-rotate(var(--theme-color)) !important; +} + +.theme-dark .kanban-plugin__lane-wrapper:nth-child(7n+1) { + background: linear-gradient(to bottom, var(--kanban-color-1) 60%, transparent); + --scrollbar-thumb-bg: color-mix(in srgb, var(--kanban-color-1), transparent 60%); + --scrollbar-active-thumb-bg: var(--kanban-color-1); +} +.theme-dark .kanban-plugin__lane-wrapper:nth-child(7n+2) { + background: linear-gradient(to bottom, var(--kanban-color-2) 60%, transparent); + --scrollbar-thumb-bg: color-mix(in srgb, var(--kanban-color-2), transparent 60%); + --scrollbar-active-thumb-bg: var(--kanban-color-2); +} +.theme-dark .kanban-plugin__lane-wrapper:nth-child(7n+3) { + background: linear-gradient(to bottom, var(--kanban-color-3) 60%, transparent); + --scrollbar-thumb-bg: color-mix(in srgb, var(--kanban-color-3), transparent 60%); + --scrollbar-active-thumb-bg: var(--kanban-color-3); +} +.theme-dark .kanban-plugin__lane-wrapper:nth-child(7n+4) { + background: linear-gradient(to bottom, var(--kanban-color-4) 60%, transparent); + --scrollbar-thumb-bg: color-mix(in srgb, var(--kanban-color-4), transparent 60%); + --scrollbar-active-thumb-bg: var(--kanban-color-4); +} +.theme-dark .kanban-plugin__lane-wrapper:nth-child(7n+5) { + background: linear-gradient(to bottom, var(--kanban-color-5) 60%, transparent); + --scrollbar-thumb-bg: color-mix(in srgb, var(--kanban-color-5), transparent 60%); + --scrollbar-active-thumb-bg: var(--kanban-color-5); +} +.theme-dark .kanban-plugin__lane-wrapper:nth-child(7n+6) { + background: linear-gradient(to bottom, var(--kanban-color-6) 60%, transparent); + --scrollbar-thumb-bg: color-mix(in srgb, var(--kanban-color-6), transparent 60%); + --scrollbar-active-thumb-bg: var(--kanban-color-6); +} +.theme-dark .kanban-plugin__lane-wrapper:nth-child(7n+0) { + background: linear-gradient(to bottom, var(--kanban-color-7) 60%, transparent); + --scrollbar-thumb-bg: color-mix(in srgb, var(--kanban-color-7), transparent 60%); + --scrollbar-active-thumb-bg: var(--kanban-color-7); +} + +body.style-options-for-kanban-plugin-static-all-color.theme-light { + --kanban-color-1: #63a1e970; + --kanban-color-2: #63e6e970; + --kanban-color-3: #63e98270; + --kanban-color-4: #dee96370; + --kanban-color-5: #e8c89170; + --kanban-color-6: #e8919170; + --kanban-color-7: #bd91e870; +} + +body.style-options-for-kanban-plugin-static-all-color.theme-light .kanban-plugin__lane-wrapper:nth-child(7n+1) { + background: linear-gradient(to bottom, var(--kanban-color-1) 30%, transparent) !important; + --scrollbar-thumb-bg: color-mix(in srgb, var(--kanban-color-1), transparent 60%); + --scrollbar-active-thumb-bg: var(--kanban-color-1); +} +body.style-options-for-kanban-plugin-static-all-color.theme-light .kanban-plugin__lane-wrapper:nth-child(7n+2) { + background: linear-gradient(to bottom, var(--kanban-color-2) 30%, transparent) !important; + --scrollbar-thumb-bg: color-mix(in srgb, var(--kanban-color-2), transparent 60%); + --scrollbar-active-thumb-bg: var(--kanban-color-2); +} +body.style-options-for-kanban-plugin-static-all-color.theme-light .kanban-plugin__lane-wrapper:nth-child(7n+3) { + background: linear-gradient(to bottom, var(--kanban-color-3) 30%, transparent) !important; + --scrollbar-thumb-bg: color-mix(in srgb, var(--kanban-color-3), transparent 60%); + --scrollbar-active-thumb-bg: var(--kanban-color-3); +} +body.style-options-for-kanban-plugin-static-all-color.theme-light .kanban-plugin__lane-wrapper:nth-child(7n+4) { + background: linear-gradient(to bottom, var(--kanban-color-4) 30%, transparent) !important; + --scrollbar-thumb-bg: color-mix(in srgb, var(--kanban-color-4), transparent 60%); + --scrollbar-active-thumb-bg: var(--kanban-color-4); +} +body.style-options-for-kanban-plugin-static-all-color.theme-light .kanban-plugin__lane-wrapper:nth-child(7n+5) { + background: linear-gradient(to bottom, var(--kanban-color-5) 30%, transparent) !important; + --scrollbar-thumb-bg: color-mix(in srgb, var(--kanban-color-5), transparent 60%); + --scrollbar-active-thumb-bg: var(--kanban-color-5); +} +body.style-options-for-kanban-plugin-static-all-color.theme-light .kanban-plugin__lane-wrapper:nth-child(7n+6) { + background: linear-gradient(to bottom, var(--kanban-color-6) 30%, transparent) !important; + --scrollbar-thumb-bg: color-mix(in srgb, var(--kanban-color-6), transparent 60%); + --scrollbar-active-thumb-bg: var(--kanban-color-6); +} +body.style-options-for-kanban-plugin-static-all-color.theme-light .kanban-plugin__lane-wrapper:nth-child(7n+0) { + background: linear-gradient(to bottom, var(--kanban-color-7) 30%, transparent) !important; + --scrollbar-thumb-bg: color-mix(in srgb, var(--kanban-color-7), transparent 60%); + --scrollbar-active-thumb-bg: var(--kanban-color-7); +} +body.style-options-for-kanban-plugin-static-all-color .kanban-plugin__item-title-wrapper { + background: transparent !important; +} + + +body.style-options-for-kanban-plugin-static-all-image-one.theme-dark .kanban-plugin__lane-wrapper { + background-repeat: no-repeat; + background-size: cover; +} + + + +body.style-options-for-kanban-plugin-static-all-image-two.theme-dark .kanban-plugin__lane-wrapper { + background-repeat: no-repeat; + background-size: cover; +} + +body.style-options-for-kanban-plugin-static-plain .kanban-plugin__lane-wrapper { + background: unset !important; + --scrollbar-thumb-bg: unset !important; + --scrollbar-active-thumb-bg: unset !important; +} + +body.style-options-for-kanban-plugin-static-plain .kanban-plugin__lane { + border: 2px solid var(--background-modifier-border) !important; +} + +body.style-options-for-kanban-plugin-static-plain .kanban-plugin__lane-header-wrapper { + background: unset !important; + border-bottom: 1px solid var(--background-modifier-border) !important; +} + +body.style-options-for-kanban-plugin-static-plain.theme-dark .kanban-plugin__lane-header-wrapper, +body.style-options-for-kanban-plugin-static-little-color.theme-dark .kanban-plugin__lane-header-wrapper { + padding: 10px 11px !important; +} + +body.style-options-for-kanban-plugin-static-plain .kanban-plugin__item-button-wrapper { + background: transparent !important; +} + +body.style-options-for-kanban-plugin-static-little-color.theme-light { + --kanban-color-1: #91bae870; + --kanban-color-2: #91e8e070; + --kanban-color-3: #91e89a70; + --kanban-color-4: #e0e89170; + --kanban-color-5: #e8c89170; + --kanban-color-6: #e8919170; + --kanban-color-7: #bd91e870; +} + +body.style-options-for-kanban-plugin-static-little-color.style-options-for-kanban-plugin-dynamic-neon-three .kanban-plugin__lane, +body.style-options-for-kanban-plugin-static-plain.style-options-for-kanban-plugin-dynamic-neon-three .kanban-plugin__lane, +body.style-options-for-kanban-plugin-static-little-color.style-options-for-kanban-plugin-dynamic-neon-one .kanban-plugin__lane, +body.style-options-for-kanban-plugin-static-plain.style-options-for-kanban-plugin-dynamic-neon-one .kanban-plugin__lane, +body.style-options-for-kanban-plugin-static-little-color.style-options-for-kanban-plugin-dynamic-neon-two .kanban-plugin__lane, +body.style-options-for-kanban-plugin-static-plain.style-options-for-kanban-plugin-dynamic-neon-two .kanban-plugin__lane { + border: none !important; +} + +body.style-options-for-kanban-plugin-static-little-color .kanban-plugin__item, +body.style-options-for-kanban-plugin-static-little-color .kanban-plugin__lane { + border: 1px solid var(--background-modifier-border) !important +} + +body.style-options-for-kanban-plugin-static-little-color .kanban-plugin__lane-wrapper { + background-image: unset !important; + background-color: transparent !important; +} +body.style-options-for-kanban-plugin-static-little-color .kanban-plugin__lane-wrapper:nth-child(7n+1) .kanban-plugin__lane-header-wrapper { + background-color: var(--kanban-color-1) !important; +} +body.style-options-for-kanban-plugin-static-little-color .kanban-plugin__lane-wrapper:nth-child(7n+2) .kanban-plugin__lane-header-wrapper { + background-color: var(--kanban-color-2) !important; +} +body.style-options-for-kanban-plugin-static-little-color .kanban-plugin__lane-wrapper:nth-child(7n+3) .kanban-plugin__lane-header-wrapper { + background-color: var(--kanban-color-3) !important; +} +body.style-options-for-kanban-plugin-static-little-color .kanban-plugin__lane-wrapper:nth-child(7n+4) .kanban-plugin__lane-header-wrapper { + background-color: var(--kanban-color-4) !important; +} +body.style-options-for-kanban-plugin-static-little-color .kanban-plugin__lane-wrapper:nth-child(7n+5) .kanban-plugin__lane-header-wrapper { + background-color: var(--kanban-color-5) !important; +} +body.style-options-for-kanban-plugin-static-little-color .kanban-plugin__lane-wrapper:nth-child(7n+6) .kanban-plugin__lane-header-wrapper { + background-color: var(--kanban-color-6) !important; +} +body.style-options-for-kanban-plugin-static-little-color .kanban-plugin__lane-wrapper:nth-child(7n) .kanban-plugin__lane-header-wrapper { + background-color: var(--kanban-color-7) !important; +} + +/* Kanban Neon, v0.5, for Blue Topaz, modified from https://codepen.io/Chokcoco/pen/BaQzBEG by @Chokcoco */ +body.style-options-for-kanban-plugin-dynamic-neon-one.theme-dark, +body.style-options-for-kanban-plugin-dynamic-neon-two.theme-dark, +body.style-options-for-kanban-plugin-dynamic-neon-three.theme-dark { + --background-transparent-black-or-white-1: #232323c2; + --background-transparent-black-or-white-2: #0f0f0f69; + --background-transparent-black-or-white-3: #2222224d; + --background-transparent-blue: #53a3ff41; +} + +body.style-options-for-kanban-plugin-dynamic-neon-one.theme-light, +body.style-options-for-kanban-plugin-dynamic-neon-two.theme-light, +body.style-options-for-kanban-plugin-dynamic-neon-three.theme-light { + --background-transparent-black-or-white-1: #ffffffb0; + --background-transparent-black-or-white-2: #eeeeee88; + --background-transparent-black-or-white-3: #f5f5f583; + --background-transparent-blue: #5eb6ff44; +} + +body.style-options-for-kanban-plugin-dynamic-neon-one .kanban-plugin, +body.style-options-for-kanban-plugin-dynamic-neon-two .kanban-plugin, +body.style-options-for-kanban-plugin-dynamic-neon-three .kanban-plugin { + background-color: var(--background-secondary-alt) !important; +} + +body.style-options-for-kanban-plugin-dynamic-neon-one.theme-dark .kanban-plugin__lane-header-wrapper, +body.style-options-for-kanban-plugin-dynamic-neon-two.theme-dark .kanban-plugin__lane-header-wrapper, +body.style-options-for-kanban-plugin-dynamic-neon-three.theme-dark .kanban-plugin__lane-header-wrapper { + background: var(--background-transparent-blue) !important; + padding: 5px 11px!important; + border-radius: 6px 6px 0 0; + margin-bottom: 5px !important; + z-index: 100 !important; +} + +body.style-options-for-kanban-plugin-dynamic-neon-one .kanban-plugin__lane-wrapper:nth-child(n) { + + position: relative; + z-index: 0; + border-radius: 10px; + overflow: hidden; + cursor: pointer; + transition: .3s; + -webkit-box-reflect: below 10px linear-gradient(transparent, rgba(0, 0, 0, .4)); +} + +body.style-options-for-kanban-plugin-dynamic-neon-one .kanban-plugin__lane-wrapper:nth-child(n)::before, +body.style-options-for-kanban-plugin-dynamic-neon-two .kanban-plugin__lane-wrapper:nth-child(n)::before { + content: ''; + position: absolute; + z-index: -2; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + width: 38px; + height: 125%; + background-color: var(--background-secondary-alt) !important; + background-repeat: no-repeat; + background-size: 50% 50%; + background-position: 0 0; + background-image: conic-gradient(var(--kanban-shadow), var(--kanban-shadow)); + animation: rotate 2s linear infinite; +} + +body.style-options-for-kanban-plugin-dynamic-neon-one .kanban-plugin__lane-wrapper:nth-child(n)::after, +body.style-options-for-kanban-plugin-dynamic-neon-two .kanban-plugin__lane-wrapper:nth-child(n)::after { + content: ''; + position: absolute; + z-index: -1; + left: 2px; + top: 2px; + width: calc(100% - 4px); + height: calc(100% - 4px); + background-color: var(--background-secondary-alt) !important; + border-radius: 10px; +} + +body.style-options-for-kanban-plugin-dynamic-neon-two .kanban-plugin__lane-wrapper:nth-child(n) { + background: unset !important; + position: relative; + z-index: 0; + border-radius: 10px; + overflow: hidden; + cursor: pointer; + transition: .3s; + box-shadow: 0px 0px 5px 1px var(--kanban-shadow); +} + +@keyframes rotate { + 100% {transform: translate(-50%, -50%) rotate(1turn);} +} + +body.style-options-for-kanban-plugin-dynamic-neon-one .kanban-plugin__lane-wrapper:nth-child(n):hover +body.style-options-for-kanban-plugin-dynamic-neon-two .kanban-plugin__lane-wrapper:nth-child(n):hover { + box-shadow: 0 0 5px var(--kanban-shadow), 0 0 25px var(--kanban-shadow); +} + +body.style-options-for-kanban-plugin-dynamic-neon-one .kanban-plugin__lane-wrapper:nth-child(n):hover::after, +body.style-options-for-kanban-plugin-dynamic-neon-one .kanban-plugin__lane-wrapper:nth-child(n):hover::before, +body.style-options-for-kanban-plugin-dynamic-neon-two .kanban-plugin__lane-wrapper:nth-child(n):hover::after, +body.style-options-for-kanban-plugin-dynamic-neon-two .kanban-plugin__lane-wrapper:nth-child(n):hover::before { + transition: .3s; + background: linear-gradient(to bottom, var(--kanban-shadow) 30%, transparent) !important; +} + +body.style-options-for-kanban-plugin-dynamic-neon-one .kanban-plugin__lane-wrapper:nth-child(7n+2), +body.style-options-for-kanban-plugin-dynamic-neon-two .kanban-plugin__lane-wrapper:nth-child(7n+2) { + filter: hue-rotate(50deg); +} +body.style-options-for-kanban-plugin-dynamic-neon-one .kanban-plugin__lane-wrapper:nth-child(7n+3), +body.style-options-for-kanban-plugin-dynamic-neon-two .kanban-plugin__lane-wrapper:nth-child(7n+3) { + filter: hue-rotate(140deg); +} +body.style-options-for-kanban-plugin-dynamic-neon-one .kanban-plugin__lane-wrapper:nth-child(7n+4), +body.style-options-for-kanban-plugin-dynamic-neon-two .kanban-plugin__lane-wrapper:nth-child(7n+4) { + filter: hue-rotate(180deg); +} +body.style-options-for-kanban-plugin-dynamic-neon-one .kanban-plugin__lane-wrapper:nth-child(7n+5), +body.style-options-for-kanban-plugin-dynamic-neon-two .kanban-plugin__lane-wrapper:nth-child(7n+5) { + filter: hue-rotate(220deg); +} +body.style-options-for-kanban-plugin-dynamic-neon-one .kanban-plugin__lane-wrapper:nth-child(7n+6), +body.style-options-for-kanban-plugin-dynamic-neon-two .kanban-plugin__lane-wrapper:nth-child(7n+6) { + filter: hue-rotate(280deg); +} +body.style-options-for-kanban-plugin-dynamic-neon-one .kanban-plugin__lane-wrapper:nth-child(7n) +body.style-options-for-kanban-plugin-dynamic-neon-two .kanban-plugin__lane-wrapper:nth-child(7n) { + filter: hue-rotate(330deg); +} + +body.style-options-for-kanban-plugin-dynamic-neon-three .kanban-plugin__lane-wrapper:nth-child(n) { + background: unset !important; + position: relative; + border-radius: 10px; + overflow: hidden; + cursor: pointer; + transition: .3s; + animation: huerotate-1 6s infinite linear; + filter: hue-rotate(360deg); +} + +@keyframes huerotate-1 { + 0% {filter: hue-rotate(0deg);} + 100% {filter: hue-rotate(360deg);} +} + +body.style-options-for-kanban-plugin-dynamic-neon-three .kanban-plugin__lane-wrapper:nth-child(n)::before { + content: ''; + position: absolute; + z-index: -2; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + width: 250%; + height: 300%; + background-color: var(--background-secondary-alt) !important; + background-repeat: no-repeat; + background-size: 50% 50%; + background-position: 0 0; + background-image: conic-gradient(var(--kanban-shadow), var(--kanban-shadow)); + animation: rotate 2s linear infinite; +} + +body.style-options-for-kanban-plugin-dynamic-neon-three .kanban-plugin__lane-wrapper:nth-child(n)::after { + content: ''; + position: absolute; + z-index: -1; + left: 2px; + top: 2px; + width: calc(100% - 4px); + height: calc(100% - 4px); + background-color: var(--background-secondary-alt) !important; + border-radius: 10px; +} + +body.style-options-for-kanban-plugin-dynamic-neon-three .kanban-plugin__lane-wrapper:nth-child(n):hover { + box-shadow: 0 0 5px var(--kanban-shadow), 0 0 25px var(--kanban-shadow); +} +body.style-options-for-kanban-plugin-dynamic-neon-three .kanban-plugin__lane-wrapper:nth-child(n):hover::after, +body.style-options-for-kanban-plugin-dynamic-neon-three .kanban-plugin__lane-wrapper:nth-child(n):hover::before { + transition: .3s; + background: var(--kanban-shadow); +} +body.style-options-for-kanban-plugin-dynamic-neon-three .kanban-plugin__lane-wrapper:nth-child(7n+2) { + animation: huerotate-2 6s infinite linear; + filter: hue-rotate(410deg); +} + +@keyframes huerotate-2 { + 0% {filter: hue-rotate(50deg);} + 100% {filter: hue-rotate(410deg);} +} + +body.style-options-for-kanban-plugin-dynamic-neon-three .kanban-plugin__lane-wrapper:nth-child(7n+3) { + animation: huerotate-3 6s infinite linear; + filter: hue-rotate(500deg); +} + +@keyframes huerotate-3 { + 0% {filter: hue-rotate(140deg);} + 100% {filter: hue-rotate(500deg);} +} + +body.style-options-for-kanban-plugin-dynamic-neon-three .kanban-plugin__lane-wrapper:nth-child(7n+4) { + filter: hue-rotate(540deg); + animation: huerotate-4 6s infinite linear; +} + +@keyframes huerotate-4 { + 0% {filter: hue-rotate(180deg);} + 100% {filter: hue-rotate(540deg);} +} + +body.style-options-for-kanban-plugin-dynamic-neon-three .kanban-plugin__lane-wrapper:nth-child(7n+5) { + filter: hue-rotate(580deg); + animation: huerotate-5 6s infinite linear; +} + +@keyframes huerotate-5 { + 0% {filter: hue-rotate(220deg);} + 100% {filter: hue-rotate(580deg);} +} + +body.style-options-for-kanban-plugin-dynamic-neon-three .kanban-plugin__lane-wrapper:nth-child(7n+6) { + filter: hue-rotate(640deg); + animation: huerotate-6 6s infinite linear; +} + +@keyframes huerotate-6 { + 0% {filter: hue-rotate(280deg);} + 100% {filter: hue-rotate(640deg);} +} + +body.style-options-for-kanban-plugin-dynamic-neon-three .kanban-plugin__lane-wrapper:nth-child(7n+0) { + filter: hue-rotate(690deg); + animation: huerotate-7 6s infinite linear; +} + +@keyframes huerotate-7 { + 0% { filter: hue-rotate(330deg);} + 100% { filter: hue-rotate(690deg);} +} + +/* =========================================*/ +/* =========tapes pins and stickies=========*/ +/* =========================================*/ +/* thanks to death_au, Gabroel and Lithou from Obsidian Members Group on Discord */ +.stickies { + text-align: center; + transition: width 2s; + padding: 5px; + margin: 18px; + position: relative; + float: right; + right: -10px; + width: max(180px, 30%); + max-width: 50%; + background-color: var(--stickies-color-1); + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(2deg); + transition: all 2s ease; + z-index: 1; + padding-top: 10px; + padding-bottom: 10px; + border-radius: 0; + color: black; +} + +.stickies::after { + content: ""; + left: -5%; + top: -10px; + height: 40px; + width: 15px; + border-radius: var(--radius-l); + border: 3px solid #979797; + display: inline-block; + position: absolute; + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(-11deg); + z-index: 11; +} + +.stickies::before { + width: 11px; + height: 20px; + content: ""; + display: inline-block; + position: absolute; + left: -3.5%; + top: -2px; + border-radius: var(--radius-l); + border: 3px solid #979797; + border-bottom: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + z-index: 10; + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(-11deg); +} + +.stickies2 { + position: relative; + float: left; + box-shadow: 0 10px 10px 2px #9191912d; + width: max(180px, 30%); + max-width: 50%; + background-color: var(--stickies-color-2); + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(-2deg); + transition: all 2s ease; + z-index: 1; + padding: 20px; + margin: 10px; + color: black; +} + +.stickies2::after { + content: ""; + display: block; + height: 32px; + width: 2px; + position: absolute; + left: 50%; + top: -10px; + z-index: 1; + border-radius: 50%; + display: inline-block; + height: 15px; + width: 15px; + border: 1px; + box-shadow: inset -10px -10px 10px #f0b7a4, inset 3px 3px 5px; +} + +.to-recall { + position: relative; + float: left; + max-width: 30%; + background-color: var(--text-normal); + border-radius: var(--radius-xs); + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(0deg); + z-index: 1; + padding: 8px; + margin-right: 8px; + margin-top: 20px; + font-weight: bold; + font-family: Cooper; + color: var(--text-normal); +} + +.to-recall:hover { + cursor: pointer; +} + +.to-recall:active { + background-color: transparent; + transition: all 300ms ease; +} + +.to-recall::after { + content: "Click"; + position: absolute; + font-size: 12px; + top: 1px; + right: 5px; + font-weight: 600; + font-family: Arial; + color: var(--background-primary); +} + +.to-recall:active:after { + display: none; +} + +.to-recall::before { + content: " To Recall"; + display: inline-block; + position: absolute; + top: -20px; + left: -8px; + border-radius: var(--radius-l); + font-size: 14px; + font-weight: bold; + font-family: OCR A; + color: #858585; + white-space: pre; +} + +/* thanks to dcoales from obsidian member group on discord */ +/* https://discord.com/channels/686053708261228577/702656734631821413/794236352857374764 */ +aside { + float: right; + position: relative; + left: 5px; + padding: 0 0 0 2px; +} + +aside>h1, +aside>h2 { + font-weight: normal !important; + font-size: 16px !important; + border: 1px solid; + border-bottom: 1px solid !important; + background-color: transparent; + padding: 0 5px; + max-width: 150px; + color: #467cf0 !important; + position: absolute; +} + +aside>h1:hover::before, +aside>h2:hover::before { + display: none; +} + +aside>h2 { + color: #dd9207 !important; +} + +.is-readable-line-width.sidecomments .markdown-preview-sizer { + margin-left: 20px !important; +} + +/* ================================== */ +/* ====== markdown assitance ======== */ +/* ================================== */ +.command-list-view-row-selected { + background-color: gray !important; +} + + +/* +.cm-s-obsidian pre.HyperMD-codeblock, +.cm-s-obsidian span.cm-math:not(.cm-formatting-math-begin):not(.cm-formatting-math-end) { + color: var(--gray-2); +} +*/ + +/* ================================== */ +/* ============ comments ============ */ +/* ================================== */ +.theme-light .ob-comment { + position: relative; + border-bottom: 1px dotted black; + color: var(--text-normal) !important; + background-color: #57b2ee77 !important; + border-radius: 10% !important; +} + +.theme-dark .ob-comment { + position: relative; + border-bottom: 1px dotted rgb(255, 255, 255); + color: var(--text-normal) !important; + background-color: #0054b5e0 !important; + border-radius: 10% !important; +} + +.theme-light .ob-comment:hover { + background-color: #57b2ee50 !important; +} + +.theme-dark .ob-comment:hover { + background-color: #0062d1 !important; +} + +.theme-light .ob-comment span { + visibility: hidden; + min-width: auto; + max-width: 500px; + width: max-content; + background-color: #c7e2f5e5 !important; + color: #0068c9 !important; + text-align: left; + border-radius: var(--radius-s); + padding: 10px 10px; + z-index: 1; + position: absolute; + top: 20px; + right: 20px; + box-shadow: 1px 1px 10px 5px var(--background-secondary); + transition: opacity 1s; +} + +.theme-dark .ob-comment span { + visibility: hidden; + min-width: auto; + max-width: 500px; + width: max-content; + background-color: #aed6f3ef !important; + color: #005cb3 !important; + text-align: left; + border-radius: var(--radius-s); + padding: 10px 10px; + z-index: 1; + position: absolute; + top: 20px; + right: 20px; + box-shadow: 1px 1px 10px 5px var(--background-secondary); + transition: opacity 1s; +} + +.theme-light .comment-pannel-p3 { + background-color: #c7e2f5e5 !important; + color: #0068c9 !important; +} + +.theme-dark .comment-pannel-p3 { + background-color: #aed6f3ef !important; + color: #005cb3 !important; +} + +.comment-pannel-bubble { + width: 90% !important; + padding: 0 5px !important; + text-decoration: none; + display: inline-block; + margin-right: 0 !important; +} + +/* ======== tooltip ========= */ +.tooltip, +.tooltip.mod-right { + color: var(--white); + background-color: var(--interactive-accent); +} +.tooltip .tooltip-arrow { + border-bottom: 5px solid var(--interactive-accent); +} +.tooltip.mod-right .tooltip-arrow { + border-right: 5px solid var(--interactive-accent); +} +.tooltip.mod-left .tooltip-arrow { + border-left: 5px solid var(--interactive-accent); +} + +/* ================================== */ +/* ======== better footnote ========= */ +/* ================================== */ +:is(.markdown-preview-view,.markdown-rendered) .tippy-content { + -webkit-background-clip: initial; + -webkit-text-fill-color: initial; + /* font-size: var(--font-size-better-footnote) !important;*/ + font-family: var(--font-family-better-footnote) !important; +} + +/*default footnote*/ +section.footnotes ol>li:not(.task-list-item) { + border-left: none !important; +} + +.cm-s-obsidian span.cm-footref { + color: var(--text-accent); +} +.tippy-box[data-theme~="obsidian"] +{ + backdrop-filter: blur(8px); +} +.file-embed.mod-empty:hover { + backdrop-filter: blur(5px); +} +/* ================================== */ +/* =========== admonition =========== */ +/* ================================== */ +body.style-options-for-admonition-plugin .admonition { + break-inside: avoid; +} + +body.style-options-for-admonition-plugin .callout.admonition .admonition-content { + overflow: hidden; +} + +.admonition.callout { + border-color: rgba(var(--callout-color),0.15); +} +.callout:not(.admonition).drop-shadow +{ + box-shadow:var(--window-shadow2); +} +.callout.admonition.admonition-plugin.is-collapsed { + overflow: hidden; +} +/* ad伪看板效果*/ +body.style-options-for-admonition-plugin .admonition-kanban { + overflow: visible; + background-color: rgba(255, 255, 255, 0) !important; + border-left: none !important; + margin: auto; + box-shadow: none !important; +} +body.style-options-for-admonition-plugin .admonition-kanban .admonition-content { + overflow: visible; + margin: 0; +} + +body.style-options-for-admonition-plugin .admonition-kanban .is-mobile ul { + display: flex; +} + +body.style-options-for-admonition-plugin .admonition-kanban ul { + display: flex; + margin: 0; + flex-direction: row; + border: none; + padding: 0; + border-radius: var(--radius-m); + flex-wrap: wrap; +} + +body.style-options-for-admonition-plugin .admonition-kanban ul>li:not(.task-list-item) { + flex: 1 1 20%; + padding: 0.1em 1em 0.1em 0.8em !important; + margin: 0 0.1em 0.3em 0 !important; + list-style: none; + border: 1px solid var(--p-kanban-border-color); + border-left: 1px solid var(--p-kanban-border-color) !important; + border-radius: var(--radius-s); + word-wrap: break-word; + word-break: break-word; +} + +body.style-options-for-admonition-plugin .admonition-kanban ul .list-collapse-indicator.collapse-indicator.collapse-icon { + margin-left: -1.2em; + position: absolute; +} + +body.style-options-for-admonition-plugin .admonition-kanban ul .list-collapse-indicator.collapse-indicator.collapse-icon::before { + color: var(--text-accent); + transition: transform 10ms linear 0s; +} + +body.style-options-for-admonition-plugin.colorful-p-kanban .admonition-kanban ul>li:nth-of-type(8n+1) { + background-color: var(--p-kanban-color-1); + padding-left: 1em; +} +body.style-options-for-admonition-plugin.colorful-p-kanban .admonition-kanban ul>li:nth-of-type(8n+2) { + background-color: var(--p-kanban-color-2); + padding-left: 1em; +} +body.style-options-for-admonition-plugin.colorful-p-kanban .admonition-kanban ul>li:nth-of-type(8n+3) { + background-color: var(--p-kanban-color-3); + padding-left: 1em; +} +body.style-options-for-admonition-plugin.colorful-p-kanban .admonition-kanban ul>li:nth-of-type(8n+4) { + background-color: var(--p-kanban-color-4); + padding-left: 1em; +} +body.style-options-for-admonition-plugin.colorful-p-kanban .admonition-kanban ul>li:nth-of-type(8n+5) { + background-color: var(--p-kanban-color-5); + padding-left: 1em; +} +body.style-options-for-admonition-plugin.colorful-p-kanban .admonition-kanban ul>li:nth-of-type(8n+6) { + background-color: var(--p-kanban-color-6); + padding-left: 1em; +} +body.style-options-for-admonition-plugin.colorful-p-kanban .admonition-kanban ul>li:nth-of-type(8n+7) { + background-color: var(--p-kanban-color-7); + padding-left: 1em; +} +body.style-options-for-admonition-plugin.colorful-p-kanban .admonition-kanban ul>li:nth-of-type(8n) { + background-color: var(--p-kanban-color-8); + padding-left: 1em; +} + +body.style-options-for-admonition-plugin .admonition-kanban ul ul { + display: flex; + flex-direction: column; + justify-content: center; + padding: 0; + margin-top: 0.5rem; + border-radius: 0; + border: 0; + background: none; +} + +body.style-options-for-admonition-plugin .admonition-kanban ul ul li:not(.task-list-item) { + width: 100%; + display: block; + background-color: var(--p-kanban-card-color-1) !important; +} + +body.style-options-for-admonition-plugin .admonition-kanban ul>li:hover { + border-color: var(--p-kanban-border-color) !important; +} + +body.style-options-for-admonition-plugin .admonition-kanban ul ul li:hover { + background: transparent !important; + border-color: var(--p-kanban-border-color) !important; + border-left: 1px solid var(--p-kanban-border-color) !important; +} + +.theme-dark body.style-options-for-admonition-plugin .admonition-kanban ul ul li:hover { + border-color: #696969e1 !important; + border-left: 1px solid #696969e1 !important; +} + +body.style-options-for-admonition-plugin .admonition-kanban ul ul li .task-list-item-checkbox { + margin-left: 1.5rem; +} + +body.style-options-for-admonition-plugin .admonition-kanban ul ul ul { + margin-right: 0; +} + +body.style-options-for-admonition-plugin .admonition-kanban ul ul::before { + border-left: 0; +} + +:is(.markdown-preview-view,.markdown-rendered).is-readable-line-widthbody.style-options-for-admonition-plugin .admonition-kanban .markdown-preview-sizer>div>ul { + max-width: 100%; +} + +body.style-options-for-admonition-plugin .admonition-kanban ul.contains-task-list ul, +body.style-options-for-admonition-plugin .admonition-kanban ol.contains-task-list ul, +body.style-options-for-admonition-plugin .admonition-kanban ul.contains-task-list ol, +body.style-options-for-admonition-plugin .admonition-kanban ol.contains-task-list ol { + position: initial; +} + +body.style-options-for-admonition-plugin .admonition-kanban ul.contains-task-list ul::before, +body.style-options-for-admonition-plugin .admonition-kanban ol.contains-task-list ul::before, +body.style-options-for-admonition-plugin .admonition-kanban ul.contains-task-list ol::before, +body.style-options-for-admonition-plugin .admonition-kanban ol.contains-task-list ol::before { + all: initial +} + +body.style-options-for-admonition-plugin .admonition-kanban ul > li.task-list-item { + flex: 1 1 20%; + padding: 0.1em 1em; + margin: 0 0.1em 0.3em 0; + list-style: none; + border: 1px solid var(--p-kanban-border-color); + border-left: 1px solid var(--p-kanban-border-color) !important; + border-radius: var(--radius-s); + word-wrap: break-word; + word-break: break-word; + text-indent: 0; +} + +body.style-options-for-admonition-plugin .admonition-kanban ul ul li.task-list-item { + width: 100%; + display: block; + padding-left: 2em; + text-indent: -3.1em; + background-color: var(--p-kanban-card-color-1) !important; +} + +/*blank ad分栏 +修改自 https://forum-zh.obsidian.md/t/topic/2081 */ +body.style-options-for-admonition-plugin .is-live-preview .admonition-col2 .callout-content.admonition-content>div:nth-child(2), +body.style-options-for-admonition-plugin .is-live-preview .admonition-col3 .callout-content.admonition-content>div:nth-child(2), +body.style-options-for-admonition-plugin .is-live-preview .admonition-col4 .callout-content.admonition-content>div:nth-child(2) { + margin-top: -1.5em; +} +body.style-options-for-admonition-plugin .admonition-kanban .admonition-title-icon, +body.style-options-for-admonition-plugin .admonition-flex .admonition-title-icon, +body.style-options-for-admonition-plugin .admonition-col2 .admonition-title-icon, +body.style-options-for-admonition-plugin .admonition-col3 .admonition-title-icon, +body.style-options-for-admonition-plugin .admonition-col4 .admonition-title-icon { + display: none; +} +body.style-options-for-admonition-plugin .is-live-preview :is(.admonition-col2, .admonition-col3, .admonition-col4, .admonition-flex) .admonition-content blockquote { + padding: 0; + margin: 0; + line-height:1em; +} +body.style-options-for-admonition-plugin :is(.admonition-col2, .admonition-col3, .admonition-col4, .admonition-flex) .admonition-content blockquote { + flex: 100%; + border-left: none; + padding-left: 0; + padding-right: 0; + margin-block-start: 0; + margin: 0; + box-shadow: none; + background-color: transparent; + color: var(--text-muted); +} +body.style-options-for-admonition-plugin :is(.admonition-col2, .admonition-col3, .admonition-col4, .admonition-flex) .admonition-content blockquote p::before { + display: none; +} +body.style-options-for-admonition-plugin :is(.admonition-col2, .admonition-col3, .admonition-col4, .admonition-flex) .admonition-content blockquote p { + margin: 0; + overflow-wrap: anywhere; +} + +body.style-options-for-admonition-plugin :is(.callout.admonition-col2,.callout.admonition-col3,.callout.admonition-col4,.callout.admonition-flex)>.admonition-content>ul { + margin-left: auto; +} +body.style-options-for-admonition-plugin .admonition-col2 .admonition-content>ul, +body.style-options-for-admonition-plugin .admonition-col3 .admonition-content>ul, +body.style-options-for-admonition-plugin .admonition-col4 .admonition-content>ul, +body.style-options-for-admonition-plugin .admonition-flex .admonition-content>ul { + padding-inline-start: 20px !important; + margin-left: -20px; + margin-block-start:0; +} + +body.style-options-for-admonition-plugin :is(.admonition-flex,.admonition-col2,.admonition-col3,.admonition-col4) .admonition-content .admonition-content>ul>li{ + list-style-type: none; + padding:0; +} +.markdown-rendered .admonition ul li p:last-of-type, .markdown-rendered ol li p:last-of-type { + margin-block-end: 0.5em; +} + +.markdown-rendered .admonition ul li p:first-of-type, .markdown-rendered ol li p:first-of-type { + margin-block-start: 0.5em; +} + +body.style-options-for-admonition-plugin .admonition-col2 .admonition-content ul li .task-list-item-checkbox, +body.style-options-for-admonition-plugin .admonition-col3 .admonition-content ul li .task-list-item-checkbox, +body.style-options-for-admonition-plugin .admonition-col4 .admonition-content ul li .task-list-item-checkbox, +body.style-options-for-admonition-plugin .admonition-flex .admonition-content ul li .task-list-item-checkbox { + margin-left: auto; +} +:is(.admonition-col2,.admonition-col3,.admonition-col4,.admonition-flex) .callout-content ul.dataview.list-view-ul>li:not(.task-list-item) { + margin-left: auto; +} + +body.style-options-for-admonition-plugin .admonition-col2 { + box-shadow: none!important; +} + +body.style-options-for-admonition-plugin .admonition-col2 .admonition { + overflow: visible; + margin: 0; +} + +body.style-options-for-admonition-plugin .admonition-col2>.admonition-content-holder> .admonition-content { + columns: 150px 2; + -moz-columns: 150px 2; + -webkit-columns: 150px 2; + column-gap: 2vw; + overflow: visible; + margin: 0; + /*分栏的分割线 + column-rule: 1px solid #d4d2d2; */ +} +body.style-options-for-admonition-plugin .callout.admonition-col2> .admonition-content { + columns: 150px 2; + -moz-columns: 150px 2; + -webkit-columns: 150px 2; + column-gap: 2vw; + overflow: visible; + margin: 0; + /*分栏的分割线 + column-rule: 1px solid #d4d2d2; */ +} +body.style-options-for-admonition-plugin .admonition-col2 .admonition-content ol, +body.style-options-for-admonition-plugin .admonition-col2 .admonition-content ul { + margin-top: -0.25em; + +} +body.style-options-for-admonition-plugin :is(.markdown-preview-view,.markdown-rendered) .admonition-col2 .admonition-content :is(h3,h4) { + margin-top: -0.001em !important; +} +body.style-options-for-admonition-plugin .admonition-kanban .admonition-col2 .admonition-content ol{ + margin: 0; + break-inside: avoid; +} + +body.style-options-for-admonition-plugin .admonition-kanban .admonition-col2 .admonition-content ul { + margin: 0; + break-inside: avoid; +} + +body.style-options-for-admonition-plugin .admonition-col2 .admonition-content { + overflow: visible ; +} + +body.style-options-for-admonition-plugin .admonition-col2 > .admonition-content-holder { + margin-top: 0 !important; + margin-bottom: 0 !important; +} +body.style-options-for-admonition-plugin .admonition-col2 p { + text-align: justify; + margin-top: 0; + padding: 2px; + /* height:100%; + overflow: auto; */ +} +body.style-options-for-admonition-plugin .admonition-col2 p > img{ + display: block; + height: auto; +} + +body.style-options-for-admonition-plugin .admonition-col2-parent .admonition-col2 .admonition > .admonition-title.no-title + .admonition-content-holder { + margin-top: 0; +} + +/****col3 三栏*****/ +body.style-options-for-admonition-plugin .admonition-col3 { + box-shadow: none !important; +} + +body.style-options-for-admonition-plugin .admonition-col3 .admonition { + overflow: visible; + margin: 0; +} + +body.style-options-for-admonition-plugin .callout.admonition-col3>.admonition-content { + columns: 100px 3; + -moz-columns: 100px 3; + -webkit-columns: 100px 3; + column-gap: 1vw; + overflow: visible; + margin: 0; + break-inside: avoid; + column-rule: 1px solid #d4d2d2; +} +body.style-options-for-admonition-plugin .admonition-col3>.admonition-content-holder>.admonition-content { + columns: 100px 3; + -moz-columns: 100px 3; + -webkit-columns: 100px 3; + column-gap: 1vw; + overflow: visible ; + margin: 0; + break-inside: avoid; + column-rule: 1px solid #d4d2d2; +} +body.style-options-for-admonition-plugin .admonition-col3 .admonition-content ol, +body.style-options-for-admonition-plugin .admonition-col3 .admonition-content ul { + margin-top: -0.25em; +} +body.style-options-for-admonition-plugin .admonition-kanban .admonition-col3 .admonition-content ul { + margin: 0; + break-inside: avoid; +} +body.style-options-for-admonition-plugin .admonition-kanban .admonition-col3 .admonition-content ol { + margin: 0; + break-inside: avoid; +} +body.style-options-for-admonition-plugin .admonition-col3 .admonition-content { + overflow: visible; +} + +body.style-options-for-admonition-plugin .admonition-col3 >.admonition-content-holder { + margin-top: 0 !important; + margin-bottom: 0 !important; +} +body.style-options-for-admonition-plugin .admonition-col3 p{ + text-align: justify; + margin-top: 0; + padding: 2px; + /* height:100%; + overflow: auto; */ +} +body.style-options-for-admonition-plugin .admonition-col3 p>img{ + display: block; + height: auto; +} + +body.style-options-for-admonition-plugin .admonition-col3-parent .admonition-col3 .admonition > .admonition-title.no-title + .admonition-content-holder { + margin-top: 0; +} + +/****col4 四栏*****/ +body.style-options-for-admonition-plugin .admonition-col4 { + box-shadow: none !important; +} + +body.style-options-for-admonition-plugin .admonition-col4 .admonition { + overflow: visible; + margin: 0; +} + +body.style-options-for-admonition-plugin .callout.admonition-col4 > .admonition-content { + column-count: 4; + column-gap: 1vw; + overflow: visible; + margin: 0; + break-inside: avoid; +} +body.style-options-for-admonition-plugin .admonition-col4 > .admonition-content-holder>.admonition-content { + column-count: 4; + column-gap: 1vw; + overflow: visible; + margin: 0; + break-inside: avoid; +} +body.style-options-for-admonition-plugin .admonition-col4 .admonition-content { + margin: 0; + break-inside: avoid; +} + +body.style-options-for-admonition-plugin .admonition-col4 .admonition-content ol, +body.style-options-for-admonition-plugin .admonition-col4 .admonition-content ul { + margin-top: -0.25em; +} +body.style-options-for-admonition-plugin .admonition-kanban .admonition-col4 .admonition-content ul { + margin: 0; + break-inside: avoid; +} +body.style-options-for-admonition-plugin .admonition-kanban .admonition-col4 .admonition-content ol { + margin: 0; + break-inside: avoid; +} +body.style-options-for-admonition-plugin .admonition-col4 > .admonition-content { + overflow: visible; +} + +body.style-options-for-admonition-plugin .admonition-col4 > .admonition-content-holder { + margin-top: 0 !important; + margin-bottom: 0 !important; +} +body.style-options-for-admonition-plugin .admonition-col4 p { + text-align: justify; + margin-top: 0; + padding: 2px; +} +body.style-options-for-admonition-plugin .admonition-col4 p>img{ + display: block; + height: auto; + -webkit-transition: -webkit-transform .3s ease; + -moz-transition: -moz-transform .3s ease; + -ms-transition: -ms-transform .3s ease; + transition: transform .3s ease; +} + +body.style-options-for-admonition-plugin .admonition-col4 p>img:hover{ + -webkit-transform: scale(1.2); + -moz-transform: scale(1.2); + -ms-transform: scale(1.2); + transform: scale(1.2) +} + +body.style-options-for-admonition-plugin .admonition-col4-parent .admonition-col4 .admonition > .admonition-title.no-title + .admonition-content-holder { + margin-top: 0; +} + +/*自适应分栏*/ +body.style-options-for-admonition-plugin .admonition-flex { + margin: auto; + box-shadow: none; + border-left: none; + word-break: break-word; +} +body.admonition-bg-color-same.style-options-for-admonition-plugin .admonition-flex { + margin: 1em 0; +} +.is-live-preview .callout-content.admonition-content >p { + margin-top: 0; +} +body.style-options-for-admonition-plugin .admonition-flex >.admonition-content-holder { + margin-top: 0 !important; + margin-bottom: 0 !important; +} +body.style-options-for-admonition-plugin .admonition-flex .admonition-content { + width: 100%; + margin: 0px; + display: flex; + flex-wrap: wrap; + border: none; +} +body.style-options-for-admonition-plugin .admonition-flex .admonition-content>div{ + flex: 1; + margin: 0 0.625rem; +} +body.style-options-for-admonition-plugin .admonition-flex .admonition-content[data-embed-type="image"] p{ + align-self: baseline; +} + +body.style-options-for-admonition-plugin .admonition-flex .admonition-content[data-embed-type="image"] { + justify-content: space-around; +} + +/*ad-table*/ +body.style-options-for-admonition-plugin .admonition-table { + overflow: visible; + margin: auto; + box-shadow: none; +} +body.style-options-for-admonition-plugin .admonition-table .admonition-content { + width: calc(100% - 5px); + margin: 0; + overflow-x: auto !important; + white-space: nowrap; +} +body.style-options-for-admonition-plugin .admonition-table .admonition-content thead > tr > th, +body.style-options-for-admonition-plugin .admonition-table .admonition-content tbody > tr > td { + white-space: nowrap; +} +/*blank ad框全透明隐藏*/ +body.style-options-for-admonition-plugin .admonition-blank { + overflow: visible; + background-color: rgba(255, 255, 255, 0) !important; + border-left: none !important; + margin: auto; + box-shadow: none; +} +body.style-options-for-admonition-plugin .admonition-blank .admonition-content { + overflow: visible; + margin: 0; +} +body.style-options-for-admonition-plugin .callout.admonition-blank .admonition-content { + overflow: hidden; +} + +/* 感谢 围城 网友分享 +本样式仿造自elegantbook模板:https://github.com/ElegantLaTeX/ElegantBook +为以下类型设置了样式,需要在admonition中自行添加,设置好颜色和icon +- def: definition +- thm: theorem +- lem: lemma +- cor: corollary +- pro: proposition + +标题使用方正书宋_GBK,正文使用方正楷体_GBK,系统需要安装 +*/ + +body.style-options-for-admonition-plugin :is(.admonition-def,.admonition-thm,.admonition-lem,.admonition-cor,.admonition-pro) { + margin: 1.5625em 0 !important; + overflow: visible !important; + border: 1px solid rgb(var(--callout-color)) !important; + border-radius: 0.3em !important; + background-color: rgba(var(--callout-color),0.05) !important; + box-shadow: 0 0 0 !important; +} + +body.style-options-for-admonition-plugin :is(.admonition-def,.admonition-thm,.admonition-lem,.admonition-cor,.admonition-pro) *.admonition-title { + display: inline-block; + top: -0.9em; + left: 1.5em; + padding: 1px 8px !important; + background-color: rgb(var(--callout-color)) !important; + border-radius: 0.2em; +} + +body.style-options-for-admonition-plugin :is(.admonition-def,.admonition-thm,.admonition-lem,.admonition-cor,.admonition-pro) *.callout-title.admonition-title { + display: flex; + top: unset; + left: 1.5em; + padding: 1px 8px !important; + background-color: rgb(var(--callout-color)) !important; + border-radius: 0.2em; + position: relative; + width: fit-content; +} + +body.style-options-for-admonition-plugin :is(.admonition-def,.admonition-thm,.admonition-lem,.admonition-cor,.admonition-pro) *.admonition-title-content { + color: white; + font-family: "方正书宋_GBK", var(--font-text); + font-size: 1.1em; +} + +body.style-options-for-admonition-plugin :is(.admonition-def,.admonition-thm,.admonition-lem,.admonition-cor,.admonition-pro) *.admonition-title-icon { + /* display: none !important; */ + color: white; + background-color: rgb(var(--callout-color)); + margin: 0.2em; +} + +body.style-options-for-admonition-plugin :is(.admonition-def,.admonition-thm,.admonition-lem,.admonition-cor,.admonition-pro) *.admonition-content-holder { + margin-top: -1em; + padding: 0; +} + +body.style-options-for-admonition-plugin :is(.admonition-def,.admonition-thm,.admonition-lem,.admonition-cor,.admonition-pro) *.callout-title.admonition-title { + margin-top: -1em ; + padding: 0; +} + +body.style-options-for-admonition-plugin :is(.admonition-def,.admonition-thm,.admonition-lem,.admonition-cor,.admonition-pro) p { + text-indent: 0; + font-family: "方正楷体_GBK", var(--font-text) !important; + font-size: 1.1em; +} + +/*hibox*/ +/*改自 https://github.com/chokcoco/iCSS/issues/153 */ +body.style-options-for-admonition-plugin .admonition-hibox .admonition-content-holder { + margin: -1em 0.2em; +} + +body.style-options-for-admonition-plugin .admonition-hibox { + background-color: transparent !important; + box-shadow: none !important; +} + +body.style-options-for-admonition-plugin .admonition-hibox *::marker { + visibility: hidden; +} + +body.style-options-for-admonition-plugin .admonition-hibox { + position: relative; + height: auto; + overflow: hidden; + border-radius: var(--radius-s) !important; + background: radial-gradient(circle at 0px 0px, rgba(var(--callout-color), 0.2) 0, rgba(var(--callout-color), 0.2) var(--hibox), transparent var(--hibox), transparent 0); + transition: --hibox 0.6s linear; + border-left: none !important; +} + +body.style-options-for-admonition-plugin .admonition-hibox:hover { + --hibox: 1500px; + box-shadow: 0 0.2rem 0.5rem var(--background-modifier-box-shadow) !important; +} + +body.style-options-for-admonition-plugin .admonition-hibox:hover * { + visibility: visible; +} + +body.style-options-for-admonition-plugin .admonition-hibox .admonition-content-copy { + top: 7px; +} + +body.style-options-for-admonition-plugin .admonition-hibox:hover ol:not(.contains-task-list)>li:not(.task-list-item) { + border-color: var(--list-ol-block-color) !important; +} + +body.style-options-for-admonition-plugin .admonition-hibox:hover ul>li:not(.task-list-item) { + border-color: var(--list-ul-block-color) !important; +} + +body.style-options-for-admonition-plugin .admonition-hibox:hover *::marker { + color: var(--list-ol-number-color) !important; +} + +body.style-options-for-admonition-plugin .admonition-hibox:hover blockquote { + border-color: var(--theme-color) !important; + background-color: var(--background-blockquote) !important; +} + +body.style-options-for-admonition-plugin .admonition-hibox:hover { + border-color: var(--text-normal) !important; +} + +body.style-options-for-admonition-plugin .admonition-hibox .admonition-title { + display: none; +} + + +/* ======Notice================ */ +.notice-container .notice:nth-child(4n+1){ + background-color: var(--background-pink); + color: var(--text-normal); +} +.notice-container .notice:nth-child(4n+2){ + background-color: var(--background-yellow); + color: var(--text-normal); +} +.notice-container .notice:nth-child(4n+3){ + background-color: var(--background-green); + color: var(--text-normal); +} +.notice-container .notice:nth-child(4n+4){ + background-color: var(--background-red); + color: var(--text-normal); +} + +.notice-container { + z-index: var(--layer-notice); + position: fixed; + top: 40px; + right: 0px; + padding: 0px; + overflow: hidden; +} + +/* ================================== */ +/* ============ checklist =========== */ +/* ================================== */ +.checklist-plugin-main button { + box-shadow: none; +} +.checklist-plugin-main:is(.markdown-preview-view,.markdown-rendered) li { + border-left: none !important; + font-size: var(--font-size-checklist); +} + +.checklist-plugin-main { + --todoList-listItemBackground: var(--checklist-bg) !important; + --todoList-listItemBackground--hover: var(--checklist-bg-hover) !important; +} + +body.rainbow-checklist .checklist-plugin-main:is(.markdown-preview-view,.markdown-rendered) li:nth-of-type(7n+1) { + background-color: var(--checklist-color-1); +} +body.rainbow-checklist .checklist-plugin-main:is(.markdown-preview-view,.markdown-rendered) li:nth-of-type(7n+2) { + background-color: var(--checklist-color-2); +} +body.rainbow-checklist .checklist-plugin-main:is(.markdown-preview-view,.markdown-rendered) li:nth-of-type(7n+3) { + background-color: var(--checklist-color-3); +} +body.rainbow-checklist .checklist-plugin-main:is(.markdown-preview-view,.markdown-rendered) li:nth-of-type(7n+4) { + background-color: var(--checklist-color-4); +} +body.rainbow-checklist .checklist-plugin-main:is(.markdown-preview-view,.markdown-rendered) li:nth-of-type(7n+5) { + background-color: var(--checklist-color-5); +} +body.rainbow-checklist .checklist-plugin-main:is(.markdown-preview-view,.markdown-rendered) li:nth-of-type(7n+6) { + background-color: var(--checklist-color-6); +} +body.rainbow-checklist .checklist-plugin-main:is(.markdown-preview-view,.markdown-rendered) li:nth-of-type(7n+7) { + background-color: var(--checklist-color-7); +} + +.is-mobile .checklist-plugin-main :is(.markdown-preview-view,.markdown-rendered) ul { + padding-inline-start: 0; +} + +.is-mobile .checklist-plugin-main button.toggle { + width: unset; +} + +.checklist-plugin-main button.toggle .checked { + background-color: var(--theme-color) !important; +} + +/* ================================== */ +/* ============ longform ============ */ +/* ================================== */ +.workspace-leaf-content[data-type="VIEW_TYPE_LONGFORM_EXPLORER"] li { + border-left: none; +} + +/* ================================== */ +/* ========== Breadcrumbs =========== */ +/* ================================== */ +.workspace-leaf-content[data-type="breadcrumbs-matrix"] summary.hier-summary, +h3.breadcrumbs-matrix-header { + color: var(--h3-color) !important; +} + +.workspace-leaf-content[data-type="breadcrumbs-matrix"] summary { + color: var(--h4-color) !important; +} + +/*remove H3, H5 when hovering*/ +h3.breadcrumbs-matrix-header:hover::before, +h5.breadcrumbs-matrix-header:hover::before { + display: none; +} + +h5.breadcrumbs-header, +h5.breadcrumbs-matrix-header { + color: var(--h5-color) !important; +} + +.breadcrumbs-matrix-square { + border: none !important; +} + +.breadcrumbs-matrix ol { + margin-left: 8px !important; +} + +/* ================================== */ +/* ===== code block enhancer ======= */ +/* ================================== */ +.obsidian-banner-wrapper.code-block-wrap { + position: unset; +} +.code-block-wrap .code-block-linenum-wrap { + top: 0.4em; + background-color: transparent; +} +.code-block-wrap .code-block-lang-name { + top: 4px; + left: 2px; +} +.code-block-wrap .code-block-lang-name + .code-block-linenum-wrap>.code-block-linenum:first-child::before { + color: transparent; +} + +/* ================================== */ +/* ============ Dataview ============ */ +/* ================================== */ +span.dataview.small-text { + position: relative; + font-size: 70%; + line-height: 0; + vertical-align: baseline; + top: -.5em; + color: var(--text-accent); + border-radius: 3px; + text-align: center; + padding: 0 0.2em; + margin: 0 1px; + font-variant-numeric: ordinal; + opacity: 0.6; +} + +.dataview-container .internal-link { + font-size:0.88em; +} + +ul.dataview.list-view-ul>li:not(.task-list-item) { + border-left: none !important; + margin-left: -1em; +} + +li.dataview-result-list-li ul>li:not(.task-list-item) { + border-left: none !important; +} + +ul.dataview.list-view-ul>li:not(.task-list-item)::before { + font-family: boxicons; + font-size: 0.8em; + padding: 0 5px 0 0; +} + +body.dataview-list-style-pacman ul.dataview.list-view-ul>li:not(.task-list-item):first-of-type::before { + content: '\edcf'; + color: var(--list-ol-number-color); +} +body.dataview-list-style-pacman ul.dataview.list-view-ul>li:not(.task-list-item):not(:first-of-type):nth-of-type(2n):not(:nth-of-type(10n))::before { + content: '\eaee'; + color: var(--list-ul-disc-color); +} +body.dataview-list-style-pacman ul.dataview.list-view-ul>li:not(.task-list-item):not(:first-of-type):nth-of-type(2n+1)::before { + content: '\edd1'; + color: var(--list-ul-disc-color); +} +body.dataview-list-style-pacman ul.dataview.list-view-ul>li:not(.task-list-item):nth-of-type(10n)::before { + content: '\ef29'; + color: var(--list-ol-number-color); +} + +body.dataview-list-style-pacman ul.dataview.list-view-ul { + list-style: none; +} + +ul.dataview.dataview-ul.dataview-result-list-root-ul>li.dataview-result-list-li { + border-left: none !important; + margin: 0; + padding-left: 0em; +} + +ul.dataview.dataview-ul.dataview-result-list-root-ul { + list-style: none; +} + +.CodeMirror-code .CodeMirror-linewidget.rendered-block-embed.rendered-widget { + background-color: var(--embed-color); + border-radius: var(--radius-xs); + border: 1px solid var(--embed-color); +} + +body:is(.rainbow-lines-reading,.list-vertical-line-one) table.dataview.table-view-table :is(ol,ul) :is(ol,ul)::before, +body:is(.rainbow-lines-reading,.list-vertical-line-one) .kanban-plugin__markdown-preview-view :is(ol,ul) :is(ol,ul)::before { + border-left: none; +} + +:is(.markdown-preview-view,.markdown-rendered) .dataview.inline-field-standalone-value { + background-color: transparent; +} + +/* ================================== */ +/* ======= CodeMirror Options ======= */ +/* ================================== */ +.CodeMirror-widget img.hmd-image:active { + all: initial; +} + +.cm-formatting.cm-formatting-highlight.cm-highlight.hmd-hidden-token+.cm-highlight { + border-radius: var(--radius-xs); + padding: 0 3px 2px; +} + +.cm-formatting.cm-formatting-code.cm-inline-code.hmd-hidden-token+.cm-inline-code { + border-radius: var(--radius-xs); + padding: 2px 4px; +} + +.cm-formatting.cm-formatting-code.cm-inline-code.hmd-hidden-token { + font-size: 0 !important; +} + +.cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task=">"] { + background-size: 80% !important; + background-position: 60% 55% !important; + background-image: url('data:image/svg+xml;utf8,') !important; +} +.cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task=">"]::before { + content: ' '; + position: absolute; + padding: 0 0.2em; + margin-left: 0.4em; + border-radius: var(--radius-xs); + background-color: var(--checkbox-color-2); + z-index: -1; +} + +.cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task="<"] { + background-size: 80% !important; + background-position: 60% 55% !important; + background-image: url('data:image/svg+xml;utf8,') !important; +} +.cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task="<"]::before { + content: ' '; + position: absolute; + padding: 0 0.2em; + margin-left: 0.4em; + border-radius: var(--radius-xs); + background-color: var(--checkbox-color-1); + z-index: -1; +} + +.cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task="!"] { + background-size: 62% !important; + background-position: center !important; + background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0cHgiIGZpbGw9IiNkNGEzMDAiPjxnPjxyZWN0IGZpbGw9Im5vbmUiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIvPjwvZz48Zz48Zy8+PGc+PHBhdGggZD0iTTEyLDNjLTAuNDYsMC0wLjkzLDAuMDQtMS40LDAuMTRDNy44NCwzLjY3LDUuNjQsNS45LDUuMTIsOC42NmMtMC40OCwyLjYxLDAuNDgsNS4wMSwyLjIyLDYuNTYgQzcuNzcsMTUuNiw4LDE2LjEzLDgsMTYuNjlWMTljMCwxLjEsMC45LDIsMiwyaDAuMjhjMC4zNSwwLjYsMC45OCwxLDEuNzIsMXMxLjM4LTAuNCwxLjcyLTFIMTRjMS4xLDAsMi0wLjksMi0ydi0yLjMxIGMwLTAuNTUsMC4yMi0xLjA5LDAuNjQtMS40NkMxOC4wOSwxMy45NSwxOSwxMi4wOCwxOSwxMEMxOSw2LjEzLDE1Ljg3LDMsMTIsM3ogTTE0LDE3aC00di0xaDRWMTd6IE0xMCwxOXYtMWg0djFIMTB6IE0xNS4zMSwxMy43NGMtMC4wOSwwLjA4LTAuMTYsMC4xOC0wLjI0LDAuMjZIOC45MmMtMC4wOC0wLjA5LTAuMTUtMC4xOS0wLjI0LTAuMjdjLTEuMzItMS4xOC0xLjkxLTIuOTQtMS41OS00LjcgYzAuMzYtMS45NCwxLjk2LTMuNTUsMy44OS0zLjkzQzExLjMyLDUuMDMsMTEuNjYsNSwxMiw1YzIuNzYsMCw1LDIuMjQsNSw1QzE3LDExLjQzLDE2LjM5LDEyLjc5LDE1LjMxLDEzLjc0eiIvPjwvZz48Zz48cmVjdCBoZWlnaHQ9IjMiIHdpZHRoPSIxIiB4PSIxMS41IiB5PSIxMSIvPjxyZWN0IGhlaWdodD0iMyIgdHJhbnNmb3JtPSJtYXRyaXgoMC43MDcxIC0wLjcwNzEgMC43MDcxIDAuNzA3MSAtNC4wMzEyIDEwLjg1MzYpIiB3aWR0aD0iMSIgeD0iMTAuNTkiIHk9IjguNzkiLz48cmVjdCBoZWlnaHQ9IjMiIHRyYW5zZm9ybT0ibWF0cml4KC0wLjcwNzEgLTAuNzA3MSAwLjcwNzEgLTAuNzA3MSAxNC43Njc4IDI2LjcwMjgpIiB3aWR0aD0iMSIgeD0iMTIuNDEiIHk9IjguNzkiLz48L2c+PC9nPjwvc3ZnPg==) !important; +} +.theme-dark .cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task="!"] { + background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0cHgiIGZpbGw9IiNmZmRjNTEiPjxnPjxyZWN0IGZpbGw9Im5vbmUiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIvPjwvZz48Zz48Zy8+PGc+PHBhdGggZD0iTTEyLDNjLTAuNDYsMC0wLjkzLDAuMDQtMS40LDAuMTRDNy44NCwzLjY3LDUuNjQsNS45LDUuMTIsOC42NmMtMC40OCwyLjYxLDAuNDgsNS4wMSwyLjIyLDYuNTYgQzcuNzcsMTUuNiw4LDE2LjEzLDgsMTYuNjlWMTljMCwxLjEsMC45LDIsMiwyaDAuMjhjMC4zNSwwLjYsMC45OCwxLDEuNzIsMXMxLjM4LTAuNCwxLjcyLTFIMTRjMS4xLDAsMi0wLjksMi0ydi0yLjMxIGMwLTAuNTUsMC4yMi0xLjA5LDAuNjQtMS40NkMxOC4wOSwxMy45NSwxOSwxMi4wOCwxOSwxMEMxOSw2LjEzLDE1Ljg3LDMsMTIsM3ogTTE0LDE3aC00di0xaDRWMTd6IE0xMCwxOXYtMWg0djFIMTB6IE0xNS4zMSwxMy43NGMtMC4wOSwwLjA4LTAuMTYsMC4xOC0wLjI0LDAuMjZIOC45MmMtMC4wOC0wLjA5LTAuMTUtMC4xOS0wLjI0LTAuMjdjLTEuMzItMS4xOC0xLjkxLTIuOTQtMS41OS00LjcgYzAuMzYtMS45NCwxLjk2LTMuNTUsMy44OS0zLjkzQzExLjMyLDUuMDMsMTEuNjYsNSwxMiw1YzIuNzYsMCw1LDIuMjQsNSw1QzE3LDExLjQzLDE2LjM5LDEyLjc5LDE1LjMxLDEzLjc0eiIvPjwvZz48Zz48cmVjdCBoZWlnaHQ9IjMiIHdpZHRoPSIxIiB4PSIxMS41IiB5PSIxMSIvPjxyZWN0IGhlaWdodD0iMyIgdHJhbnNmb3JtPSJtYXRyaXgoMC43MDcxIC0wLjcwNzEgMC43MDcxIDAuNzA3MSAtNC4wMzEyIDEwLjg1MzYpIiB3aWR0aD0iMSIgeD0iMTAuNTkiIHk9IjguNzkiLz48cmVjdCBoZWlnaHQ9IjMiIHRyYW5zZm9ybT0ibWF0cml4KC0wLjcwNzEgLTAuNzA3MSAwLjcwNzEgLTAuNzA3MSAxNC43Njc4IDI2LjcwMjgpIiB3aWR0aD0iMSIgeD0iMTIuNDEiIHk9IjguNzkiLz48L2c+PC9nPjwvc3ZnPg==) !important; +} +.cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task="!"]::before { + content: ' '; + position: absolute; + padding: 0 0.2em; + margin-left: 0.4em; + border-radius: var(--radius-xs); + background-color: var(--checkbox-color-4); + z-index: -1; +} + +.cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task="?"] { + background-size: 62% !important; + background-position: 55% 80% !important; + background-image: url('data:image/svg+xml;utf8,') !important; +} +.cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task="?"]::before { + content: ' '; + position: absolute; + padding: 0 0.2em; + margin-left: 0.4em; + border-radius: var(--radius-xs); + background-color: var(--checkbox-color-3); + z-index: -1; +} + +.cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task="+"] { + background-size: 65% !important; + background-position: 52% 55% !important; + background-image: url('data:image/svg+xml;utf8,') !important; +} +.cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task="+"]::before { + content: ' '; + position: absolute; + padding: 0 0.2em; + margin-left: 0.4em; + border-radius: var(--radius-xs); + background-color: var(--checkbox-color-5); + z-index: -1; +} + +.cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task="-"] { + background-size: 65% !important; + background-position: 55% 60% !important; + background-image: url('data:image/svg+xml;utf8,') !important; +} +.cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task="-"]::before { + content: ' '; + position: absolute; + padding: 0 0.2em; + margin-left: 0.4em; + border-radius: var(--radius-xs); + background-color: var(--checkbox-color-6); + z-index: -1; +} + +.theme-dark .cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task="<"], +.theme-dark .cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task=">"], +.theme-dark .cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task="!"], +.theme-dark .cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task="?"], +.theme-dark .cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task="+"], +.theme-dark .cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task="-"] { + filter: invert(0) !important; +} + +.theme-dark .cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task="<"]::before, +.theme-dark .cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task=">"]::before, +.theme-dark .cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task="!"]::before, +.theme-dark .cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task="?"]::before, +.theme-dark .cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task="+"]::before, +.theme-dark .cm-formatting.cm-formatting-task.cm-property.hmd-hidden-token[data-task="-"]::before { + filter: invert(0) opacity(0.5) !important; +} + +span.cm-formatting.cm-formatting-highlight.cm-strong.cm-em.cm-highlight.hmd-hidden-token { + padding: 0; +} + +.markdown-source-view.mod-cm5 .CodeMirror-lines .view-content { + background-color: var(--background-transparent-black-or-white-3) !important; +} + +.hide-tokens .cm-s-obsidian pre.HyperMD-hr { + background: unset !important; +} + +.HyperMD-quote.CodeMirror-line .CodeMirror-widget + span.cm-quote::before { + border-left: none; +} + +.vertical-tab-content { + padding-bottom: 4em; +} + +.modal-container .modal-content textarea:not(.rename-textarea) { + height: 18rem !important; +} + +.suggestion-container +{ + background-color: var(--bg-color-settings-4); + backdrop-filter: blur(3px); +} + +/* ================================== */ +/* ============ QuickAdd ============ */ +/* ================================== */ +.quickAddModal .modal { + max-height: 90% !important; +} + +.modal-container.quickAddModal .modal-content { + overflow: initial !important; + margin-top: 5px !important; +} + +/* ================================== */ +/* ========= Style Settings ========= */ +/* ================================== */ +.style-settings-heading { + border-bottom: none !important; +} +.setting-item.setting-item-heading.style-settings-heading[data-level="2"], +.style-settings-container[data-level="2"], +.setting-item.setting-item-heading.style-settings-heading[data-level="3"], +.style-settings-container[data-level="3"], +.setting-item.setting-item-heading.style-settings-heading[data-level="4"], +.style-settings-container[data-level="4"] { + padding-left: 20px; +} + +.setting-item-description, +.setting-item-info { + word-wrap: break-word; + word-break: break-word; +} + +.setting-item.setting-item-heading.style-settings-heading[data-level="1"] .setting-item-name { + color: var(--h2-color) !important; +} +.setting-item.setting-item-heading.style-settings-heading[data-level="2"] .setting-item-name { + color: var(--h3-color)!important; +} +.setting-item.setting-item-heading.style-settings-heading[data-level="3"] .setting-item-name { + color: var(--h4-color) !important; +} +.setting-item.setting-item-heading.style-settings-heading[data-level="4"] .setting-item-name { + color: var(--h5-color) !important; +} +.style-settings-collapse-indicator { + color: var(--theme-color) !important; +} + +.setting-item.setting-item-heading.style-settings-heading.is-collapsed .style-settings-collapse-indicator { + opacity: 0.4; +} + +.style-settings-container { + padding-bottom: 5px !important; +} + +.style-settings-container .setting-item-control select { + max-width: 330px; +} + +.workspace-leaf-content .style-settings-container .setting-item:first-child { + margin-top: 20px; +} + +div.style-settings-heading[data-level="0"] { + position: relative; + padding: 8px; + margin-bottom: 0; + background-color: var(--background-primary); + border-radius: var(--radius-l); + box-shadow: 0 3px 5px var(--background-modifier-box-shadow); +} + +.is-mobile div.style-settings-heading[data-level="0"] { + padding: 4px; +} + +div.style-settings-heading[data-level="0"] + .style-settings-container { + padding: 20px 30px; + margin-top: -10px; + margin-bottom: 0; + margin-left: 0; + border: 0px; + border-radius: var(--radius-l); +} + +div.style-settings-heading[data-level="0"] + .style-settings-container .style-settings-collapse-indicator { + margin-left: 0; +} + + +div.style-settings-heading[data-level="0"].is-collapsed { + margin-bottom: 15px; + border-radius: var(--radius-l); + box-shadow: 0 3px 5px var( --background-modifier-box-shadow); +} + +div.style-settings-heading[data-level="0"].is-collapsed { + background-color: var(--background-primary-alt); +} + + +div.style-settings-heading[data-level="1"] .setting-item-description { + padding-left: 2em; +} + +div.style-settings-heading:not([data-level="0"]):not([data-level="1"]) .setting-item-description { + padding-left: 2em; +} + +div.style-settings-heading { + padding: 8px 0; + margin-bottom: 5px; +} + +div.style-settings-container[data-level="0"] { + margin-left: 4px; +} + +div.style-settings-container[data-level] { + padding-bottom: 0; + margin-left: 0.5em; +} + +.setting-item.setting-item-heading.style-settings-heading .setting-item-name { + width: fit-content; + padding: 0 8px; + border-radius: var(--radius-l); +} + +.setting-item.setting-item-heading.style-settings-heading:hover .style-settings-collapse-indicator { + color: var(--text-accent-hover)!important; +} + +.setting-item.setting-item-heading.style-settings-heading:hover .setting-item-name { + color: var(--text-accent-hover)!important; +} + +div.workspace-leaf-content[data-type="style-settings"] .view-content .style-settings-container div.setting-item:not(.setting-item-heading) { + flex-flow: wrap; +} + +div.workspace-leaf-content[data-type="style-settings"] .setting-item-description { + font-size:12px; +} + +div.workspace-leaf-content[data-type="style-settings"] div.setting-item, +div.workspace-leaf-content[data-type="style-settings"] div.style-settings-heading { + border-bottom: unset; + border-top: 1px inset #ffffff24; +} + + +/* +.theme-light div.setting-item { + border-bottom: 1px dotted #e1e1e199; + border-top: 1.5px solid #cfcfcf42; + +} + + +.theme-dark div.setting-item { + border-bottom: 1px solid var(--background-modifier-border); + box-shadow: inset 0 -1px 0 rgb(0 0 0 / 45%), + inset 0 -2px 0 rgb(0 0 0 / 10%) +} +*/ + + +div.workspace-leaf-content[data-type="style-settings"] div.style-settings-heading[data-id="topaz-community"] { + margin-top: 10px; + margin-bottom: 0; + pointer-events: none; + cursor: text; + border-top: 2px solid var(--background-modifier-border); + pointer-events: none; +} + +.style-settings-heading[data-id="topaz-community"] .setting-item-control, +.style-settings-heading[data-id="topaz-community"] .style-settings-collapse-indicator { + display: none; +} + +.style-settings-heading[data-id="topaz-community"] .setting-item-name::before { + display: inline-block; + width: 20px; + height: fit-content; + padding-right: 8px; + font-family: "Segoe UI Emoji", "Apple Color Emoji", sans-serif; + font-weight: initial; + color: unset; + content: "❤️"; +} + +.setting-item.style-settings-heading[data-id="topaz-github"] { + cursor: default; +} + +.setting-item.style-settings-heading[data-id="topaz-github"]:hover div.setting-item-name { + color: var(--text-normal); +} + +.setting-item.style-settings-heading[data-id="topaz-github"] .setting-item-name::before { + display: inline-block; + width: 20px; + height: fit-content; + padding-right: 8px; + font-family: "Segoe UI Emoji", "Apple Color Emoji", sans-serif; + font-weight: initial; + color: unset; + content: "⭐"; +} + +.setting-item.style-settings-heading[data-id="topaz-github"] .setting-item-description { + color: var(--interactive-accent); + cursor: text; + user-select: all; +} + +.setting-item.style-settings-heading[data-id="topaz-example-github"] { + cursor: default; +} + +.setting-item.style-settings-heading[data-id="topaz-example-github"]:hover div.setting-item-name { + color: var(--text-normal); +} + +.setting-item.style-settings-heading[data-id="topaz-example-github"] .setting-item-name::before { + display: inline-block; + width: 20px; + height: fit-content; + padding-right: 8px; + font-family: "Segoe UI Emoji", "Apple Color Emoji", sans-serif; + font-weight: initial; + color: unset; + content: "⚠️"; +} + +.setting-item.style-settings-heading[data-id="topaz-example-github"] .setting-item-description { + color: var(--interactive-accent); + cursor: text; + user-select: all; +} + +.style-settings-container .setting-item:is([data-id*="interactive-accent"], [data-id*="text-accent"]) .setting-item-control::before { + width: 1.5em; + height: 1.5em; + margin-right: 8px; + content: " "; + border: 1px solid var(--background-modifier-border); + border-radius: var(--radius-l); +} + + +.style-settings-container .setting-item:is([data-id^="interactive-accent"]) .setting-item-control::before { + background-color: var(--interactive-accent); +} +.style-settings-container .setting-item:is([data-id^="text-accent"]) .setting-item-control::before { + background-color: var(--text-accent); +} +/**style setting logic ******/ +body:not(.color-scheme-options-lillimon-topaz) .setting-item[data-id="color-magic"], +body:not(.background-settings-workplace-background-image) .setting-item[data-id="background-settings-workplace-background-image"] ~ * { + display: none; +} +body:not(.background-image-settings-switch) .setting-item[data-id="bg-markdown-page-opacity-cp"], +body:not(.background-image-settings-switch) .setting-item[data-id="toggle-nonoverlapping-bg"], +body:not(.background-image-settings-switch) .setting-item[data-id="background-image-settings-markdown-page-options"], +body:not(.background-image-settings-switch) .setting-item[data-id="background-image-settings-markdown-page-random"], +body:not(.background-image-settings-switch) .setting-item[data-id="background-image-settings-markdown-page-random-options"] { + display: none; +} + +body:not(.background-notebook-liked-switch) .setting-item[data-id="background-notebook-liked-switch"] ~ * { + display: none; +} + +body:not([class*="background-settings-workplace-wave"]) .setting-item[data-id="background-waves-color"], +body:not(.background-settings-workplace-theme-light-custom-option) .setting-item[data-id="background-settings-workplace-theme-light-custom"], +body:not(.background-settings-workplace-theme-dark-custom-option) .setting-item[data-id="background-settings-workplace-theme-dark-custom"], +body:not(.background-settings-workplace-random-dark) .setting-item[data-id="background-settings-workplace-random"], +body:not(.background-settings-workplace-random-light) .setting-item[data-id="background-settings-workplace-random"] { + display: none; +} + +.setting-item:is([data-id="background-image-settings-switch"],[data-id="background-notebook-liked-switch"],[data-id="background-settings-workplace-background-image"],[data-id="background-image-settings-command-palette-switch"]) .setting-item-name { + font-weight: bold; +} +body:not(.background-image-settings-markdown-page-custom) .setting-item[data-id="custom-markdown-page-background-color"], +body:not(.background-image-settings-markdown-page-custom) .setting-item[data-id="background-markdown-page-theme-light-custom"], +body:not(.background-image-settings-markdown-page-custom) .setting-item[data-id="background-markdown-page-theme-dark-custom"] { + display: none; +} + + +body:not(.background-image-settings-markdown-page-random) .setting-item[data-id="background-image-settings-markdown-page-random-options"] { + display: none; +} +.setting-item[data-id="notebook-liked-background-settings"] + .style-settings-container .setting-item:not(:first-child) { + /* display: none; */ +} +body:is(.notebook-liked-markdown-page-grid-notebook-1,.notebook-liked-markdown-page-grid-notebook-2, +.notebook-liked-markdown-page-dotted-notebook-1,.notebook-liked-markdown-page-dotted-notebook-2) .setting-item[data-id="bg-color-notebook"], +body.notebook-liked-markdown-page-grid-notebook-1 .setting-item[data-id="grid-notebook-line-color-1"], +body.notebook-liked-markdown-page-grid-notebook-2 .setting-item[data-id="grid-notebook-line-color-2"], +body:is(.notebook-liked-markdown-page-dotted-notebook-1,.notebook-liked-markdown-page-dotted-notebook-2) .setting-item[data-id="dotted-notebook-dot-color"] { + display: block !important; +} +body:not(.background-image-settings-command-palette-switch) .setting-item[data-id="background-image-settings-command-palette-switch"] ~ *, +body:not(.background-image-settings-command-palette-custom) .setting-item[data-id="background-command-palette-theme-light-custom"], +body:not(.background-image-settings-command-palette-custom) .setting-item[data-id="background-command-palette-theme-dark-custom"] { + display: none; +} +body:not(.toggle-bg-panel-page) .setting-item[data-id="toggle-bg-panel-page"] ~ *, +body:not(.panel-page-bg-theme-light-custom) .setting-item[data-id="background-panel-page-theme-light-custom"], +body:not(.panel-page-bg-theme-dark-custom) .setting-item[data-id="background-panel-page-theme-dark-custom"] { + display: none; +} + +body:not(.fancy-hr-icon) .setting-item[data-id="fancy-hr-folder-icon"], +body:not(.fancy-hr-no-icon) .setting-item[data-id="fancy-hr-folder-no-icon"], +body:not(.fancy-hr-number) .setting-item[data-id="fancy-hr-folder-with-number"] { + display: none; +} + +body:not(.bt-default-unordered-list) .setting-item[data-id="options-bt-default"], +body:not(.custom-unordered-list) .setting-item[data-id="options-for-custom"] { + display: none; +} + +body:not(.custom-ordered-list) .setting-item[data-id^="list-ol-marker-"] { + display: none; +} +body.folder-style-change-options-colorful-default .setting-item[data-id="folder-style-change-options-colorful-subfolder"] { + display: none; +} + +body:not(.folder-colorful-custom) .setting-item[data-id="folder-colorful-custom-color"] { + display: none; +} + +body:not(.loading-custom-text) .setting-item[data-id="loading-custom-text-folder"], +body:not(.loading-animation-custom) .setting-item[data-id="loading-animation-custom-folder"] { + display: none; +} + +body:not(.colorful-tag-bt) .setting-item[data-id="customised-colorful-tag"], +body:not(.tag-pill-outlined) .setting-item[data-id="outlined-style"] { + display: none; +} + + +body.is-hidden-frameless .setting-item:is([data-id="simple-titlebar"],[data-id="custom-titlebar-bg"],[data-id="titlebar-blur-depth"],[data-id="titlebar-brightness"],[data-id="hide-titlebar-text"]) { + display: none; +} + +body:not(.is-hidden-frameless) .setting-item:is([data-id="hide-titlebar-close-btn"]) { + display: none; +} + +body:not(.color-scheme-options-simplicity-topaz) .setting-item:is([data-id="disable-auto-hide-header"]) { + display: none; +} + +body:not(.bt-colorful-titlebar) .setting-item[data-id="background-titlebar-inner"] { + display: none; +} + +/********/ +/* ================================== */ +/* ==== advanced-tables-toolbar ===== */ +/* ================================== */ +.workspace-leaf-content[data-type="advanced-tables-toolbar"] .nav-buttons-container>.nav-action-button { + padding: 5px; +} + +.workspace-leaf-content[data-type="advanced-tables-toolbar"] .nav-buttons-container>.nav-action-button svg { + height: 20px; + width: 20px; +} + +/* ================================== */ +/* =========== RTL support ========= */ +/* ================================== */ +:is(.markdown-preview-view,.markdown-rendered).rtl blockquote { + border-right-width: 7px; + border-left-width: 0; +} + +:is(.markdown-preview-view,.markdown-rendered).rtl ul >li:not(.task-list-item) { + border-left: none; + border-right: 0.125em solid var(--list-ul-block-color); +} + +:is(.markdown-preview-view,.markdown-rendered).rtl ol:not(.contains-task-list)>li:not(.task-list-item) { + border-right: 0.125em solid var(--list-ol-block-color); + border-left: none; +} + +.markdown-preview-view.rtl:not(.kanban) ul>li:not(.task-list-item), +.markdown-preview-view.rtl ol:not(.contains-task-list)>li:not(.task-list-item) { + padding-right: 0.25em; +} + +:is(.markdown-preview-view,.markdown-rendered).rtl h1:hover::before { + margin-right: -24px; +} + +:is(.markdown-preview-view,.markdown-rendered).rtl h2:hover::before, +:is(.markdown-preview-view,.markdown-rendered).rtl h3:hover::before, +:is(.markdown-preview-view,.markdown-rendered).rtl h4:hover::before, +:is(.markdown-preview-view,.markdown-rendered).rtl h5:hover::before, +:is(.markdown-preview-view,.markdown-rendered).rtl h6:hover::before { + margin-right: -25px; +} + +body:not(.default-icons) :is(.markdown-preview-view,.markdown-rendered).rtl div.heading-collapse-indicator.collapse-indicator { + position: absolute; + right: -33px; + padding-left: 0; + transition: transform 20ms linear 0s; +} + +body:not(.default-icons) :is(.markdown-preview-view,.markdown-rendered).rtl h1 div.heading-collapse-indicator.collapse-indicator, +body:not(.default-icons) :is(.markdown-preview-view,.markdown-rendered).rtl h2 div.heading-collapse-indicator.collapse-indicator { + position: absolute; + right: -32px; + padding-left: 0; + margin-top: 11px; + transition: transform 20ms linear 0s; +} + +body:not(.default-icons) :is(.markdown-preview-view,.markdown-rendered).rtl div.is-collapsed h1 div.heading-collapse-indicator.collapse-indicator, +body:not(.default-icons) :is(.markdown-preview-view,.markdown-rendered).rtl div.is-collapsed h2 div.heading-collapse-indicator.collapse-indicator { + transform: translateX(-9px) translateY(18px) rotate(90deg); + opacity: 0.5; +} + +body:not(.default-icons) :is(.markdown-preview-view,.markdown-rendered).rtl div.is-collapsed div.heading-collapse-indicator.collapse-indicator { + transform: translateX(-2px) translateY(25px) rotate(90deg); + opacity: 0.5; +} + +body:not(.default-icons) :is(.markdown-preview-view,.markdown-rendered).rtl .list-collapse-indicator.collapse-indicator.collapse-icon::before { + right: 0; +} + +body:not(.default-icons) :is(.markdown-preview-view,.markdown-rendered).rtl div>ul>li>.list-collapse-indicator.collapse-indicator.collapse-icon::before, +body:not(.default-icons) :is(.markdown-preview-view,.markdown-rendered).rtl div>ol>li>.list-collapse-indicator.collapse-indicator.collapse-icon::before { + margin-right: 48px; +} + +body:not(.default-icons) :is(.markdown-preview-view,.markdown-rendered).rtl li.is-collapsed div.list-collapse-indicator.collapse-indicator.collapse-icon::before { + transform: rotate(90deg); +} + +.markdown-source-view.mod-cm6.is-live-preview.is-rtl .HyperMD-quote { + border: 0 solid var(--theme-color); + border-right-width: 5px; +} + +.CodeMirror-code.CodeMirror-rtl span.cm-quote::before { + content: ""; + border-right: 7px solid var(--theme-color); + border-radius: 0; /*5px 0 0 5px;*/ + height: 100%; + border-left: none !important; + margin-right: -11px; + position: absolute; +} + +.markdown-source-view.mod-cm6.is-rtl .HyperMD-list-line:not([class*="quote"]) .cm-indent::before { + margin-right: 0.3rem; +} + +.CodeMirror-code.CodeMirror-rtl span.cm-formatting-quote + *::before, +.CodeMirror-code.CodeMirror-rtl span.cm-formatting-quote + span.cm-hmd-indent-in-quote + span.cm-quote:not(.cm-formatting-quote)::before, +.CodeMirror-code.CodeMirror-rtl span.cm-inline-code + *::before, +.CodeMirror-code.CodeMirror-rtl span.cm-highlight + *::before, +.CodeMirror-code.CodeMirror-rtl span.cm-quote + *::before, +.CodeMirror-code.CodeMirror-rtl span.cm-hmd-html-end + *::before { + border-right: none; +} + +.CodeMirror-code.CodeMirror-rtl *:not(font)>em>strong, +.CodeMirror-code.CodeMirror-rtl *:not(font)>strong>em, +.CodeMirror-code.CodeMirror-rtl .cm-strong.cm-em { + padding-right: 0 !important; +} + +/* ================================== */ +/* ============ CardBoard =========== */ +/* ================================== */ +.card-board input[type="checkbox"] { + box-sizing: border-box !important; + border: 2px solid var(--background-modifier-border) !important; + width: 1.2em !important; + height: 1.2em !important; + margin: 0.2em 0.5em 0em 0; + filter: hue-rotate(var(--theme-color)); +} + +.card-board input[type="checkbox"]:checked { + background-position: center; + background-size: 120%; + background-repeat: no-repeat; + background-image: url('data:image/svg+xml; utf8, '); +} + +.card-board input[type="checkbox"]:checked { + border: none !important; +} + +.card-board input[type="checkbox"]:checked::before, +.card-board input[type="checkbox"]:hover::before { + display: none; +} + +/* ================================== */ +/* ============ Outliner ============ */ +/* ================================== */ +body:not(.outliner-plugin-bls).markdown-source-view.mod-cm5 .cm-hmd-list-indent { + position: initial !important; +} + +.outliner-plugin-bls .cm-hmd-list-indent .cm-tab::before { + display: none; +} + +.outliner-plugin-bls .cm-s-obsidian.is-live-preview .list-bullet:before { + display: none; +} +.outliner-plugin-bls .CodeMirror-line .cm-hmd-list-indent::before { + left: -0.2em !important; + right: -0.4em; + background-size: 1.6ch 1px !important; +} +.outliner-plugin-bls .cm-line .cm-hmd-list-indent::before { + right: -0.4em; + background-size: 1.45ch 1px !important; +} + + +/* ================================== */ +/* ==============Better Code Block ============= */ +/* ================================== */ +pre.code-block-pre__has-linenum { + padding: 0; + min-height: unset; +} +div.code-block-wrap > pre pre:not([closed]) + code[class*=language-] { + padding-bottom: 1em !important; +} + +.obsidian-embedded-code-title__code-block-title > .title { + line-height: 29px; + font-weight: bold; + font-size: var(--callout-title-size); + font-family: var(--font-text); +} +.markdown-rendered pre.obsidian-embedded-code-title__code-block-title[closed] { + background-color: rgba(var(--interactive-accent-rgb), 0.1) !important; +} +.markdown-rendered pre.obsidian-embedded-code-title__code-block-title { + overflow-y: hidden; + background-color: transparent !important; +} + +.obsidian-embedded-code-title__code-block-title:not([closed]) .langName { + opacity: 0.35; + font-size: 12px; +} +.obsidian-embedded-code-title__code-block-title .langName { + color: var(--code-language); +} +.obsidian-embedded-code-title__code-block-title .collapser .handle { + margin-top: -3px; +} +.obsidian-embedded-code-title__code-block-title[closed] .langName { + opacity: 0.75; + font-size: 12px; +} +.obsidian-embedded-code-title__code-block-title .collapser .handle { + opacity: 0.35; +} +pre.code-block-pre__has-linenum::before { + display: none; +} +.code-block-linenum-wrap { + opacity: 0.5; + border-right-color:rgba(var(--mono-rgb-100), 0.5) !important; +} + +.markdown-rendered .code-block-pre__has-linenum button.copy-code-button:not([style="right: 32pt"]) { + background-image: url("data:image/svg+xml,%3Csvg t='1667575665955' class='icon' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='5542' width='32' height='32'%3E%3Cpath d='M568.7 319.8l86.8 86.8v476.6h-466V319.8h379.2m29-70H178.9c-32.8 0-59.4 26.5-59.4 59.3v584.7c0 15.7 6.3 30.8 17.4 42 11.1 11.2 26.2 17.4 42 17.4h487.4c15.7 0 30.8-6.3 41.9-17.4 11.1-11.1 17.3-26.2 17.3-42V377.6L597.7 249.8z' fill='%2391B1D5' p-id='5543'%3E%3C/path%3E%3Cpath d='M776.7 70.8H357.9c-32.8 0-59.4 26.5-59.4 59.3v100h70v-89.3h379.2l86.8 86.8v476.6h-85.8v70h96.6c15.7 0 30.8-6.3 41.9-17.4 11.1-11.1 17.3-26.2 17.3-42V198.6L776.7 70.8z' fill='%2391B1D5' p-id='5544'%3E%3C/path%3E%3C/svg%3E"); +} +.code-block-pre__has-linenum button.copy-code-button:hover { + background-color: none; + box-shadow: var(--window-shadow); +} +/* ================================== */ +/* ============== Make.md ============= */ +/* ================================== */ +body.mk-mark-sans #calendar-container { + margin: -10px -8px 0px -8px; +} + +/* ================================== */ +/* ============== Memos ============= */ +/* ================================== */ +div[data-type="memos_view"] .memo-editor-wrapper > .memo-editor textarea { + max-height: calc(65vh)!important; +} +div[data-type="memos_view"] .memo-editor-wrapper > .memo-editor { + background-color: transparent !important; +} +div[data-type="memos_view"] .memo-editor-wrapper, +div[data-type="memos_view"] .memo-wrapper { + background-color: var(--background-primary) !important; +} +div[data-type="memos_view"] .memo-editor-wrapper, +div[data-type="memos_view"] .search-bar-container > .search-bar-inputer { + border: 2px solid var(--background-black-or-white-1) !important; + background-color: transparent !important; +} + +div[data-type="memos_view"] .queries-wrapper > .create-query-btn-container > .btn { + border-color: var(--text-muted) !important; +} + +div[data-type="memos_view"] { + color: var(--text-muted) !important; +} + +div[data-type="memos_view"] .common-editor-wrapper > .common-tools-wrapper > .btns-container > .confirm-btn { + background-color: var(--theme-color) !important; +} + +div[data-type="memos_view"] .common-editor-wrapper > .common-tools-wrapper > .btns-container > .confirm-btn:disabled { + opacity: 0.8 !important; +} + +div[data-type="memos_view"] .usage-heat-map-wrapper > .usage-heat-map > .stat-container:not([class*="bg"]):not([class*=null]) { + background-color: var(--background-transparent-black-or-white-4) !important; +} + +div[data-type="memos_view"] .usage-heat-map-wrapper > .usage-heat-map > .stat-container.today { + border-color: var(--theme-color) !important; +} + +div[data-type="memos_view"] .tags-wrapper > .tags-container > .tag-tip-container > .code-text { + padding: 4px 2px 4px 4px !important; + margin: 0 3px !important; + font-weight: bold; +} + +div[data-type='memos_view'] .tags-wrapper > .title-text, +[data-type='memos_view'] .queries-wrapper > .title-text > * { + color: var(--text-normal) !important; + opacity: 0.7 !important; +} +.mod-left-split div[data-type="memos_view"] #page-wrapper, +.mod-right-split div[data-type="memos_view"] #page-wrapper { + padding-left: 8px; + padding-right: 8px; + transform: translateX(0); +} +.mod-left-split div[data-type="memos_view"] #page-wrapper textarea, +.mod-right-split div[data-type="memos_view"] #page-wrapper textarea{ + padding: 0; + max-height: calc(28vh); +} +div[data-type="memos_view"] #page-wrapper .memo-comment-inputer textarea, +div[data-type="memos_view"] #page-wrapper .memo-comment-inputer textarea{ + padding: 8px; +} +.mod-left-split div[data-type="memos_view"] #page-wrapper > .content-wrapper-padding-fix, +.mod-right-split div[data-type="memos_view"] #page-wrapper > .content-wrapper-padding-fix { + width: 100%; + padding: 0; +} +.mod-left-split div[data-type="memos_view"] .view-content, +.mod-right-split div[data-type="memos_view"] .view-content { + padding: 0; +} +.mod-left-split div[data-type="memos_view"] .view-content .title-text span, +.mod-right-split div[data-type="memos_view"] .view-content .title-text span { + font-size: var(--editor-font-size); +} +.mod-left-split div[data-type="memos_view"] .memo-editor-wrapper, +div[data-type="memos_view"] .search-bar-container > .search-bar-inputer, +.mod-right-split div[data-type="memos_view"] .memo-editor-wrapper, +div[data-type="memos_view"] .search-bar-container > .search-bar-inputer { + border: 0 !important; +} +.mod-left-split div[data-type="memos_view"] .memo-editor-wrapper, div[data-type="memos_view"] .search-bar-container > .search-bar-inputer input, +.mod-right-split div[data-type="memos_view"] .memo-editor-wrapper, div[data-type="memos_view"] .search-bar-container > .search-bar-inputer input { + border: none; + border-bottom: 1px solid #ccc; + border-radius: 0; +} +div.mod-right-split div[data-type='memos_view'] .search-bar-container > .quickly-action-wrapper, +div.mod-left-split div[data-type='memos_view'] .search-bar-container > .quickly-action-wrapper { + width:100%; +} + +.mobile-view .memos-sidebar-wrapper, +div[data-type='memos_view'].mobile-view .tags-wrapper { + left: -1.1em !important; +} + +div[data-type='memos_view'] .common-editor-wrapper > .common-editor-inputer { + z-index: 0 !important; +} + +body div[data-type='memos_view'] #page-wrapper .usage-heat-map-wrapper > .day-tip-text-container > .tip-text { + white-space: nowrap; +} + +body.is-popout-window div[data-type='memos_view'] #page-wrapper .menu-popup-btn:hover +.menu-btns-popup.hidden { + display:flex !important; + margin-top: 50%; +} + +body.is-popout-window div[data-type='memos_view'] #page-wrapper .menu-popup-btn +.menu-btns-popup.hidden:hover { + display:flex !important; + margin-top: 50%; +} +body.is-popout-window.theme-dark div[data-type='memos_view'] .view-actions svg { + fill:none; +} + +.theme-light div[data-type='memos_view'] .view-actions a { + color: unset; +} + +body.is-popout-window .memos-sidebar-wrapper:hover { + transform: translateX(0); + box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.2); +} + +body.is-popout-window .memos-sidebar-wrapper { + display: flex; + flex-direction: column; + justify-content: flex-start; + align-items: center; + z-index: 99; + position: absolute; + top: 0; + left: 0; + width: 320px; + height: 100%; + padding: 0; + background-color: var(--background-secondary); + transition: all 1.2s ease-in-out; + transform: translateX(-320px); +} +body.is-popout-window div[data-type='memos_view'] .memos-header-container > .title-text > .action-btn { + display: none!important; +} + +@media only screen and (max-width: 875px) { + body.is-popout-window .memos-sidebar-wrapper > * { + width: 320px; + max-width: 95%; + flex-shrink: 0; + padding-left: 32px; + } + + body.is-popout-window div[data-type='memos_view'] .memo-editor-wrapper { + box-shadow: + 0px 2.3px 4.4px -12px rgba(0, 0, 0, 0.14), + 0px 7.8px 14.8px -12px rgba(0, 0, 0, 0.083), + 0px 35px 63px -12px rgba(0, 0, 0, 0.057); + width: calc(100% - 10px); + margin: auto; + } + + body.is-popout-window div[data-type='memos_view'] .search-bar-container { + width: 120px; + } + body.is-popout-window div[data-type='memos_view'] .search-bar-container > .search-bar-inputer { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + background-color: #fcfcfc; + height: 40px; + padding: 4px 16px; + border-radius: 8px; + width: 120%; + margin-left: -35px; + } + body.is-popout-window div[data-type='memos_view'] .search-bar-container > .quickly-action-wrapper { + display: none; + position: absolute; + top: 42px; + right: -2px; + z-index: 12; + padding-right: 20px; + padding-left: 8px; + padding-top: 8px; + padding-bottom: 8px; + width: 320px; + } + + body.is-popout-window div[data-type='memos_view'] .section-header-container, + body.is-popout-window div[data-type='memos_view'] .memos-header-container { + height: auto; + margin-top: 4px; + margin-bottom: 0; + padding: 0 12px; + padding-bottom: 8px; + } + body.is-popout-window div[data-type='memos_view'] .section-header-container > .title-text > .action-btn, + body.is-popout-window div[data-type='memos_view'] .memos-header-container > .title-text > .action-btn { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + width: 60px; + height: 24px; + margin-right: -8px; + margin-left: -20px; + flex-shrink: 0; + background-color: unset; + } + + /***/ + body.is-popout-window div[data-type="memos_view"] #page-wrapper { + padding-left: 8px; + padding-right: 8px; + transform: translateX(0); + } + + body.is-popout-window div[data-type="memos_view"] .view-content { + padding-top: 0; + padding-right: 0; + } + + body.is-popout-window div[data-type='memos_view'] #page-wrapper > .content-wrapper { + width:auto; + } + body:not(.is-mobile) div[data-type='memos_view'] .usage-heat-map-wrapper > .usage-heat-map { + width: 192px; + } + body:not(.is-mobile) div[data-type='memos_view'] .usage-heat-map-wrapper > .usage-heat-map > .stat-container { + width: 13px; + height: 13px; + margin-bottom: 2px; + } +} + + +/**memos 输入框移到下方***/ +body.memos-inputbox div[data-type='memos_view']:not(.mobile-view) #page-wrapper .memo-editor-wrapper { + bottom: 0; + margin-bottom: -145px; + position: absolute; + padding:8px; +} +body.memos-inputbox div[data-type='memos_view']:not(.mobile-view) .memolist-wrapper.completed { + padding-bottom: 40px; +} +body.memos-inputbox div[data-type='memos_view']:not(.mobile-view) #page-wrapper > .content-wrapper { + height: calc(100% - 150px); +} + +body.memos-inputbox div[data-type='memos_view']:not(.mobile-view) .memolist-wrapper { + flex-direction: column-reverse; +} + + +body:is(.grass-light.theme-light,.grass-dark.theme-dark) { + --stat-day-L1: #9be9a8; + --stat-day-L2: #40c463; + --stat-day-L3: #30a14e; + --stat-day-L4: #216e39; +} +body:is(.frame-light.theme-light,.frame-dark.theme-dark) { + --stat-day-L1: #f75205; + --stat-day-L2: #e03a07; + --stat-day-L3: #bf2104; + --stat-day-L4: #940b01; +} +body:is(.olive-light.theme-light,.olive-dark.theme-dark) { + --stat-day-L1: #9cc069; + --stat-day-L2: #78a851; + --stat-day-L3: #648b3f; + --stat-day-L4: #4f6e30; +} +body:is(.ice-light.theme-light,.ice-dark.theme-dark) { + --stat-day-L1: #82bbf0; + --stat-day-L2: #5da2eb; + --stat-day-L3: #3889e6; + --stat-day-L4: #126fe0; +} +body:is(.magenta-light.theme-light,.magenta-dark.theme-dark) { + --stat-day-L1: #fa9fb5; + --stat-day-L2: #ea4e9c; + --stat-day-L3: #ae017e; + --stat-day-L4: #610070; +} + +.theme-dark, +.theme-light { + --stat-day-L1: hsla(var(--interactive-accent-hsl),0.35); + --stat-day-L2: hsla(var(--interactive-accent-hsl),0.6); + --stat-day-L3: hsla(var(--interactive-accent-hsl),0.8); + --stat-day-L4: hsla(var(--interactive-accent-hsl),1); +} + +div[data-type='memos_view'] .usage-heat-map-wrapper > .usage-heat-map > .stat-container.stat-day-L1-bg { + background-color: var(--stat-day-L1) !important; +} +div[data-type='memos_view'] .usage-heat-map-wrapper > .usage-heat-map > .stat-container.stat-day-L2-bg { + background-color: var(--stat-day-L2) !important; +} +div[data-type='memos_view'] .usage-heat-map-wrapper > .usage-heat-map > .stat-container.stat-day-L3-bg { + background-color: var(--stat-day-L3) !important; +} +div[data-type='memos_view'] .usage-heat-map-wrapper > .usage-heat-map > .stat-container.stat-day-L4-bg { + background-color: var(--stat-day-L4) !important; +} +/* ==============Commander================ */ + +.cmdr.titlebar-button{ + float: left; + left: 100px; +} + +/* =============recent files=============== */ + +/**recent file **/ +body.remove-file-icons .workspace-leaf-content[data-type="recent-files"] .view-content { + padding: unset; +} + +body.remove-file-icons:not(.remove-arrow) .nav-folder.mod-root>.nav-folder-children>.nav-file { + padding-left: 16px; +} +body.remove-file-icons.remove-arrow .nav-folder.mod-root { + padding-left: 4px; +} +.workspace-leaf-content[data-type="recent-files"] .view-content { + padding: 3px 0 3px 3px; +} +.workspace-leaf-content[data-type="recent-files"] .nav-folder.mod-root { + height: fit-content; +} + +/**end recent file **/ +/* =============Db folder=============== */ + +/**db folder*/ +.database-plugin__cell_size_normal div.dataview-error-box { + min-height:auto; +} +.database-plugin__cell_size_normal .database-plugin__tr .data-input { + padding: 0; + flex: 0; + font-size: 0.9em; +} +.database-plugin__cell_size_normal .database-plugin__tr .data-input .markdown-preview-view { + padding:0px; + +} +.database-plugin__cell_size_normal .database-plugin__tr .database-plugin__td .database-plugin__md_cell { + padding: 0; +} +.database-plugin__cell_size_normal .data-input > * +{ + align-items: center; +} +.database-plugin__cell_size_normal .data-input > div +{ + display: flex;; + align-items: center; +} + +.data-input.database-plugin__calendar { + flex: 0; + cursor: pointer; +} + +div.react-datepicker-wrapper { + flex: 0; +} +.data-input.text-align-right { + flex: 0; +} +.database-plugin__td :is(.cell-padding, .data-input):empty::before { + content: "✏️"; + text-align: center; + color: hsla(var(--interactive-accent-hsl),0.8); + pointer-events: none; +} +.database-plugin__markdown-preview-view { + padding: 0; +} +.database-plugin__markdown-preview-view p{ + margin-block-start: 0; + margin-block-end: 0; +} +.database-plugin__tr .database-plugin__td { + background-color: transparent; +} +.database-plugin__tr .database-plugin__td .data-input { + background-color: transparent; +} +.database-plugin__table .database-plugin__tr:nth-child(odd) { + background-color: var(--table-background-color-odd); +} + +.database-plugin__td input[type="checkbox"] { + border: 1px dashed currentColor; +} +.database-plugin__td input[type="checkbox"]:checked { + border: none; +} +.database-plugin__td .database-plugin__checkbox input[type="checkbox"]:checked::before { + transform: scale(0); +} + + +/* =============folder tree===================== */ + +.oz-folders-tree-wrapper .oz-folder-contents { + border-left: 1px solid var(--background-modifier-border); +} +.oz-folders-tree-wrapper .file-tree-header-fixed { + background-color: transparent; +} +body.hide-titlebar-close-btn.hide-left-ribbon-retention-drawer .file-tree-plugin-view .oz-nav-action-button { + margin-left: 20px!important; +} +.file-tree-plugin-view .oz-flex-container { + margin-top: -6px; +} +.file-tree-plugin-view .oz-folders-tree-wrapper{ + margin-top: -8px; +} +/* ================================== */ +/* ============== webpage export html ============= */ +/* ================================== */ + +.webpage-container { + --banner-height:300px; + --banner-internal-embed-height:200px; + --banner-preview-embed-height:120px; + } + +body.color-scheme-options-simplicity-topaz.theme-dark.background-settings-workplace-background-image .webpage-container::before { + filter: blur(var(--blur-depth)) brightness(calc(var(--brightness-4-bg) - 0.5)) saturate(var(--saturate-4-bg)); +} +body.background-settings-workplace-background-image.theme-light .webpage-container::before, +body.background-settings-workplace-background-image.theme-dark .webpage-container::before { + background-image: var(--theme-background); + background-size: cover; + filter: blur(var(--blur-depth)) brightness(var(--brightness-4-bg)) saturate(var(--saturate-4-bg)); +} +body.background-settings-workplace-background-image.background-settings-workplace-waves2-light.theme-light .webpage-container::before, +body.background-settings-workplace-background-image.background-settings-workplace-waves2.theme-dark .webpage-container:before { + content: ""; + position: fixed; + height: auto; + width: 300%; + top: 75%; + left: -25%; + background-image: unset; + -webkit-mask-image: var(--theme-background); + background-size: 100% 100%; + opacity: 0.7; + filter: blur(var(--blur-depth)) brightness(var(--brightness-4-bg)) saturate(var(--saturate-4-bg)); + background-color: var(--wave2-background-color); +} +body.background-settings-workplace-background-image .webpage-container::before { + content: ''; + display: block; + position: absolute; + top: -37px; + right: -15px; + bottom: 0; + left: -15px; +} + +body.background-settings-workplace-background-image.background-settings-workplace-waves-light.theme-light .webpage-container::before, +body.background-settings-workplace-background-image.background-settings-workplace-waves.theme-dark .webpage-container::before { + content: ""; + position: fixed; + height: auto; + width: 300%; + transform: rotate(180deg); + top: 75%; + left: -25%; + background-image: unset; + -webkit-mask-image: var(--theme-background); + background-size: 100% 100%; + opacity: 0.7; + filter: blur(var(--blur-depth)) brightness(var(--brightness-4-bg)) saturate(var(--saturate-4-bg)); + background-color: var(--wave-background-color); +} + +.document-container :is(.markdown-preview-view,.markdown-rendered),.document-container .markdown-source-view { + background-color: var(--background-primary)!important; +} + +/* ================================== */ +/* ============== quiet-outline ============= */ +/* ================================== */ + +/**quiet outline**/ +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .view-content { + padding: unset; +} +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .n-slider .n-slider-rail { + background-color: var(--background-secondary-alt); + box-shadow: 0 3px 5px var(--background-modifier-box-shadow); +} +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .n-slider .n-slider-rail .n-slider-rail__fill { + background-color: var(--background-modifier-border); +} +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .n-slider .n-slider-dots .n-slider-dot { + background-color: var(--background-primary); + border: 2px solid var(--background-modifier-border); +} +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .n-slider .n-slider-dots .n-slider-dot.n-slider-dot--active { + border: 2px solid var(--interactive-accent); +} + + +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .n-button { + width: 32px; + height: 32px; + background-color: var(--background-secondary-alt); + border: 0px; + border-radius: var(--radius-l); +} +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .n-button .n-button__icon svg { + display: flex; + align-items: center; + justify-content: center; +} +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .n-button .n-button__border, +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .n-button .n-button__state-border { + display: none; +} + +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .n-tree-node-content__text p { + color:var(--text-normal); +} + + +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline { + padding-top: 10px; + padding-bottom: 28px; + margin-bottom: 5px; + border-radius: var(--radius-l); +} + +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .function-bar > :first-child { + margin-right: 8px; +} +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-2 .n-tree-node-indent, +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-3 .n-tree-node-indent:first-child, +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-4 .n-tree-node-indent:first-child, +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-5 .n-tree-node-indent:first-child, +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-6 .n-tree-node-indent:first-child { + border-right: 1px solid rgb(var(--accent-1-rgb),0.5) ; +} +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-3 .n-tree-node-indent, +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-4 .n-tree-node-indent:nth-child(2), +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-5 .n-tree-node-indent:nth-child(2), +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-6 .n-tree-node-indent:nth-child(2) { + border-right: 1px solid rgb(var(--accent-2-rgb),0.5) ; +} +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-4 .n-tree-node-indent, +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-5 .n-tree-node-indent:nth-child(3), +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-6 .n-tree-node-indent:nth-child(3) { + border-right: 1px solid rgb(var(--accent-3-rgb),0.5) ; +} +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-5 .n-tree-node-indent, +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-6 .n-tree-node-indent:nth-child(4) { + border-right: 1px solid rgb(var(--accent-4-rgb),0.5) ; +} +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .level-6 .n-tree-node-indent { + border-right: 1px solid rgb(var(--accent-5-rgb),0.5) ; +} +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .n-tree.n-tree--block-line .n-tree-node:not(.n-tree-node--disabled):hover { + background-color: hsla(var(--interactive-accent-hsl),0.2) +} +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .n-tree.n-tree--block-line .n-tree-node:not(.n-tree-node--disabled):hover p { + color: var(--text-accent-hover); +} + +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .n-tree-node--selectable.located p { + color: var(--text-accent-hover); +} +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .quiet-outline .n-tree-node--selected p { + color: var(--text-accent-hover); + font-weight: 600; + background-color: hsla(var(--interactive-accent-hsl),0.2) +} + +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .n-input { + height: 32px; + background-color: var(--background-primary); + border-radius: var(--radius-l); +} +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .n-input .n-input__border { + border: 0; +} +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .n-input:not(.n-input--disabled):hover .n-input__state-border, +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .n-input:not(.n-input--disabled).n-input--focus .n-input__state-border { + border: 0; + box-shadow: unset; +} +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .n-input .n-input__placeholder { + display: none; +} +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .n-input .n-input__input input { + caret-color: var(--interactive-accent); +} +body.quiet-outline-optimize .workspace-leaf-content[data-type=quiet-outline] .n-input .n-input__input input::placeholder { + color: var(--text-faint); +} +/* #end quiet outline */ + +/* ============ */ +/*table-generatorn*/ +/* ============ */ + +.table-generator { + animation:0.2s popup forwards; + border-radius:10px; + width: auto!important; + box-shadow: 2px 2px 12px rgba(0, 0, 0, 0.1); +} + +.table-generator-view { + border: none !important; +} +.input-table-generator { + font-size: small; +} +.input-table-generator input { + outline-style: none; + border: 1px solid var(--background-modifier-border)!important; + border-radius: 3px; +} +.table-generator button { + border: 1px solid var(--background-modifier-border)!important; + border-radius: 3px; +} + +/* ============ */ +/*image position*/ +/* ============ */ +img[alt$="left"]:not([class*="emoji"]), +img[alt$="Left"]:not([class*="emoji"]), +img[alt$="LEFT"]:not([class*="emoji"]), +img[alt$="L"]:not([class*="emoji"]), +.markdown-source-view.mod-cm6 img[alt$="left"]:not([class*="emoji"]), +.markdown-source-view.mod-cm6 img[alt$="Left"]:not([class*="emoji"]), +.markdown-source-view.mod-cm6 img[alt$="LEFT"]:not([class*="emoji"]), +.markdown-source-view.mod-cm6 img[alt$="L"]:not([class*="emoji"]), +.internal-embed.image-embed.is-loaded[alt$="left"] img[alt$="left"]:not([class*="emoji"]), +.internal-embed.image-embed.is-loaded[alt$="Left"] img[alt$="Left"]:not([class*="emoji"]), +.internal-embed.image-embed.is-loaded[alt$="LEFT"] img[alt$="LEFT"]:not([class*="emoji"]), +.internal-embed.image-embed.is-loaded[alt$="L"] img[alt$="L"]:not([class*="emoji"]), +body:not(.image-zoom) .view-content img[alt$="left"]:not([class*="emoji"]), +body:not(.image-zoom) .view-content img[alt$="Left"]:not([class*="emoji"]), +body:not(.image-zoom) .view-content img[alt$="LEFT"]:not([class*="emoji"]), +body:not(.image-zoom) .view-content img[alt$="L"]:not([class*="emoji"]) { + margin: auto !important; + margin-left: 0 !important; + display: block; +} + +img[alt$="right"]:not([class*="emoji"]), +img[alt$="Right"]:not([class*="emoji"]), +img[alt$="RIGHT"]:not([class*="emoji"]), +img[alt$="R"]:not([class*="emoji"]), +.markdown-source-view.mod-cm6 img[alt$="right"]:not([class*="emoji"]), +.markdown-source-view.mod-cm6 img[alt$="Right"]:not([class*="emoji"]), +.markdown-source-view.mod-cm6 img[alt$="RIGHT"]:not([class*="emoji"]), +.markdown-source-view.mod-cm6 img[alt$="R"]:not([class*="emoji"]), +.internal-embed.image-embed.is-loaded[alt$="right"] img[alt$="right"]:not([class*="emoji"]), +.internal-embed.image-embed.is-loaded[alt$="Right"] img[alt$="Right"]:not([class*="emoji"]), +.internal-embed.image-embed.is-loaded[alt$="RIGHT"] img[alt$="RIGHT"]:not([class*="emoji"]), +.internal-embed.image-embed.is-loaded[alt$="R"] img[alt$="R"]:not([class*="emoji"]), +body:not(.image-zoom) .view-content img[alt$="right"]:not([class*="emoji"]), +body:not(.image-zoom) .view-content img[alt$="Right"]:not([class*="emoji"]), +body:not(.image-zoom) .view-content img[alt$="RIGHT"]:not([class*="emoji"]), +body:not(.image-zoom) .view-content img[alt$="R"]:not([class*="emoji"]) { + margin: auto !important; + margin-right: 0 !important; + display: block; +} + +img[alt$="centre"]:not([class*="emoji"]), +img[alt$="center"]:not([class*="emoji"]), +img[alt$="CENTRE"]:not([class*="emoji"]), +img[alt$="CENTER"]:not([class*="emoji"]), +img[alt$="Center"]:not([class*="emoji"]), +img[alt$="Centre"]:not([class*="emoji"]), +img[alt$="C"]:not([class*="emoji"]), +.markdown-source-view.mod-cm6 img[alt$="centre"]:not([class*="emoji"]), +.markdown-source-view.mod-cm6 img[alt$="center"]:not([class*="emoji"]), +.markdown-source-view.mod-cm6 img[alt$="Centre"]:not([class*="emoji"]), +.markdown-source-view.mod-cm6 img[alt$="Center"]:not([class*="emoji"]), +.markdown-source-view.mod-cm6 img[alt$="CENTRE"]:not([class*="emoji"]), +.markdown-source-view.mod-cm6 img[alt$="CENTER"]:not([class*="emoji"]), +.markdown-source-view.mod-cm6 img[alt$="C"]:not([class*="emoji"]), +.internal-embed.image-embed.is-loaded[alt$="centre"] img[alt$="right"]:not([class*="emoji"]), +.internal-embed.image-embed.is-loaded[alt$="center"] img[alt$="Right"]:not([class*="emoji"]), +.internal-embed.image-embed.is-loaded[alt$="Centre"] img[alt$="RIGHT"]:not([class*="emoji"]), +.internal-embed.image-embed.is-loaded[alt$="Center"] img[alt$="R"]:not([class*="emoji"]), +.internal-embed.image-embed.is-loaded[alt$="CENTRE"] img[alt$="Right"]:not([class*="emoji"]), +.internal-embed.image-embed.is-loaded[alt$="CENTER"] img[alt$="RIGHT"]:not([class*="emoji"]), +.internal-embed.image-embed.is-loaded[alt$="C"] img[alt$="R"]:not([class*="emoji"]), +body:not(.image-zoom) .view-content img[alt$="centre"]:not([class*="emoji"]), +body:not(.image-zoom) .view-content img[alt$="center"]:not([class*="emoji"]), +body:not(.image-zoom) .view-content img[alt$="Centre"]:not([class*="emoji"]), +body:not(.image-zoom) .view-content img[alt$="Center"]:not([class*="emoji"]), +body:not(.image-zoom) .view-content img[alt$="CENTRE"]:not([class*="emoji"]), +body:not(.image-zoom) .view-content img[alt$="CENTER"]:not([class*="emoji"]), +body:not(.image-zoom) .view-content img[alt$="C"]:not([class*="emoji"]) { + margin: auto !important; + display: block; +} + +img[alt$="inline"]:not([class*="emoji"]), +img[alt$="Inline"]:not([class*="emoji"]), +img[alt$="INLINE"]:not([class*="emoji"]), +img[alt$="inl"]:not([class*="emoji"]), +img[alt$="INL"]:not([class*="emoji"]), +img[alt$="Inl"]:not([class*="emoji"]) { + display: inline !important; + padding: 0.05em 0.05em !important; + vertical-align: bottom; +} + +img[alt$="inlineL"]:not([class*="emoji"]), +img[alt$="InlineL"]:not([class*="emoji"]), +img[alt$="INLINEL"]:not([class*="emoji"]), +img[alt$="inlL"]:not([class*="emoji"]), +img[alt$="INLL"]:not([class*="emoji"]), +img[alt$="InlL"]:not([class*="emoji"]) { + float: left; + padding: 0 0.05em 0.05em 0 !important; +} + +img[alt$="inlineR"]:not([class*="emoji"]), +img[alt$="InlineR"]:not([class*="emoji"]), +img[alt$="INLINER"]:not([class*="emoji"]), +img[alt$="inlR"]:not([class*="emoji"]), +img[alt$="INLR"]:not([class*="emoji"]), +img[alt$="InlR"]:not([class*="emoji"]) { + float: right; + padding: 0 0 0.05em 0.05em !important; +} + +img.excalidraw-svg-right, +img.excalidraw-svg-Right, +img.excalidraw-svg-RIGHT, +img.excalidraw-svg-R { + float: right !important; +} + +img.excalidraw-svg-left, +img.excalidraw-svg-Left, +img.excalidraw-svg-LEFT, +img.excalidraw-svg-L { + float: left !important; +} + +img.excalidraw-svg-right, +img.excalidraw-svg-Right, +img.excalidraw-svg-RIGHT, +img.excalidraw-svg-R, +img.excalidraw-svg-left, +img.excalidraw-svg-Left, +img.excalidraw-svg-LEFT, +img.excalidraw-svg-L { + display: table; + width: 100% +} + +/* img captions */ +/* modified from Discordian theme by @radekkozak */ +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="center"], +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="centre"], +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="Centre"], +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="Center"], +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="CENTRE"], +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="CENTER"], +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="C"] { + clear: both; + margin: 0 auto !important; + width: fit-content; + display: block; +} + +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="center"]::after, +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="centre"]::after, +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="Centre"]::after, +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="Center"]::after, +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="CENTRE"]::after, +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="CENTER"]::after, +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="C"]::after { + content: attr(alt); + margin: 0.5rem 0; + display: block; + caption-side: bottom; + text-align: center; + font-size: 0.85rem; +} + +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="left"], +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="LEFT"], +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="Left"], +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="L"] { + position: relative; + float: left; + margin: 0.5rem 1rem 0.5rem 0 !important; + clear: both; + display: table; +} + +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="left"]::after, +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="LEFT"]::after, +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="Left"]::after, +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="L"]::after { + content: attr(alt); + padding: 0 0.5rem; + margin: 0.5rem 0 1rem; + display: table-caption; + caption-side: bottom; + text-align: center; + font-size: 0.85rem; +} + +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="right"], +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="RIGHT"], +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="Right"], +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="R"] { + position: relative; + float: right; + margin: 0.5rem 0 0.5rem 1rem !important; + clear: both; + display: table; +} + +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="right"]::after, +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="RIGHT"]::after, +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="Right"]::after, +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="R"]::after { + content: attr(alt); + padding: 0 0.5rem; + margin: 0.5rem 0 1rem; + display: table-caption; + caption-side: bottom; + text-align: center; + font-size: 0.85rem; +} + +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="inline"], +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="Inline"], +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="INLINE"], +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="inl"], +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="INL"], +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="Inl"] { + clear: both; + margin: 0 auto !important; + width: fit-content; + display: inline-table; +} + +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="inline"]::after, +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="Inline"]::after, +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="INLINE"]::after, +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="inl"]::after, +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="INL"]::after, +:is(.markdown-preview-view,.markdown-rendered,.markdown-source-view.mod-cm6.is-live-preview) .image-embed[src$="Inl"]::after { + content: attr(alt); + padding: 0 0.7em; + margin: 0.5rem 0; + display: block; + caption-side: bottom; + text-align: center; + font-size: 0.85rem; +} + +/* image-grid-1 */ +/* adapted from https://github.com/Lithou/Sandbox/blob/main/.obsidian/snippets/pub-Image%20Flags.css */ +body span[alt*="+grid"] { + display: table-cell; + vertical-align: middle; + padding: 5px; +} + +.markdown-source-view.is-live-preview .internal-embed.image-embed.is-loaded[alt*="+grid"] { + display: inline-table; + vertical-align: middle; + max-width: 25%; +} + +/* image-background */ +.markdown-preview-view img[alt^="background"] { + width: 100%; + margin: 0px auto; + position: absolute; + top: 0; + left: 0; + -webkit-mask-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0,0,0,1)), to(rgba(0,0,0,0))); + mask-image: linear-gradient(to bottom, rgba(0,0,0,1), rgba(0,0,0,0)); + z-index: -1; + background-size:cover; +} +.is-live-preview img[alt^="background"] { + width: 100%; + margin: 0px auto; + position: absolute; + top: 0; + left: 0; + -webkit-mask-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0,0,0,1)), to(rgba(0,0,0,0))); + mask-image: linear-gradient(to bottom, rgba(0,0,0,1), rgba(0,0,0,0)); + opacity: 0.35; + z-index: -1; +} + + +/*===================================================*/ +/*================== PRESENTATION =================*/ +/*===================================================*/ +/* +.slides-container li { + line-height: 1.05em; +} + +.reveal ol, +.reveal dl, +.reveal ul { + margin: 0.3em 0 0 1em; +} + +.slides-container ol>li { + border-left: 3px solid var(--list-ol-block-color); +} + +.slides-container ul>li:not(.task-list-item) { + border-left: 3px solid var(--list-ul-block-color); +} +*/ +/*===================================================*/ +/*================== MOBILE =====================*/ +/*===================================================*/ +.is-mobile :is(.markdown-preview-view,.markdown-rendered) { + padding: 0 18px 0 21px; +} + +.is-mobile :is(.markdown-preview-view,.markdown-rendered) ol:not(.contains-task-list)>li:not(.task-list-item), +.is-mobile .markdown-preview-view:not(.kanban) ul>li:not(.task-list-item) { + margin-left: 0; +} + +/*collapse allows*/ +body:not(.default-icons).is-mobile h1 div.heading-collapse-indicator.collapse-indicator, +body:not(.default-icons).is-mobile h2 div.heading-collapse-indicator.collapse-indicator, +body:not(.default-icons).is-mobile div.heading-collapse-indicator.collapse-indicator { + padding-left: 2px; +} + +body:not(.default-icons).is-mobile div.is-collapsed div.heading-collapse-indicator.collapse-indicator { + transform: translateX(-11px) translateY(16px) rotate(-90deg); +} + +body:not(.default-icons).is-mobile div.is-collapsed h1 div.heading-collapse-indicator.collapse-indicator, +body:not(.default-icons).is-mobile div.is-collapsed h2 div.heading-collapse-indicator.collapse-indicator { + transform: translateX(-2px) translateY(6px) rotate(-90deg); +} + +/*main body*/ +.is-mobile :is(.markdown-preview-view,.markdown-rendered) :is(.markdown-preview-section,.markdown-rendered), +.is-mobile .markdown-source-view .CodeMirror, +.is-mobile :is(.markdown-preview-view,.markdown-rendered) .markdown-preview-sizer { + text-align: left; +} + +/*strong*/ +.is-mobile :is(h1,h2,h3,h4,h5,h6,b), +.is-mobile .view-header-title { + font-weight: bold; +} + +.is-mobile .view-header-title { + line-height: 37px; + -webkit-mask-image: unset; + text-overflow: ellipsis; +} + +.is-mobile .view-header-title-container, +.is-mobile .view-header { + height: 40px; +} + +.is-mobile .view-action { + margin: 0 5px; +} + +.is-mobile span.cm-strong, +.is-mobile :not(font)>strong, +.is-mobile .cm-highlight.cm-strong { + color: var(--accent-strong); + font-weight: bold; +} + +/*image*/ +body:not(.image-zoom).is-mobile .markdown-reading-view img:not([class*="emoji"]):active { + cursor: initial; + position: initial; + object-fit: initial; + height: initial; + width: initial; + padding: initial; + top: initial; + left: initial; + right: initial; + bottom: initial; + transform: initial; + z-index: initial; + background-image: initial; + margin: initial; + max-width: 100%; +} + +.is-mobile .workspace-drawer-active-tab-container { + padding: 0; +} + + + +/*======================= +===custom buttons by cuman==== +========================*/ +/*便签动画效果*/ +@keyframes shake { /* 水平抖动,核心代码 */ + 10%, 90% { transform: translate3d(-1px, 0, 0); } + 20%, 80% { transform: translate3d(+2px, 0, 0); } + 30%, 70% { transform: translate3d(-4px, 0, 0); } + 40%, 60% { transform: translate3d(+4px, 0, 0); } + 50% { transform: translate3d(-4px, 0, 0); } +} +:is(.markdown-preview-view,.markdown-rendered) .stickies:hover{ + animation: shake 800ms ease-in-out; +} + +/*按钮颜色*/ +/*图标按钮*/ +button:not(.clickable-icon) { + box-shadow: none; +} +button:not(.clickable-icon):hover { + box-shadow: var(--input-shadow-hover); +} +body.style-options-for-buttons-plugin button.circle_btn { + box-shadow: none; + font-size: 12px; + word-break: keep-all; + margin: 4px; + padding: 0px; + height: 50px; + /* border-radius:50%; */ + position: relative; + border: 0; + display: inline-grid; + text-align: center; + justify-items: center; +} +/* blank 透明按钮*/ +body.style-options-for-buttons-plugin button.blank { + box-shadow: none; + background: #fff0f000; + padding: 0; +} +body.style-options-for-buttons-plugin button.blank:hover { + animation: swing_image 0.8s linear 0s 1 normal; + box-shadow: 0 2px 6px rgba(0, 0, 0, .3); +} + +body.style-options-for-buttons-plugin .admonition-content span>button.grad_button { + margin:3px; +} +body.style-options-for-buttons-plugin button.grad_button { + margin:5PX; + line-height: inherit; + display: inline-flex; + justify-content: center; + align-items: center; + min-width: 90px; + padding: 0 18px; + height: 38px; + font-size: 16px; + color: #fff; + text-align: center; + box-sizing: border-box; + font-weight: 500; + cursor: pointer; + border-radius: 30px; + transition: box-shadow .5s ease, transform .2s ease; + will-change: transform; + box-shadow: 0 2px 5px rgba(0, 0, 0, .2); + transform: + translateY(var(--ty, 0)) + rotateX(var(--rx, 0)) + rotateY(var(--ry, 0)) + translateZ(var(--tz, -12px)); +} + +body.style-options-for-buttons-plugin button.grad_button:hover { + animation: swing_image 0.8s linear 0s 1 normal; + box-shadow: 0 5px 15px rgba(0, 0, 0, .3); +} +body.style-options-for-buttons-plugin button.g_purple { + background: linear-gradient(135deg, #6e8efb, #a777e3); +} +body.style-options-for-buttons-plugin button.g_blue { + background: linear-gradient(135deg, #3370ff, #9fb9f6); +} +body.style-options-for-buttons-plugin button.g_green { + background: linear-gradient(135deg, #0eb347, #5be08a); +} +body.style-options-for-buttons-plugin button.g_lightgreen { + color: #17695e; + background: linear-gradient(135deg, #adfdad, #dafdda); +} +body.style-options-for-buttons-plugin button.g_yellow { + color: #836f20; + background: linear-gradient(135deg, #fcd539, #ffeb9b); +} +body.style-options-for-buttons-plugin.theme-dark button.g_yellow { + color: #e4cb58; + background: none; + border: 1px solid; +} +body.style-options-for-buttons-plugin.theme-dark button.g_green { + color: #19bc8b; + background: none; + border: 1px solid; +} +body.style-options-for-buttons-plugin.theme-dark button.g_lightgreen { + color: #8fc866; + background: none; + border: 1px solid; +} +body.style-options-for-buttons-plugin.theme-dark button.g_purple { + color: #ffa260; + background: none; + border: 1px solid; +} +body.style-options-for-buttons-plugin.theme-dark button.g_blue { + color: #739df9; + background: none; + border: 1px solid; +} +body.style-options-for-buttons-plugin.theme-dark .grad_button:hover { + color: var(--text-accent) +} + +button.tiny { + border-radius: 10px; + display: inline-flex; + justify-content: center; + align-items: center; + font-size: 1em; + min-width:3.5em; + cursor: pointer; + margin: 0; + padding:3px 6px; + background-color: transparent; + color: var(--text-normal); + position: relative; + z-index: 1; + overflow: hidden; + box-shadow: rgba(0, 0, 0, 0.1) 0px 5px 35px, rgba(0, 0, 0, 0.05) 0px 5px 5px; +} +button.tiny:hover { + color: var(--text-on-accent); +} +button.tiny::before { + content: ""; + position: absolute; + z-index: -1; + top: 50%; + left: 50%; + width: 1rem; + height: 1rem; + transform: translate3d(-50%,-50%,0) scale(0,0); + border-radius: 50%; + background-color: var(--interactive-accent-hover); + transform-origin: center; + transition: ease-in-out .5s; +} + +button.tiny:hover::before { + transform: translate3d(-50%,-50%,0) scale(15,15); +} + + +/*buttons*/ +.is-mobile .nav-action-button { + margin: 0px 3px !important +} + +.is-mobile .workspace-leaf-content[data-type='file-explorer'] .nav-buttons-container { + margin: 0 0 5px 0; +} + +.is-mobile .workspace-leaf-content .view-header-icon { + padding: 7px 3px 5px 8px; +} + +.is-mobile .nav-buttons-container>.nav-action-button svg { + width: 1.5em; + height: 1.5em; +} + +/* side bar button */ +.is-mobile .side-dock-ribbon-action { + padding: 5px; +} + +.is-mobile .cm-s-obsidian .HyperMD-codeblock { + color: var(--text-color-code); +} + +.is-mobile :is(.markdown-preview-view,.markdown-rendered) blockquote { + margin-left: 3%; + margin-right: 3%; +} + +.is-mobile code:not([class*='language-']), +.is-mobile .cm-s-obsidian span.cm-inline-code { + padding: 5px 3px 2px; +} + +.is-mobile .workspace>.workspace-split>.workspace-leaf:first-of-type:last-of-type .view-header { + background: linear-gradient(120deg, var(--color-view-header-gradient-1) 0%, var(--color-view-header-gradient-2) 90%) !important; +} + +.is-mobile .cm-s-obsidian .cm-gutters { + background-color: transparent !important; +} + +.is-mobile .cm-foldGutter .cm-gutterElement { + color: transparent !important; +} + +.is-mobile .cm-formatting.cm-formatting-quote { + color: var(--red); +} + +body:not(.font-family-change-to-default).is-mobile .markdown-source-view.mod-cm6 .cm-scroller { + font-family: var(--font-text); +} + +.is-mobile #calendar-container { + padding: 0 4px 2px 4px; + margin: unset !important; + line-height: unset; +} + +.is-mobile #calendar-container .calendar { + margin-left: -8px !important; + width: 103%; +} + +.is-mobile #calendar-container th { + padding: 2px 0 !important; +} + +.is-mobile #calendar-container td { + padding: 0 !important; + line-height: 24px !important; +} + +.is-mobile #calendar-container th { + padding: 10px 0; + border-radius: 0 !important; + background-color: transparent !important; +} + +.is-mobile #calendar-container tr { + background-color: transparent; +} + +.is-mobile #calendar-container .dot { + margin-top: 0 !important; +} + +.is-mobile #calendar-container .hollow { + margin: 0 !important; +} + +.is-mobile .workspace-drawer-header-name { + font-size: 25px; +} + +.is-mobile .workspace-drawer-header-name-text { + color: var(--text-accent); + font-weight: 600; +} + +.is-mobile .workspace-drawer-active-tab-header { + margin: 5px 0; +} + +.is-mobile .workspace-drawer.mod-left { + border-right: none; +} + +.is-mobile .workspace-drawer.mod-right { + border-left: none; +} + +.is-mobile .workspace-drawer.mod-right .workspace-drawer-inner { + background: linear-gradient(to left, var(--background-mobile-drawer-1) 30%, var(--background-mobile-drawer-2) 100%); +} + +.is-mobile .workspace-drawer.mod-left .workspace-drawer-inner { + background: linear-gradient(to right, var(--background-mobile-drawer-1) 30%, var(--background-mobile-drawer-2) 100%); +} + +.is-mobile .workspace-drawer-ribbon { + background-color: var(--background-secondary-alt); +} + +.is-mobile .nav-buttons-container { + margin-bottom: 10px; +} + +.is-mobile .cm-line .cm-link.cm-strong { + color: var(--text-accent); +} + +.is-mobile .cm-line .cm-formatting.cm-formatting-link, +.is-mobile .cm-line .cm-string.cm-strong.cm-url { + color: var(--text-muted); +} + +.is-mobile .search-result-file-match-replace-button { + color: var(--text-normal); +} + +.is-mobile :is(.markdown-preview-view,.markdown-rendered).kanban-plugin__markdown-preview-view { + padding: 0 5px; +} + +/***修复iphone 底部横条不透明的问题*** +body.is-mobile { + padding-bottom: 0 !important; +} +/*** iphone标题栏上方遮罩*** +body.is-mobile .safe-area-top-cover { + background-color: var(--background-primary); +} +/*** iphone标题栏上方遮罩 设置背景色后遮罩颜色跟工作区保持一致*** +body.is-mobile.background-settings-workplace-background-image .safe-area-top-cover { + background-color: var(--background-primary); +} +*/ + +body.is-mobile.theme-light .menu { + background-color: var(--background-primary-alt); +} +body.is-mobile .menu { + color:var(--text-muted); +} +body.is-mobile .menu-item-title { + padding-left: 4px; +} + +/*侧边栏文件列表字体大小*/ +.is-mobile .nav-file-title, .is-mobile .nav-folder-title, .is-mobile .outline, .is-mobile .tree-item-self, .is-mobile .tag-container, .is-mobile .tag-pane-tag { + font-size: calc(var(--font-size-folder-and-file) + 0.2em); + line-height: 1.5; + margin-bottom: 2px; +} + +body:not(.default-icons).is-mobile .nav-folder-collapse-indicator::before { + margin-left: -0.1em; +} + +/*侧边栏工作区标题*/ +.is-mobile .workspace-drawer-tab-option-item-title, .is-mobile .workspace-drawer-active-tab-title { + font-size: calc(var(--font-size-folder-and-file) + 0.15em); +} +/*小屏幕特别优化*/ +@media screen and(min-width: 480px) and (max-width: 767px) { + body.style-options-for-admonition-plugin .admonition-flex .admonition-content { + gap:24px; + } + body.style-options-for-admonition-plugin .admonition-kanban ul > li.task-list-item { + flex: 1 1 40%; + } + body.style-options-for-admonition-plugin .admonition-kanban ul>li:not(.task-list-item) { + flex: 1 1 40%; + } + .kanban ul>li:not(.task-list-item) { + flex: 1 1 40%; + } + .kanban ul>li.task-list-item{ + flex: 1 1 40%; + } +} + +@media screen and (max-width: 479px) { + body.style-options-for-admonition-plugin .admonition-flex .admonition-content { + gap:15px; + } + body.style-options-for-admonition-plugin .admonition-flex .admonition-content div { + flex: 1 1 60%; + margin: 0; + } + body.style-options-for-admonition-plugin .admonition-kanban ul > li.task-list-item { + flex: 1 1 60%; + } + body.style-options-for-admonition-plugin .admonition-kanban ul>li:not(.task-list-item) { + flex: 1 1 40%; + } + + /*伪看板优化显示*/ + .kanban ul>li:not(.task-list-item) { + flex: 1 1 auto; + } + .kanban ul>li.task-list-item { + flex: 1 1 auto; + } + .is-mobile .nav-folder.mod-root > .nav-folder-title { + display: none; + } + + body:not(.default-icons).is-mobile .nav-folder-collapse-indicator::before { + top: 1px; + } +} + +/*======================= +=== projects by cuman==== +========================*/ +.projects-container [role='row']:hover { + background-color: hsla(var(--color-accent-hsl), 0.1); +} + +.projects-container [role='row'] { + position: relative; + font-size: var(--font-ui-small); +} +.projects-container a { + font-size: var(--font-ui-small); + text-decoration-line:none; +} + +.projects-container [role='row'] [role='gridcell']{ + background-color: transparent; +} + +.projects-container [role='row'] [role='gridcell'][aria-selected="true"]::before { + content: " "; + position:absolute; + left: 0; + min-height: 30px; + background-color: hsla(var(--color-accent-hsl), 0.2); + width: 100%; + pointer-events: none; +} + +.projects-container [role='row'] [role='gridcell'].selected { + box-shadow: 0 0 0 1px var(--interactive-accent); +} + +.projects-container div.rowHeader { + backdrop-filter: blur(10px); +} +/*======================= +=== dialogue by cuman==== +========================*/ +body.dialogue-style-wechat .dialogue-plugin-block-wrapper { + margin-bottom: 15px; + position: relative; + display: flex; +} +body.dialogue-style-wechat .dialogue-plugin-message { + background-color:unset; + padding: 1px; +} + +body.dialogue-style-wechat.is-mobile .dialogue-plugin-message { + max-width: calc(100% - 2em) !important; +} +body.dialogue-style-wechat.is-mobile .dialogue-plugin-message .dialogue-plugin-message-content { + margin-left: 2em; + margin-right: 2em; +} + +body.dialogue-style-wechat.is-mobile .dialogue-plugin-message .dialogue-plugin-message-title { + min-width:unset; + margin-left: -1em; + margin-right: -1em; +} + +body.dialogue-style-wechat .dialogue-plugin-comment-wrapper .dialogue-plugin-comment { + margin: 7px; + width: fit-content; + max-width: 75%; + margin: 24px auto; + line-height: 1.8; + text-align: center; + opacity: var(--opacity); +} + +body.dialogue-style-wechat .dialogue-plugin-message .dialogue-plugin-message-title { + min-width: 6.8em; + font-size: 18px; + height: 50px; + background: #f1f1f1; + border-radius: 8px; + background-size: cover; + background-repeat: no-repeat; + position: absolute; + background-position: center; + overflow: hidden; + display: flex; + align-items: center; + justify-content: right; + background-color: unset; +} + +body.dialogue-style-wechat .dialogue-plugin-message-wrapper-right .dialogue-plugin-message-title { + justify-content:left; + margin-left: 2em; + right: 0; +} +body.dialogue-style-wechat .dialogue-plugin-message-wrapper-left .dialogue-plugin-message .dialogue-plugin-message-content { + margin-right: 0px; +} +body.dialogue-style-wechat .dialogue-plugin-message-wrapper-left .dialogue-plugin-message-content:after { + box-shadow: -1px 2px 0px 0 rgb(178 178 178 / 23%) +} + +body.dialogue-style-wechat .dialogue-plugin-message-wrapper-right .dialogue-plugin-message .dialogue-plugin-message-content { + color: black; + background: #98e970; + margin-left: 0; +} +body.dialogue-style-wechat .dialogue-plugin-message-wrapper-right .dialogue-plugin-message .dialogue-plugin-message-content:after { + background: #98e970; + left: auto; + right: -5px; + border-top-right-radius: 2px; + border-bottom-left-radius: 0; +} +body.dialogue-style-wechat .dialogue-plugin-message .dialogue-plugin-message-content { + background: #fff; + padding: 12px 18px; + font-size: large; + border-radius: 8px; + margin-right: 7em; + word-break: break-all; + margin-left: 7em; + display: inline-block; + position: relative; + line-height: normal; + min-height: 50px; + -moz-box-shadow: 0 1px 2px rgba(0,0,0,0.25); + -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.25); +} +.dialogue-style-wechat.theme-dark .dialogue-plugin-message .dialogue-plugin-message-content { + background: #343434; +} + +body.dialogue-style-wechat .dialogue-plugin-message .dialogue-plugin-message-content:after { + content: ''; + background: #fff; + width: 12px; + height: 12px; + border-bottom-left-radius: 2px; + top: 20px; + left: -6px; + position: absolute; + transform: rotate(45deg); +} + +.dialogue-style-wechat.theme-dark .dialogue-plugin-message .dialogue-plugin-message-content:after { + background: #343434; +} + +/*chatview-style-wechat*/ +body.dialogue-style-wechat div.chat-view-bubble { + background-color: transparent; + border: 0px; +} +body.dialogue-style-wechat .chat-view-message .chat-view-header { + font-size: 18px; + height: 55px; + background: #f1f1f1; + border-radius: 8px; + background-size: cover; + background-repeat: no-repeat; + position: absolute; + background-position: center; + overflow: hidden; + display: flex; + align-items: center; + justify-content: center; + background-color:unset; +} + +body.dialogue-style-wechat .chat-view-align-right .chat-view-header { + text-align: right; + margin-right: 0.5em; +} + +body.dialogue-style-wechat div.chat-view-align-left .chat-view-message { + margin-right: 0; + +} +body.dialogue-style-wechat .chat-view-align-right .chat-view-message { + color: black; + background: #98e970; + float: right; +} +body.dialogue-style-wechat div.chat-view-align-center .chat-view-message { + background: #e4effc; + padding: 12px 18px; + font-size: large; + border-radius: 8px; + word-break: break-all; + display: inline-block; + position: relative; + line-height: normal; + min-height: 50px; + -moz-box-shadow: 0 1px 2px rgba(0,0,0,0.25); + -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.25); +} +body.dialogue-style-wechat div.chat-view-align-center .chat-view-message:after { + content: ''; + background: #e4effc; + width: 12px; + height: 12px; + border-bottom-left-radius: 2px; + top: -5px; + left: 10%; + position: absolute; + transform: rotate(45deg); +} + +body.dialogue-style-wechat div.chat-view-align-left .chat-view-message:after { + box-shadow: -1px 2px 0px 0 rgb(178 178 178 / 23%) +} + +body.dialogue-style-wechat .chat-view-align-right .chat-view-message:after { + background: #98e970; + left: auto; + right: -5px; + border-top-right-radius: 2px; + border-bottom-left-radius: 0; +} +body.dialogue-style-wechat .chat-view-message, +body.dialogue-style-wechat .chat-view-bubble> :not(:is(h1,h2,h3,h4,h5,h6,sub)) { + background: #fff; + padding: 12px 18px; + font-size: large; + border-radius: 8px; + word-break: break-all; + display: inline-block; + position: relative; + line-height: normal; + min-height: 50px; + -moz-box-shadow: 0 1px 2px rgba(0,0,0,0.25); + -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.25); +} +body.dialogue-style-wechat.theme-dark .chat-view-align-left .chat-view-message { + background: #343434; +} +body.dialogue-style-wechat.theme-dark .chat-view-align-center .chat-view-message { + background: #3cb676; + color:black; +} +body.dialogue-style-wechat.theme-dark .chat-view-align-center .chat-view-message:after { + background: #3cb676; +} + +body.dialogue-style-wechat .chat-view-bubble> :not(:is(h1,h2,h3,h4,h5,h6,sub)):after { + content: ''; + background: #fff; + width: 12px; + height: 12px; + border-bottom-left-radius: 2px; + top: 20px; + left: -6px; + position: absolute; + transform: rotate(45deg); +} + +body.dialogue-style-wechat.theme-dark .chat-view-align-left .chat-view-message:after { + background: #343434; +} + +body.dialogue-style-wechat .chat-view-bubble .chat-view-subtext { + display:block; +} +body.dialogue-style-wechat .chat-view-align-right .chat-view-subtext { + float: right; +} +body.dialogue-style-wechat div.chat-view-align-right { + overflow: hidden; +} +body.dialogue-style-wechat h4.chat-view-header { + margin-bottom: 2px; + margin-top: 0 !important; +} +body.dialogue-style-wechat div.chat-view-align-center h4.chat-view-header { + text-align: left; + margin-bottom: 8px; +} + +/*dialogue-style-chat*/ +.dialogue-style-chat.theme-dark .dialogue-plugin-message-wrapper-left .dialogue-plugin-message { + color: #cccccc; + background: #343434; + box-shadow: 0px 2px 1px 0px #191818,0px 2px 1px 0px #343434; +} +.dialogue-style-chat.theme-dark .dialogue-plugin-message-wrapper-right .dialogue-plugin-message { + color: #333333; + background-image: -webkit-linear-gradient(left, #cccccc,#cccccc); +} +body.dialogue-style-chat .dialogue-plugin-message-wrapper-left .dialogue-plugin-message { + font-size: 15px; + background: #f5f8ff; + letter-spacing: 1.5px; + color: #333; + border-radius:12px; + border-bottom-left-radius: 0px; + margin-left: 6px; + box-shadow: 0px 2px 1px 0px #f3f3f3,0px 2px 1px 0px #f3f3f3; + margin-right: 3em; + align-self: flex-end; +} + +body.dialogue-style-chat .dialogue-plugin-message-wrapper-right .dialogue-plugin-message{ + font-size: 15px; + letter-spacing: 1.5px; + color: #333; + border-radius: 12px; + border-bottom-right-radius: 0px; + background-image: -webkit-linear-gradient(left, #cee4ff,#d7eaff); + margin-right: 6px; + align-self: flex-end; + margin-left: 3em; +} + +body.dialogue-style-chat .dialogue-plugin-message-title { + font-size: 16px; + letter-spacing: 2px; + text-align: center; + color: rgb(236, 236, 236); + font-weight: bold; +} + +/*===================================================*/ +/*================= Live Preview ================*/ +/*===================================================*/ +.markdown-source-view.is-live-preview span.cm-quote::before { + all: initial; +} + +.markdown-source-view.mod-cm6 .cm-gutters { + background-color: transparent !important; +} + +.markdown-source-view.mod-cm6.is-live-preview .HyperMD-quote { + border-color: var(--theme-color); + background-color: var(--background-blockquote); +} + +.markdown-source-view.is-live-preview .cm-formatting.cm-formatting-quote.cm-quote { + color: var(--red); +} + +.markdown-source-view.is-live-preview span.code-block-flair { + color: var(--code-language); +} + +.markdown-source-view .HyperMD-codeblock.HyperMD-codeblock-bg.cm-line { + letter-spacing: calc(var(--letter-space-code) * 0.02em); + line-height: var(--line-height-normal); +} + +.cm-s-obsidian div.HyperMD-codeblock-end-bg { + border-bottom: none; +} + +.markdown-source-view.cm-s-obsidian.mod-cm6 .HyperMD-codeblock { + font-size: var(--font-size-code); +} + +/* ============ */ +/* just for fun */ +/* ============ */ +/*cursor*/ +.CodeMirror-cursor, +.cm-s-obsidian .cm-cursor, +.cm-s-obsidian .cm-dropCursor { + border-left-color: var(--cursor-color-temp); +} + +.markdown-source-view.mod-cm6 .cm-content { + caret-color: var(--cursor-color); +} + +body.bt-colorful-titlebar .titlebar::after { + content: ""; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + background: var(--background-titlebar-inner); +} + +body.theme-dark.bt-colorful-titlebar .workspace-split.mod-root .workspace-tab-header.is-active.mod-active { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + box-shadow: none; + background-color: #181818; +} +body.theme-light.bt-colorful-titlebar .workspace-split.mod-root .workspace-tab-header.is-active.mod-active { + box-shadow: none; + background-color:var(--color-base-00); +} +body.theme-light.background-settings-workplace-background-image .workspace-ribbon.side-dock-ribbon.mod-left, +body.theme-light.background-settings-workplace-background-image .workspace-ribbon.side-dock-ribbon.mod-right, +body.theme-light.background-settings-workplace-background-image .nav-folder.mod-root>.nav-folder-title { + background-color: var(--background-secondary); +} +body.theme-dark.background-settings-workplace-background-image .workspace-ribbon.side-dock-ribbon.mod-left { + background-color: var(--background-secondary) +} +body.theme-dark.background-settings-workplace-background-image .workspace-ribbon.side-dock-ribbon.mod-right { + background-color: var(--background-primary-alt); +} + + +/*==== separators =====*/ +body.asymmetric-split-left .workspace-split.mod-horizontal.mod-left-split .workspace-leaf { + background-color: var(--background-asymm-split-left); +} + +body.asymmetric-split-left .workspace-ribbon.mod-left { + border-right: 1px solid var(--background-modifier-border-asymm); +} + +body.asymmetric-split-left .titlebar, +body.asymmetric-split-left .workspace-split.mod-left-split .workspace-tabs{ + border-bottom: 1px solid var(--background-modifier-border-asymm); +} + +body.asymmetric-split-left .workspace-split.mod-left-split .workspace-tab-container-before.is-before-active .workspace-tab-header-inner, +body.asymmetric-split-left .workspace-split.mod-left-split .workspace-tab-container-after.is-after-active .workspace-tab-header-inner, +body.asymmetric-split-left .workspace-split.mod-left-split .workspace-tab-header.is-before-active .workspace-tab-header-inner, +body.asymmetric-split-left .workspace-split.mod-left-split .workspace-tab-header.is-after-active .workspace-tab-header-inner, +body.asymmetric-split-left .workspace-split.mod-left-split .workspace-tab-header, +body.asymmetric-split-left .workspace-split.mod-left-split .workspace-tab-header-inner, +body.asymmetric-split-left .workspace-split.mod-left-split .workspace-tab-header.is-after-active, +body.asymmetric-split-left .workspace-split.mod-left-split .workspace-tab-header.is-before-active, +body.asymmetric-split-left .workspace-split.mod-left-split .workspace-tab-container-before.is-before-active .workspace-tab-header-inner { + background-color: var(--background-asymm-split-left); + border-radius: 0; +} + +body.asymmetric-split-left .workspace-split.mod-left-split .workspace-tab-header-container { + padding: 4px 0; +} + +.workspace-split.mod-left-split>.workspace-leaf-resize-handle:hover, +.workspace-split.mod-right-split>.workspace-leaf-resize-handle:hover { + background-color: hsla(var(--interactive-accent-hsl),0.5) +} + +.is-translucent .workspace-split.mod-left-split>.workspace-leaf-resize-handle, +.is-translucent .workspace-split.mod-right-split>.workspace-leaf-resize-handle { + background-color: var(--background-modifier-border); +} + +.workspace-tab-container-before.is-before-active .workspace-tab-header-inner, +.workspace-tab-container-after.is-after-active .workspace-tab-header-inner, +.workspace-tab-header.is-before-active .workspace-tab-header-inner, +.workspace-tab-header.is-after-active .workspace-tab-header-inner { + background-color: var(--background-secondary-alt); +} + +.workspace-tabs { + background-color: var(--background-secondary); + padding-right: 0; +} + +.is-hidden-frameless.mod-windows .titlebar-button { + background: var(--background-primary); +} + +body:not(.color-scheme-options-simplicity-topaz) .workspace-ribbon.mod-left:before, +body:not(.color-scheme-options-simplicity-topaz) .workspace-split.mod-root, +body:not(.color-scheme-options-simplicity-topaz) .workspace-tabs { + background: var(--background-secondary-alt); +} + +.workspace-tab-header-container { + background: var(--background-secondary-alt); +} + +.sidebar-toggle-button, +body.background-settings-workplace-background-image:not(.is-frameless) .workspace-split.mod-root .workspace-tab-header-container, +body.background-settings-workplace-background-image:not(.is-frameless) .mod-root .workspace-tabs .workspace-leaf, +body.background-settings-workplace-background-image .workspace { + background: transparent; +} + +body.background-settings-workplace-background-image .workspace-ribbon.mod-left:before, +body.background-settings-workplace-background-image .workspace-tabs { + background: var(--background-secondary); +} + + +body.toggle-divider-lines { + --divider-color: transparent; + --tab-outline-color: transparent; + --tab-divider-color: transparent; +} +body.toggle-divider-lines .workspace-ribbon, +body.toggle-divider-lines .workspace-split > .workspace-leaf-resize-handle, +body.toggle-divider-lines .view-header { + border: none; +} + +body.toggle-divider-lines .workspace-split.mod-horizontal > * > .workspace-leaf-resize-handle:not(:hover) { + border-bottom-color: transparent; +} + +body.toggle-divider-lines .workspace-ribbon.mod-left:before { + border-bottom: var(--tab-outline-width) transparent; +} +body.toggle-divider-lines .workspace-tab-header-container{ + border-bottom: var(--tab-outline-width) transparent; +} + +body.toggle-divider-lines .workspace-split.mod-root .workspace-tab-header.is-active { + box-shadow: var(--window-shadow); +} + +/* +body.background-settings-workplace-background-image .titlebar, +body.background-settings-workplace-background-image .workspace-ribbon.mod-left { + background: var(--background-secondary); +} +*/ +body.background-settings-workplace-background-image.theme-dark .workspace-ribbon.mod-left { + background: transparent; +} + +body.background-settings-workplace-background-image .workspace-tab-header::before { + clip-path: inset(50% 0 0 50%); + left: calc(var(--tab-curve) * -1.97); +} +body.background-settings-workplace-background-image .workspace-tab-header::after { + clip-path: inset(50% 50% 0 0); + right: calc(var(--tab-curve) * -1.97); +} + +body.background-settings-workplace-background-image .nav-folder.mod-root>.nav-folder-title { + background-color: transparent; +} + +body.background-settings-workplace-background-image { + --tab-text-color-focused: var(--text-normal); + --titlebar-text-color-focused: var(--text-noraml); + --canvas-background: transparent; +} + +body.is-frameless.background-settings-workplace-background-image.theme-dark { + --divider-color: #22222288; +} + +/* +body.is-frameless.background-settings-workplace-background-image .workspace-tab-header.is-active { + box-shadow: none; +} +*//* +body.is-frameless.background-settings-workplace-background-image .workspace-split.mod-root, +body:not(.is-focused).is-frameless.background-settings-workplace-background-image .workspace-tabs.mod-top .workspace-tab-header-container, +body.is-frameless.background-settings-workplace-background-image .workspace-tabs.mod-top .workspace-tab-header-container, +body.is-frameless.background-settings-workplace-background-image .workspace-split.mod-root .workspace-tab-header-container { + background-color: transparent !important; +} +*/ +body:not(.is-focused):not(.is-frameless) .workspace-split.mod-root .workspace-tab-header-container { + background-color: transparent; +} + +.workspace-tab-container-before.is-before-active, +.workspace-tab-container-after.is-after-active, +.workspace-tab-header.is-before-active, +.workspace-tab-header.is-after-active, +.workspace-split.mod-right-split .workspace-tabs .workspace-leaf, +.workspace-split.mod-left-split .workspace-tabs .workspace-leaf { + background-color: var(--background-secondary); +} + + +.view-header { + border-top: none; + height: 33px; + border-bottom: 1px solid var(--page-border-bottom); +} + +body.color-scheme-options-flamingo .view-header, +body.color-scheme-options-honey-milk-topaz .view-header, +body.color-scheme-options-chocolate-topaz .view-header, +body.color-scheme-options-autumn-topaz .view-header, +body.color-scheme-options-lillimon-topaz .view-header { + border-bottom: 1px solid transparent; +} + +.workspace-split.mod-root .view-content { + background-color: var(--background-primary); +} + +:is(.markdown-preview-view,.markdown-rendered), +.markdown-source-view { + background-color: transparent; +} + + +body.view-button-front .popover .workspace-leaf-content:is([data-mode="preview"],[data-mode="source"]) .view-header .view-actions>:is([aria-label^="该面板处于编辑视图中"],[aria-label^="Current view: editing"]), +body.view-button-front .popover .workspace-leaf-content:is([data-mode="preview"],[data-mode="source"]) .view-header .view-actions>:is([aria-label^="该面板处于编辑视图中"],[aria-label^="Current view: editing"]) { + left: 0; + top: 6px; +} +body.view-button-front .popover .workspace-leaf-content[data-mode='preview'] .view-header .view-actions>:is([aria-label^="该面板处于阅读视图中"],[aria-label^="Current view: reading"]) , +body.view-button-front .popover .workspace-leaf-content[data-mode='preview'] .view-header .view-actions>:is([aria-label^="该面板处于阅读视图中"],[aria-label^="Current view: reading"]) { + left: 0; + top: 6px; +} + +body.is-mobile.view-button-front .workspace-leaf-content:is([data-mode="preview"],[data-mode="source"]) .view-header .view-actions>:is([aria-label^="该面板处于编辑视图中"],[aria-label^="Current view: editing"]) { + left: 0; + top: 6px; +} + +body.view-button-front .workspace-leaf-content:is([data-mode="preview"],[data-mode="source"]) .view-header .view-actions>:is([aria-label^="该面板处于编辑视图中"],[aria-label^="Current view: editing"]) { + opacity: 0.8; + position: absolute; + left: 20px; + top: 3px; +} +body.is-mobile.view-button-front .workspace-leaf-content[data-mode='preview'] .view-header .view-actions>:is([aria-label^="该面板处于阅读视图中"],[aria-label^="Current view: reading"]) { + left: 0; + top: 6px; +} +body.view-button-front .workspace-leaf-content[data-mode='preview'] .view-header .view-actions>:is([aria-label^="该面板处于阅读视图中"],[aria-label^="Current view: reading"]) { + opacity: 0.5; + position: absolute; + left: 20px; + top: 3px; +} +body.view-button-front .workspace-leaf-content[data-mode='preview'] .view-header:hover .view-actions>:is([aria-label^="该面板处于阅读视图中"],[aria-label^="Current view: reading"]) { + opacity: 1; +} + +body.view-button-front:not(.color-scheme-options-simplicity-topaz) .workspace-leaf-content .view-header .view-header-nav-buttons { + margin-left: 25px; +} +body.view-button-front.hide-titlebar-close-btn.hide-left-ribbon-retention-drawer.color-scheme-options-simplicity-topaz .workspace-leaf-content .view-header .view-header-nav-buttons { + margin-left: 5px; +} + +body.view-button-front .workspace-leaf-content[data-mode='source'] .view-content .markdown-source-view:not(.is-live-preview)::before { + content: ""; + background-image:url("data:image/svg+xml,%3Csvg width='' height='' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M84.8 468.8H43.2C17.6 468.8 0 486.4 0 512s17.6 43.2 43.2 43.2h43.2C110.4 555.2 128 537.6 128 512s-17.6-43.2-43.2-43.2zM384 468.8h-43.2c-25.6 0-43.2 17.6-43.2 43.2s17.6 43.2 43.2 43.2H384c25.6 0 43.2-17.6 43.2-43.2s-17.6-43.2-43.2-43.2zM683.2 468.8H640c-25.6 0-43.2 17.6-43.2 43.2s17.6 43.2 43.2 43.2h43.2c25.6 0 43.2-17.6 43.2-43.2-1.6-25.6-17.6-43.2-43.2-43.2zM980.8 468.8h-43.2c-25.6 0-43.2 17.6-43.2 43.2s17.6 43.2 43.2 43.2h43.2c25.6 0 43.2-17.6 43.2-43.2s-17.6-43.2-43.2-43.2z' fill='%23666666'/%3E%3C/svg%3E"); + background-size: 14px 16px; + background-repeat: no-repeat; + height: 12px; + width: 15px; + position: absolute; + z-index: 1; + top: 17px; + left: 26px; + opacity: 0.5; + pointer-events: none; +} + +body.hide-titlebar-close-btn.hide-left-ribbon-retention-drawer.view-button-front .workspace-leaf-content[data-mode='source'] .view-content .markdown-source-view:not(.is-live-preview)::before { + left: 38px; +} + +body.view-button-front:not(.remove-custom-svg-icons) .workspace-leaf-content .view-header .view-actions svg.svg-icon.lucide-book-open { + -webkit-mask-image: url("data:image/svg+xml,%3Csvg width='' height='' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M114.18 936.37c-7.08-0.01-13.88-2.83-18.90-7.84-7.13-7.13-9.73-17.60-6.78-27.24 0.58-1.89 58.08-190.17 69.57-232.60 1.24-4.57 3.65-8.73 6.99-12.08 0 0 509.13-509.34 524.08-524.12 27.32-27.32 63.92-43.31 102.51-44.84 35.84 0.81 69.89 15.79 94.70 41.66 32.72 31.43 49.66 65.07 50.34 100.03 0.52 35.39-15.64 70.37-48.22 103.97C856.96 365.85 382.08 835.45 361.87 855.42c-3.13 3.09-6.97 5.37-11.19 6.62-31.98 9.53-226.32 72.36-228.29 72.99C119.75 935.90 116.98 936.35 114.18 936.37zM207.99 690.03c-10.01 35.62-39.82 125.58-56.68 181.06 55.85-17.99 146.82-49.51 177.65-59.01 50.76-50.21 491.57-486.20 521.11-516.63 22.12-22.85 33.24-44.76 32.85-65.12-0.40-19.87-11.67-40.69-33.65-61.74-14.94-16.13-35.63-25.74-57.60-26.73-24.42 1.73-47.44 12.11-64.90 29.28-14.10 13.90-465.93 465.95-518.84 518.88L207.99 690.03zM350.36 853.71c-13.57-0.06-24.98-10.20-26.63-23.68-6.27-30.87-21.46-59.22-43.70-81.52-22.46-24.48-52.04-41.30-84.56-48.09-14.71-1.90-25.17-15.27-23.48-30.01 1.53-14.70 14.70-25.39 29.40-23.85 0.01 0 0.03 0 0.05 0 88.93 17.85 158.30 87.60 175.66 176.62 1.91 14.80-8.50 28.34-23.28 30.29-1.16 0.15-2.33 0.22-3.51 0.22L350.36 853.71zM828.88 369.14c-13.58-0.05-24.99-10.20-26.62-23.68-14.30-64.29-64.20-114.68-128.34-129.60-14.70-1.94-25.13-15.30-23.45-30.03 1.51-14.67 14.63-25.35 29.31-23.85 0.03 0.01 0.06 0.01 0.10 0.01 44.72 8.07 85.64 30.37 116.68 63.57 30.72 30.78 51.32 70.19 59.05 112.99 2.02 14.73-8.28 28.31-23.02 30.33-1.25 0.18-2.52 0.26-3.80 0.26L828.88 369.14z' fill='%23666666'/%3E%3C/svg%3E"); + opacity:0.6; +} + +body:not(.remove-custom-svg-icons) .workspace-leaf-content[data-type="markdown"] .view-header-icon:hover::before { + content:"👆🏻"; + opacity: 0.6; + margin-left: -12px; +} + + +body.folder-icons .nav-folder-children .nav-folder-title-content::before { + position: relative; + content: ""; + display: inline-block; + opacity: 0.9; + top: 2px; + margin-left: -1px; + width: 0.95rem; + height: 0.95rem; + margin-right: 5px; + background-size: contain; + background-repeat: no-repeat; + background-position: center center; + background-color: var(--text-folder-file-icon); + filter: hue-rotate(160deg); + -webkit-mask-image: url('data:image/svg+xml;utf8,'); +} +body.folder-icons .nav-folder-children .nav-folder.is-collapsed .nav-folder-title-content::before { + position: relative; + content: ""; + display: inline-block; + width: 0.95rem; + height: 0.95rem; + background-size: contain; + background-repeat: no-repeat; + background-position: center center; + background-color: var(--text-folder-file-icon); + filter: hue-rotate(160deg); + -webkit-mask-image: url('data:image/svg+xml;utf8,'); +} + + +body.remove-arrow:not(.default-icons):not(.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked) .nav-folder-collapse-indicator::before { + display: none; +} +body.remove-arrow:not(.default-icons) :not([class*="mk-tree"]).nav-folder-title-content { + margin-left: -18px; +} + +body.remove-arrow:not(.default-icons) .tree-item.nav-folder.mod-root>.tree-item-self.nav-folder-title { + padding-left: 30px; + margin-left: -10px; +} + +body.remove-arrow .nav-folder-title .iconize-icon { + margin: 0 22px 0 -18px !important; +} + +body:not(.remove-file-icons) [data-type="starred"] .nav-file-icon .svg-icon { + padding: 4px 0 0; +} + +body:not(.remove-file-icons) .workspace-leaf-content[data-type="starred"] .nav-file-title-content::before { + display: none; +} +body:not(.remove-file-icons) .nav-file-title .nav-file-title-content:not(.mk-tree-text)::before { + position: relative; + content: ""; + display: inline-block; + width: 0.9rem; + opacity: 0.9; + top: 0.15rem; + height: 0.9rem; + margin-right: 5px; + background-size: contain; + background-repeat: no-repeat; + background-position: center center; + background-color: var(--text-folder-file-icon); + -webkit-mask-image: url('data:image/svg+xml;utf8,'); +} + +body:not(.remove-file-icons) .nav-file-title[data-path$=".pdf"] .nav-file-title-content::before { + -webkit-mask-image: url('data:image/svg+xml;utf8,'); + filter: hue-rotate(-45deg); +} + +body:not(.remove-file-icons) .nav-file-title[data-path$=".pdf"] .nav-file-tag { + background-color: var(--theme-color-translucent-01); + color: var(--theme-color); + filter: hue-rotate(-45deg); +} + +body:not(.remove-file-icons) .nav-file-title[data-path$=".jpg"] .nav-file-title-content::before, +body:not(.remove-file-icons) .nav-file-title[data-path$=".png"] .nav-file-title-content::before, +body:not(.remove-file-icons) .nav-file-title[data-path$=".svg"] .nav-file-title-content::before, +body:not(.remove-file-icons) .nav-file-title[data-path$=".gif"] .nav-file-title-content::before, +body:not(.remove-file-icons) .nav-file-title[data-path$=".jpeg"] .nav-file-title-content::before, +body:not(.remove-file-icons) .nav-file-title[data-path$=".bmp"] .nav-file-title-content::before { + -webkit-mask-image: url('data:image/svg+xml;utf8,'); + filter: hue-rotate(45deg); +} + +body:not(.remove-file-icons) .nav-file-title[data-path$=".jpg"] .nav-file-tag, +body:not(.remove-file-icons) .nav-file-title[data-path$=".png"] .nav-file-tag, +body:not(.remove-file-icons) .nav-file-title[data-path$=".svg"] .nav-file-tag, +body:not(.remove-file-icons) .nav-file-title[data-path$=".gif"] .nav-file-tag, +body:not(.remove-file-icons) .nav-file-title[data-path$=".jpeg"] .nav-file-tag, +body:not(.remove-file-icons) .nav-file-title[data-path$=".bmp"] .nav-file-tag { + background-color: var(--theme-color-translucent-01); + color: var(--theme-color); + filter: hue-rotate(45deg); +} + +body:not(.remove-file-icons) .nav-file-title[data-path$=".mp4"] .nav-file-title-content::before, +body:not(.remove-file-icons) .nav-file-title[data-path$=".webm"] .nav-file-title-content::before, +body:not(.remove-file-icons) .nav-file-title[data-path$=".ogv"] .nav-file-title-content::before, +body:not(.remove-file-icons) .nav-file-title[data-path$=".mov"] .nav-file-title-content::before, +body:not(.remove-file-icons) .nav-file-title[data-path$=".mkv"] .nav-file-title-content::before { + -webkit-mask-image: url('data:image/svg+xml;utf8,'); + filter: hue-rotate(90deg); +} + +body:not(.remove-file-icons) .nav-file-title[data-path$=".mp4"] .nav-file-tag, +body:not(.remove-file-icons) .nav-file-title[data-path$=".webm"] .nav-file-tag, +body:not(.remove-file-icons) .nav-file-title[data-path$=".ogv"] .nav-file-tag, +body:not(.remove-file-icons) .nav-file-title[data-path$=".mov"] .nav-file-tag, +body:not(.remove-file-icons) .nav-file-title[data-path$=".mkv"] .nav-file-tag { + background-color: var(--theme-color-translucent-01); + color: var(--theme-color); + filter: hue-rotate(90deg); +} + +body:not(.remove-file-icons) .nav-file-title[data-path$=".mp3"] .nav-file-title-content::before, +body:not(.remove-file-icons) .nav-file-title[data-path$=".wav"] .nav-file-title-content::before, +body:not(.remove-file-icons) .nav-file-title[data-path$=".m4a"] .nav-file-title-content::before, +body:not(.remove-file-icons) .nav-file-title[data-path$=".ogg"] .nav-file-title-content::before, +body:not(.remove-file-icons) .nav-file-title[data-path$=".3gp"] .nav-file-title-content::before, +body:not(.remove-file-icons) .nav-file-title[data-path$=".flac"] .nav-file-title-content::before { + -webkit-mask-image: url('data:image/svg+xml;utf8,'); + filter: hue-rotate(-90deg); +} + +body:not(.remove-file-icons) .nav-file-title[data-path$=".mp3"] .nav-file-tag, +body:not(.remove-file-icons) .nav-file-title[data-path$=".wav"] .nav-file-tag, +body:not(.remove-file-icons) .nav-file-title[data-path$=".m4a"] .nav-file-tag, +body:not(.remove-file-icons) .nav-file-title[data-path$=".ogg"] .nav-file-tag, +body:not(.remove-file-icons) .nav-file-title[data-path$=".3gp"] .nav-file-tag, +body:not(.remove-file-icons) .nav-file-title[data-path$=".flac"] .nav-file-tag { + background-color: var(--theme-color-translucent-01); + color: var(--theme-color); + filter: hue-rotate(-90deg); +} + +body:not(.remove-file-icons) .nav-file-title[data-path$=".canvas"] .nav-file-title-content::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='%23adb5bd' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='svg-icon lucide-layout-dashboard'%3E%3Crect x='3' y='3' width='7' height='9'%3E%3C/rect%3E%3Crect x='14' y='3' width='7' height='5'%3E%3C/rect%3E%3Crect x='14' y='12' width='7' height='9'%3E%3C/rect%3E%3Crect x='3' y='16' width='7' height='5'%3E%3C/rect%3E%3C/svg%3E"); + filter: hue-rotate(180deg); +} + +body:not(.remove-file-icons) .nav-file-title[data-path$=".canvas"] .nav-file-tag { + background-color: var(--theme-color-translucent-01); + color: var(--theme-color); + filter: hue-rotate(180deg); +} + +body:not(.remove-file-icons) .nav-file-title[data-path$=".excalidraw.md"] .nav-file-title-content::before { + -webkit-mask-image: url('data:image/svg+xml;utf8,'); + /* + -webkit-mask-image: url('data:image/svg+xml;utf8,');*/ + filter: hue-rotate(135deg); +} + +body:not(.remove-file-icons) .nav-file-title[data-path$=".loom"] .nav-file-title-content::before { + -webkit-mask-image: url('data:image/svg+xml;utf8,'); + filter: hue-rotate(200deg); +} +body:not(.remove-file-icons) .nav-file-title[data-path$=".loom"] .nav-file-tag { + background-color: var(--theme-color-translucent-01); + color: var(--theme-color); + filter: hue-rotate(200deg); +} + +body.dark-background-file:not(.remove-file-icons):not(.bt-toggle-colorful-folder.folder-style-change-options-colorful) .nav-file-title.is-active[data-path$=".md"]>.nav-file-title-content::before { + background-color: var(--white); +} +body:not(.remove-file-icons) .nav-file-title.is-active[data-path$=".md"]>.nav-file-title-content::before { + background-color: var(--text-folder-file-icon); + opacity: 1; +} + +body:not(.remove-custom-svg-icons) .workspace-leaf-content .view-header .view-actions svg.svg-icon.lucide-edit-3 > path, +body:not(.remove-custom-svg-icons) .workspace-leaf-content .view-header .view-actions svg.svg-icon.lucide-book-open > path { + display: none; +} + +body:not(.remove-custom-svg-icons) .workspace-leaf-content .view-header .view-actions svg.svg-icon.lucide-edit-3, +body:not(.remove-custom-svg-icons) .workspace-leaf-content .view-header .view-actions svg.svg-icon.lucide-book-open { + background-color: currentColor; +} + +body:not(.remove-custom-svg-icons) .workspace-leaf-content .view-action svg{ + width: 17px; + height: 17px; + background-repeat: no-repeat; +} + +body:not(.remove-custom-svg-icons) .workspace-leaf-content .view-header .view-actions svg.svg-icon.lucide-edit-3 { + -webkit-mask-image: url('data:image/svg+xml;utf8,'); +} + +body:not(.remove-custom-svg-icons) .workspace-leaf-content .view-header .view-actions svg.svg-icon.lucide-book-open { + -webkit-mask-image: url('data:image/svg+xml;utf8,'); + background-color: var(--theme-color); +} + +body.setting-default-frosted-glass [class="menu"] { + border: none; + backdrop-filter: blur(8px); + background-color: var(--bg-color-settings-3); + box-shadow: 0 0 8px var(--bg-color-settings-5); +} + +.menu-item.selected:not(.is-disabled):not(.is-label), +.menu-item:hover:not(.is-disabled):not(.is-label) { + background-color: var(--bg-color-settings-5); +} +body.toggle-bg-panel-page :is(.nav-files-container,.file-tree-plugin-view)::before { + content: ''; + display: block; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + background: no-repeat center/cover var(--panel-page-background-url-theme); + z-index: -1; +} + +body.toggle-bg-panel-page.theme-dark :is(.nav-files-container,.file-tree-plugin-view)::before { + opacity: var(--bg-panel-page-opacity-cp); +} + +body.toggle-bg-panel-page.theme-light :is(.nav-files-container,.file-tree-plugin-view)::before { + opacity: var(--bg-panel-page-opacity-cp); +} + +body.toggle-bg-panel-page.panel-page-bg-theme-dark-plant.theme-dark { + --panel-page-background-url-theme: url("data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAA1HbWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAANbwAAIoYAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAMv2lwcnAAAAyfaXBjbwAAABRpc3BlAAAAAAAAAu4AAAH1AAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQQMAAAADFRjb2xycHJvZgAADEhMaW5vAhAAAG1udHJSR0IgWFlaIAfOAAIACQAGADEAAGFjc3BNU0ZUAAAAAElFQyBzUkdCAAAAAAAAAAAAAAAAAAD21gABAAAAANMtSFAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWNwcnQAAAFQAAAAM2Rlc2MAAAGEAAAAbHd0cHQAAAHwAAAAFGJrcHQAAAIEAAAAFHJYWVoAAAIYAAAAFGdYWVoAAAIsAAAAFGJYWVoAAAJAAAAAFGRtbmQAAAJUAAAAcGRtZGQAAALEAAAAiHZ1ZWQAAANMAAAAhnZpZXcAAAPUAAAAJGx1bWkAAAP4AAAAFG1lYXMAAAQMAAAAJHRlY2gAAAQwAAAADHJUUkMAAAQ8AAAIDGdUUkMAAAQ8AAAIDGJUUkMAAAQ8AAAIDHRleHQAAAAAQ29weXJpZ2h0IChjKSAxOTk4IEhld2xldHQtUGFja2FyZCBDb21wYW55AABkZXNjAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAEnNSR0IgSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYWVogAAAAAAAA81EAAQAAAAEWzFhZWiAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAG+iAAA49QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAAAAAAAAAkoAAAD4QAALbPZGVzYwAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAALklFQyA2MTk2Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAALklFQyA2MTk2Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNjAAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdmlldwAAAAAAE6T+ABRfLgAQzxQAA+3MAAQTCwADXJ4AAAABWFlaIAAAAAAATAlWAFAAAABXH+dtZWFzAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAACjwAAAAJzaWcgAAAAAENSVCBjdXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADcAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8ApACpAK4AsgC3ALwAwQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9homH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23//wAAABNjb2xybmNseAABAA0ABoAAAAAYaXBtYQAAAAAAAAABAAEFAQKDBAUAACKObWRhdBIACgoZJi7fpwQENBoQMvVERDwAMMMMQPaGftXSVUJfY92g+VvDgnOoxsXp5GHrG4AxUxz0YNCD7fxpDoPnkR/ev6EtrQ8W5Gb+36eFHtewziaX5hFoVmALXtjwOfEL2xjX11oPQQP7g3SDa4jGRi94TIQ15YL9FxCZVnSTK7WExCFBruVQ2tVjdB6UdR3lXjdR/8qqAkyHOWcY3GOXRD9GLsO5jbtHhikXXwC5bafUf6qcSXZbU9hxWiaVSfXd4tmvs/pl2osLUxeuFSMh6wjltuftcyyMNJinrjIy6CasCWo87igSJicpYZKjOMcfIAAA//MW/qx7PevdDyPXfP0kkJA7vOvXzJwKq4vuykxGvOl68gZCZkaYApE5FgHzJyYMZYSIssMN6BJTKrafrsYSSkujG0kFhzfRTpoxp4lbBTEnn50/cphUdjcHlbbkEP5SRRxt+qOWHvH7EX5vzcU6j8kgwV+riF9j2D/NNAahRUaP92oz0yc34TURbtl/fl1XQT16d4J6I0WKC1nrnjHCTnrPsa/jx2s96uZtvYIwb5PttEY/oshH+xfUTMr8VhlSE0uNNF8QoFpNRJFI8T3WqKe4XdAEwyXl4umcQLFxfR/4okHZr/YIsa347sagig8fS5FmeYh9avlG07U0bAWLUzmxbFp8OcP8I7hgQK4rtqL/UdlSLp+iyA9UFdF7ps/LAMsHgU2wpfKNB5V+8KAShLUnp4D9oya6nS5CPHndv6rCom2WNLasm1KQwErEGrReeNBDnPCtu8uvkhdoTYY4MxItB3/Etaf68nmgwbEOkj/JTsL2Yvg8iwPHbkXOf30EHx9iNCUxiLF0VTvRtgWjUq2fnPvIcxnjgdhyXdBqHExgHfoS6fvdqhZ+GOxKAOCJm2vHRE86ZfrDW9StEbrnoKdX7afDLJr9oK9UpPVsKXofaBucaf9DHTFIbsa1iXaX+GN+o+wi7I7krzjnSwN8nVBABRqCr4LAy7JFZ1GNMp0Ozftx85nmW8GIVwoIeNJzDcuawHOcthxeMDPLFy21nJE4JQqG1iZ6Uf7z+qRFaaOSiad9hQq3eveBmGBC2hJ+I9IwJdWt+IOgIzyBq30LHh9NK8T68L9m//UMoZ3TMC7EBMms6ED5H3SW+0LQT7hFouWJvk9FIwSRY7ZkS2d2bmA0EfYNSjhZJeLffhfLMHwah7I3A/z2OaOFM73gyf9Nzg72H28xy3ZvtHstYkk43PYDUNw9ltdER31VIqOFed/6ovjSHBWbrPjv6zyvPI9qyjpVqps2JBNDjftbgU8WT4T+0MCHr9t4j03K6F5TNvOHwUsvdOL2r9yn/V9zhPLzGkQm6V2XK97lN6aYvyVV+Vb9WmI8rI3GtbOJZNEId+hoZ5Ve960PTUOctuMAeiVrZ4FbEkVpOjFBDjHP7zVLoEWHBPyb/vWvxSnnAiKEIV3C0QSyZdn/so0ArDNF0RurWa0J9fwMgLFybvL9Z/Sp82ZlVeg6ahiu2bpwAGMTycupdjfwXCz2xAzQ2AIcRkbgEbEmAJDSWZXoaoHj64U3FsvzRcxH3pJ8lOB/nY/cMdWXFXtbHaVqFSUb7bzsmvG+d6Vg8os9lhoXIX1vZ6HZ7BiQ2Eku8DEiKTodQjgt1AA8bqsf+fljuwgqu/AZkMMf4dlnVnvO8ck9sgqzj+Okky1oOUhknS7UWfWNZIpdYFO35WUkr71rR+XWRrvWDWYdRDiUuF2i4W1PVJ2M2r9YTXQOkh2qrYvSfBzzOUpBs8OkyUcdLlr3A9a7lgE+/deidMNYYZH5XI6dj0innASSRdv9ZIFX6oN5ZvtdVPLrpV675fQXV2eAdvSmMx+q/ZWUO9xuwGm7UwvxfXXSfp5s7tTBuf00Zm7JBRi7Ey+x1uarFQU4kZ2QfMbf6dc5F+vPl5Sz/1eLZPTaKA/AMyR449SM5qu+2KIBZJBAxvpF8NDecWM5PSckJglWrBMamIQXr0OyYbKKvCVkKVqPYw2WAN7zFNLP9J39znNqAZJkrNkLbxSjPnt7LEpaKN2ddZZNMIrXtg/JlKjorhbCHBnvYxgDb1+UnOFQlU5ZOE9l9Cv5dVN1DIdQKoiypZESICLegBA0JPJGUVirxMaeqvrR9BmrXoLST+wjCzbZtS6XJi6qRhT5hbjqRR8R3ajmpKoYw9Ow4ulfCSFxqOVrpS8HYVtzPpWZFdEguc6MOs5TqDgd0aiyU87W9wKJbh5PDTetEoWomg6gpuKqfTz3AHJbCYdyd8PUDz0xyVYK5bb3+7L1t5N3TaukC02f2aUJloaiECHyJYeszIHlXvVYJskHwnFCSz/UnGpkbVBFVwVObgyIuTVy0OVnNBULmDNk+fqR6JC8pQt3wJlKlnsvy0piYnyKLCrDn0Rh79UeGFvXhEJGHhaqS4AwkBjDwo4TLPwgSXD0AjrKnxR7K24dlxY4gA0+V4QL30Nr1JQjVXzG7N4R9HN6SHzVanTe7GkZ4iETG864BkzG2M6suK2vjCeV0YS8ahsVjHXr6GAQKzuqQ2iZVVwvepx8QoJtbYmZtyDK8TXywRjO8F3tMLBlGjRdPmwj5uuo+jKUGxnja4bDoBb5Vlo6mY+TtcuYMuttVhZqNk4635q5OvbFOuSGMbdPimOyV/3oXSaiT+gw4y9T4ytRQYfvQN1UAiAakCEykcQvjI+qm3HC3F5JW1SO5iYRxYdyHpZuW6ya5mFBzdSKuaszEhS8MZS8MYyfsY1vEvSopGN6aDMnF9itbP3L/5a2kTfUx3imnoVEKjvMd530m9THDvnjZ/d9nxMk4eLr/mVpaVjJRQ0KebkfJDuuuLzTc+vxsc7airOqbgQ3GsM94f/DBrqEB4k799T8v1lY8sw9CnQxOK099uDlijtxry1PfXAos/YZg9s9Tt7cN++OJi7mYqgYXU4YThz2sbLyc6hKU7b9dLR7I4aHD5RkssZN37WzJ6HHJaz7KW4LX9lGliTg2AhQPoRBYO3ogI1fZUmT/lG79VRUXfJnwnztEYsEXGKogxxMQXSt/qrr8ug1VJ03mcLZQdI8YKxjg2zegzdMT8rYVw8+Ozs1L5VemNL+F45Bs11YBiTCKwDOB9CfdfpzevsnyE+DJAnF2eczT5Lvh5GzoSltCqoEnRMdiCuMCK8wgpZztK0jzcjuFQQtcGThK2Y8PG2H/TX9EykfPPaGPCyydiEF1JEdasmlXFPAw+9pjUf5XTCTgrwBfAD9dxlZsKMOMgtV2Vhvmlxp2UN6kBu1+pwXdbE4Dz/crpyvLWQRz1sYGy6fCl7fbsG25Ij/aQFAHdHUPVHzRxk2gZO/qYnfyAN6D9zx07nmxPStM9Id/TNE0fLIunCZQutqx59ACV1sXH+HrTHMN268LAU7Dgb2j0OnHEWvFT4/b0SZdjRfXhAUQAGK7wRdkYLb7FpBXfHLhN39TrM0B/5O7twAf4nF/1e3pd/N/0G1YGh5PlTFs2OzX9j5c+j30T+S3gu8UzjDcGF9F7mtkf/ZFTgyvsfE4Q9bAXkrsO9FaxzGbQnSKfB5PNNy6T8pWDmwTlKGqMJ2HShgMkmzst5RgdAPYyEcOTZYBq6xMiGqJn9Kt3AewrpYINqY/HapAxI+C2rsV2YdMXNBjgU1mWF5fZIk7jiuRrSFcUwAwATcyyua1lqZjW59/P5Yn5ICibURfGNuR5C5hP1h+OUJFypddDDROLCL3quGxI95DUnBUj+erf8DsGc9Fs+C1ysgwcLmTGQB9Bh6iyfwfZZmjzNYmsQOjnd5mLWDIs9RBMhQT5CKsVM4EUgc8lovOH/nCg2omzVocvR8U4ajbkH2vb50Oat9EKW1i5ebJsn0a0RMXaWqgTIhV7ltbEoLNkjT00GsVWVex9r5DYd+dTGdTxV8RIDGs1nq3BV0D0DvpUY6B9khUVId8BFFIxeDhXuO/9Xwa+NQz3nTXcRGXKI9eErd2itG0EWvUL+kaMMxDfBgxhoIh+G4lsWChNWqM9NsQBnK/RROT2ozL6RkL8FBbmJBk4uX55wBLMLAv1Hl+esl3MmYvZifZXe5IQxNJqUWfK3BWvNh7baulPiuw/vFGPfcbisC7W0r4KXPDTly7KWZ000ox+uwDX3iJ8YXZWmSvmjujTLuGzCsLci9pquhX2KLa9Y32lA2dz1fK3+Q1EfNcF4QNpHFHOKvnrwhSMpduuzEKQMu2WOgnn9Nx5s3UPO6VHvWd/iH8FzWl0Oyk/XUF14Dibf8T25OlIKq3un9z2FcIJkyZFoXWSo3pL5CPq1TZ94Lct2iiX4uXl8XD+kLIF6W1ooVDNIoM9+s6Q2rnxuENJK8eJ6tlriZdVe/kOfx9dBJCarI/x9E9T2ixSIeON3BX0M14p5zw1YC86BXydang6aE7s8b7cFzBEUJzYMXrmgL1nZPnlZOvaASNNpJgqfj6OqrFjfutjbYWFAmsu2M8Xkp2D9530cjInNqOY4126NfIhdy7nCNTjim2xYk+Tjt3TGfIJEYR8r99go9jrloWV22nxt1ySdZYhqxnfteuTWmg5bHNAeAcAlXgiWpJMmhzlTnzcJgxrrHU/QRpQjbi6NQd9tpNXEjLE2YrKq4nDz5JVNWqduMaV7Fy7LGEZNg0Bd+0Hjl7lY+BsekJxjY/tb2/ZcgY/B0mycnh15VvY8UEVrQUtPJojQybiNxUr4bM4BGagyw5QAhz1MMFSu2UaDsQfuqhdkpNSe+lMWqlr1OnkfnX7G0YfOvF4sfp1SlXy9+/FBL2Xagdv5zTBvgyRT2Kh8wYDvWEKkvKoC3GxTb7Jw3MYQe4luQRy5t87YGhanS92fzBz0WI3Gmq0wvdDAeYiU2V3vMPQsUxBeFb/dOgnUobykX4X7IyODnNWOeX3Hw6TUQMmBQonou+W64pfg/ZPoJPNm+9FLq0bLLeGNTM2HOMjPZvt5nZGVaUFodQVXkNfdFxw5h7fQY9RmOk6H58uZvSwmktnmcPYUfboqL9LOpXNwg8iUaSkErbfx+0P8+fslL0pmyHUeuX8+Cxwfpds8yb1j0N40zLAcEuixgUOIKMD6BZL1AoTTLiaiPHjMKbDTyd6/3nS/wgEavz62mkFKmw7zj+gziCfrC5vcePX59z1gTbz20zhBsSESJhXLyz6KOiJYMLo3BLFpVNV9YNsRXepKxjwpb5ryLMOoUhD8O2qtjEdi+Ez82MJvVa8JEFptR9nGNQ9cg/HxrmQ3gQ+975npx66jF4AMCbdPfcHX0BOeBWQ3doGops3gW+XexU6eWT/eBs5Gz9e8N2Bjr8aeovcxoGzNR97fGPczjZ3bkuxqvOOrtvR5D2dF3PEQ6HZaB1XoSxkMB7W/9qZ2L2bKPe5xnMoud6d93AnnpQtAEDB9MBZWtQ65VKAaj7sypl1B9xT/mlAiMCTyE1xw+pMckhirRmPA2seaxFCQy/ZGxfin8FSo/0GddLC11chCfLWBp9Bu5wZFCQ8g7Ex/XrgtzijXMNyG66mjCzsVEhSeTN3vU55GhEQB8NFfuz8zMls62BU5NQCqxbEEWVFmd3ekRH6+VeY/xlqmZ+Gkl/t0eQy50YBh8YJQFCWxmaZwVNyAH7fOQl3BxW8+LfTzNC6AQPGO7DUTjNKjY3c5voD4ZdcvzLeKODjmyzEJuGrcpYS4MnWo/i+6rpI3TPfYqZYLkTDqTRzhAOfhRFwu4g9VKha4hLm7u/TJhSmIb4Z1bkprnbRar3SVTTXiemDFm848bno38AgRrblVVG9NUSQVBXFt/OYqn1AA6r1W1Myh5KLkrVPR7pPlkbuUDAPww1Djlyi3NrvKXwTBHRXE3UCqrBxFvjmoJckHDNREyimxvDLEmp1Lf48u8+9Ozn747NNuxHee/hmyxFzVWTgsn3PXJ2BAI1Y59bNvybdWFD23i86RLbQKFP2rEhnN6sRtpsRXqbAp3CwW7crHbShuhM9cct38vbMvPWLqauU6QNEx61FBLEt2rzJwtZaTjjCfaQaZ5bpN2+pCiHm+uXw3Rc7lu6Cor98mLECCxEI/ukqFsAKWdQSuQbpBJ/pVisYn3esCVu7vFojyvvAjhZNhex9c9jALh8YVt1PBaC8sxFjY80cWvyOGdE3vng+rOy44GXdiAzsGMlmB750qqTRYB0TT9ArSWcGwic6ZBZmHCwZgdy3r1K3YPDv2zRcoTq309+PBP2pcsSszhrwB+dwdZGwhzym2xJedKVnSnIJgsLwW5LFM3Y1C5J1+rlkT0Pqwodi7/chV6ISDS9/B2Izj3XaCPg4pR3i/J4LsY4oKm7Y6INcqLHwXYKvKJcZ/riMipCjwiC6p/p+GuR/6+d5bE+3oi67mHouGfs6+DGOY2tcSiMxAVrdl7lP+AK01mYvY6rOQWpCXyyd2g3OkgUhFszvhCAgi+DSobBMDF5J/FaDd3nWafLiBEvyo05yMy8SZhDReKhF8YWn5AhDAcrrUTez1OF1jVzQV304Na6g0tfx6t1kOsvb2Plexdg1wxcTkXLHfyQjv7AgAiuqNz9vGbRDsUsC8hvB0N6hzH7SflJpIPDeCoqY5oKZowzbr1Xhv/5CzgIiby8oxaK4R3xuIu7fQMuJ6Tgqcqsgqb+D1RseCJjo1tRQ4ccBe+UtTE2Z66CwiN7g+RdussivLg+beqQoqAuf5AFHsGyayXdt5jVwq167/SZ/zP/1n5u+StLqx7C77WoepTnuw8MDKlx6g2wdseWKFxjCZq/eWW/1Pn8QByiWvcRtR5jiaKqBLYUyc6P5QqFWeKhXFjz/xSpgfXtxceTx6gDY6Lt/pvrxvmmQR5nScyIKGSEPWMfj/3XCgq21WyLApG7YrA3pgm56brhcI9EnSjjRjUrsQxTedtH05z9JmQ0B/qE1jD/tFFnhtv5bX6+TpN895pckdfXWGCLRfeoMbwcO6Yva8F4A2bztJq0OSYRL9DuXdk1/6WOpCvrHP4yQu5fKOW2DqbbGBFtyW/RAvu6Y9YEQH9cc2TH0A6vwa+/Un9aBr9gtqHdSvxFPkvUasm5r/3BlfthuBpfAazRiTeVakzTW3sMkGQXDkxopjWmaW+MV4vAXoOe62SiCCurnYp1WvkalV6b8wkHSDMUQMLqh05YvwCYwnD6fKFbjYd4WXoQZmLzacxsNvdqh82wolzTX4hM0+KPelk3rraxz5P4Nk+cYkz6Ecxzm3qL1XSz1vZBuOz8hPTeMKc3Ot5+NoWcSSaVODxTq7HslwvlvFG0NRsGjv76agrfZF/D87JXtmQ6PeTeEsRZMobL5Zk7vEtxRoW4UydwcKUzL9umQyooqmHj9UmuJKjRYxkj0lV2fMowz8/Xk+4EHcC52jglkMXCTHGCKY/wIGTVtFCsZd0Cizmu+cpmFb1NkDQWXd3F5gdx/z1MeLYXRGSIhXouXpIIJIeTTP8Qk/XIabWdLLMaU4kDSdF5zHw9dbqNvlGb61MQ/gwmLRphKtasQVzkGX2WDUEF/Vilg3ixHthKqHLC7tSe+Zf/m3h7Mbbmz2aPenxkQOyPQ0X4B4boLcCoiyGoOLc3jxxyWLzyjREChxCKDNOcCPaSEYkWf5cmUXr/roXxc1omPNx5nYeAX9y6UnuPS/8+utOjQ0H9koLaR5YhqTFyr+hEtsE9nbNegBTFRQOmSHeAOnlLKY0zjZr3MzYQR2uPKnX9/50j6ftWNSs1uyVk/ICnxNXn6OitxkHoK0K8nf9SLXGIcJG4eQ43NaUcahqwa5V3mbuSbm/6eZmTo544xkWVMuk/uWoxaYOHFP2w77l1whZx/5Rud3HO0T9U7H1Qnz2SxJQYv1fu3IM/CODUdnVnaioou40mA0sVifs2/XHEml/i9r//r/gxv0fidT1uqC9gZLU1RUPFQpgcsJYCwE9IgrBjxdlS3vqK7zN1RxjxK5ToZA4tDsnjPZ/DLLzFgrBQGPlATiQN6bBxQPUAPA7CLCvVUhLhYd/qaI+crBVgWDgo7B53+i/0iKc5+ybLC871Af2n8LJdtoDqqfYqecj5gfsMkAZSqPMjjaPbH3PwKLovdd2ymjjTMMmqYQ2sPbos51X/0Cnc5jv9vvew8qyHYlBPIbpphr1L7SpA7AdXTAgaKIfWXUWmze2KXAfhy6kK/ccwYwaSL2ZD04ZT75ySoPq5i7Iyy9+U5mFj83j7tBOs6CmD3b18z8O17FI2TezIYWEJ2teCSUoKJ2r8HL+jmQamUOuH38rR2HjwpekkjjS6Bi5H8om0K4+nW2shEyDWvYc9BkoAAlDqF3n7d0/WIj5xQqjvEbMZ2ZUTPHMF2gVWQRX5WKp9A37v5hLxkm3u9LuQEeHgpsWybHRnnuC+ptaslICmFKPaYxHxtH5UvKYQxdtkIBs+8H0IdNYjN8kQmnHrF2AH1a7Tu/9NtIxRo3M/SWFjBoZJljJiGsDHELpeP/6XOwNQYvSWLeRjG2ryx0qeVj0uke6vFxSh5LBUjCn21HJzz7pFD98aJ85GmSStnDRa2b12MSkYOuSPP5p9D96W6RaU/mUDj1H4d31yG8i4RdlwWv3EvG/Nte187U3t2k+6ji9kXwMSTsLEjo2wNUe06fLamgdtbLP09SLtFyo3BTxPT87xc0PiZh0yuHG0ZKQYorWuQNVaF4DKtYYBKDpx6k8hZLryy2sb1fAXE6rFfRvWvkTyY8st8UygluHZTtXeeR6PC1fGYa60AzjG13dY99e5IliXvrnUazi8yzbyxC9qat+taeRNbSBfbclsO1dNA1Zh9noNc6M8H6wTOxcAGLjW8soxvyCkgTFwZq+ogTae3I6/uNkq2r3ukb2GKwXJwCWrwBnmPyqZcjEDCqySXVR6q6I0HJ54be1ACldNqMohTFi9acBrO8lSeTu5bldjCtM35esWRUqXJrSMBsD9KznlmhruKOA0ag1pAoTp5umQ0BG7GHiX4acAVSZV7KnRYlhk2uLxjJvqcT/qE1teRysLQzPVob5yko3mhr4CuguARC6Ox+RZW+da+ZINbbftaRbF/76/tVrO+Zmzi7QGFn+2UPpMwUi+spqxQirXK3oXq9BcUpqXPxEv+hRzX12F/XRwRA8GHagjiR0vlEAmc20FgwdT+lmIIZ6OdpDUv1nzyFJpd6HluYI5PNgzFW3/PDHHN9KC0RmbTQV0amRN9DpHagnWjbqwAcmZF5AbWubnfeHBpapDOOvaEf30cw2LzScmIXtdQ2yDcI8KtcpNl0CKzSmmqd9gJqb5fm1lkhFIoV7UiJ085+S0JSr7V958FB7aL+I3OrVuKymVYq/Bk1Ds8rMuRQfU27rUKzq+/rufw2UEnN4glcztHY/IjZzbd7gpUPzXmhx98qOqKu9KY8mLGm/LDPaU822Y88j/a5Jtb8TAiWqdrIhAjFOUCsIwdrQuWs5pqSOnRb6XXexHixu7L/yRqR4RgoRiwwoZd3ssJ0aAj4XJ1C53XVAwvDeoydLFeGl3U/FNmlynU6Fjk2E5SI3KaBmSLspa0xO3sJe66Iyvg2utmvQ35ZzWr0mfjliYIaKEnHVzYVnUJ9iTb9pnW5l4LthGCe/zUJ1yK1R+AcFNaGJIFsV0PkB0Oqo2oLQACIq8N9SHTDdXjU4H5pfKCqACtKgy4uNJsF2S2+9NyGRTAsVAAEJ8u/CZ/H0r+7jYv8CGHpCHkhLU78SjAaOMI3Pn3kptpHFCH4Z4JGQdW6yoTztCJvkSHhpXop5OnCNN9TFbb7cUO1fuPHgziC/ZfsiIb8etqRkbz7fMxoe+E+KowaYuzJTs6W7Kc2a0J1GBoh/RYLvwWj3Un2lk3ynsG04d+FJMPKWtmt2JCGQrgTwms6uB6OIDmqBayvYua3HjzXxxUE0E9+3ualIsEiBRqaDWzQEFxS1AyzPPsSyyGnGtaA6UEE9giKqKXTgdU+7j0S8xbLDYxVrIvzVlpXBw4x/IbVTqAJ4Nxs1aQjpWA0KaAFsCnXGMO2Tlxm7fom46xxJErtsAAfnJBxHeUWcgod31WPJ9c4HdMQgvh1tgQvLHsF/VseHiY1xxV6JmATtSPYsIUAYbcbRQvwsD6vi2MrA4r0/TVAimKm7aSJQ8Z3LkG0ZCSTvMAAAbToOnCDhD4na2H5FohYv27UGhoJDvjRiyP7vwHm4NIRvqlh2Hih697qoElwt92NOrR1PwFvH+5RRfHmqQEzTJgzRsEdjue7WjCLbiH/WgCNXyBIUeYjXN4zEUwT2yaIH4flmnIpHG2yWkOgf3TyOpEApzZV6UhP8ia1J1F2LSAlXuqmZXX+VDr6q+5XasXdFacHvJiL93N2ZvNWyQZFj7oVDSBK24+Qspg3bP/zhAAwSbnTTM76CWEGDxUK/ZrxomBEx7SaZXz7MjFNZrwIMOap7nvvfS+jRNhx6RE3ZZx/dWz7F6g6UAc0mcsm1DhJ/GVIAhLXry0lGxN+CZwYxyhsmLXooaKsSx6kSPwm4cJ/tSTm7H3XEIAFVB6B5mHcFfkgRzAgttU3wE4Cx911WkvASC9RbktPFyX8xPA2kZVyAVthPFMbSX9bvdhhc3cT5jPyHeXtl2FNMhUy5nTlM5q9lvUarzVgZ54vpxgj4MrhyxF4bv8QcYbRFySMPAkYMg42t8L1YhSfJbJ4zwiK9B3YH9fwtGSEtISFECiuJvimnaXX7s+0DRKEHLcoAmxZs5cQYtPomFCrEOGc5TjhutxEMGemBoOjAKTdF0m5rdhNFRNBxxR3NiNDIGcTM2pTZNyAQz4Qv5EKWyEhobY+Q9qzoI4kZqzAUMHh2nHDcxt2q0CkcDT5ZVQlWPaI5j6lbGmF4NikLYsiLqwFafGUdl8sjUUjpnC32twI5mzA7tOHNJtU1v1rM543yIYyF/XXjw4goTpU+jBsNtV0FFGBPh5EhA694WVXdpWVW4S3BXNQ0Vs0D2FvwEfYX8bxDBQjSr30gtsdAtdVU9+pjqwq17p9dawXrLNcMCgUJETFTcj2LjAKHrJw2NUMDGEU5Sqjk+tZDgbE0r06j6BcJACRucrRN7/EO6jex/OKj6YQTBCrIVzJVTgyZXXdNni/P8jdwWWFu5yNvYKHMvvCI0G/B5aBxLDtU8B9F+YkJBSW2O07gwcWbqSxpgapzBwB6biPJDarp+3hiDc4RG3kMQnun+LNqr3i/kpJ56KtIFK5FrZMiGhQpV6IVuC4Xt6BDJE16tn5Nkv+UtFXbI2AoZ9Av4He1pTbWb3U5o3VkqDAOx2rvFa6/+gU7tuzmhokmh+T66rUXbCSc5eTW1oGI3tYoGoUiGI0MX5ON/x1xtlksJEdq/IsS9IQDy3IkRl9WTg/Nyb7gaHwAYnaOo6oWYjC0yI6VxdSr8ngStXZFEcfjXI7nGqa05dpvb+WnUtbUNCMq5fd5KyuUS3zQAeghHlqUsyR/wINzSRx3ViLqsceGD8ZqLszROp5IV85K3RDlBE29fCCHWUqOwyQaJkTHK2yFnxkjf5iV3pPFGlXhft9AkN1Ryok6gTqPhDZ10FssHvNwK54LqYmS1pRdwM1dvZrE9CP7QU98Gsv9nUtFKXA8XNMF1VYZLUfaUH+k1JzWUH0YQM5+rKLBaGPOu1B31ZsMwCZpmkJo1zpscEP9wmxziaRz8zUBNVv00dlk9jo73E9rm+2aFWIbQxGi6jGcSfFIB6IG7sUcpH6mPTyLP2lWXJ3Tq5NuQhAPGogydrj4aD92CBtB550mnuOvfSmjzlqbL6YEUvbbV5HdoG1vN/IFg1Spjw1eUB+aKPh6VUL1MPdxE2RzfSJl6YPL4E3IezWE8c8VT5n+QA=="); +} +body.toggle-bg-panel-page.panel-page-bg-theme-dark-custom.theme-dark { + --panel-page-background-url-theme: var(--background-panel-page-theme-dark-custom); +} + +body.toggle-bg-panel-page.panel-page-bg-theme-light-custom.theme-light { + --panel-page-background-url-theme: var(--background-panel-page-theme-light-custom); +} + + +body.background-image-settings-switch.toggle-nonoverlapping-bg .workspace-split.mod-root .view-content { + background: var(--background-nonoverlapping-note); +} + +/* Sea and sky for Blue Topaz */ +.workspace-split.mod-root .workspace-leaf:nth-child(n) .workspace-leaf-content[data-type="markdown"]::before { + content: ''; + display: block; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + opacity: 0.12; + background-size: 100% 100%; +} + +body.background-notebook-liked-switch .markdown-embed :is(.markdown-preview-view, .markdown-rendered), +body.background-notebook-liked-switch .cm-s-obsidian .cm-embed-block { + background: inherit !important; +} +body.background-notebook-liked-switch.notebook-liked-markdown-page-grid-notebook-1 .markdown-preview-view.markdown-rendered, +body.background-notebook-liked-switch.notebook-liked-markdown-page-grid-notebook-1 .cm-s-obsidian .cm-scroller { + background: var(--bg-color-notebook); + background-image: linear-gradient(90deg, var(--grid-notebook-line-color-1) 3%, transparent 0), linear-gradient(var(--grid-notebook-line-color-1) 3%, transparent 0); + background-size: 20px 20px; +} + +body:not(.toggle-fixed-pattern).background-notebook-liked-switch .markdown-preview-view.markdown-rendered, +body:not(.toggle-fixed-pattern).background-notebook-liked-switch .cm-s-obsidian .cm-scroller { + background-attachment: local !important; +} + +body.background-notebook-liked-switch.notebook-liked-markdown-page-dotted-notebook-1 .markdown-preview-view.markdown-rendered, +body.background-notebook-liked-switch.notebook-liked-markdown-page-dotted-notebook-1 .cm-s-obsidian .cm-scroller { + background: var(--bg-color-notebook); + background-image: radial-gradient(var(--dotted-notebook-dot-color) 10%, transparent 0); + background-size: 22px 22px; + background-position: 8px 8px; +} + +body.background-notebook-liked-switch.notebook-liked-markdown-page-dotted-notebook-2 .markdown-preview-view.markdown-rendered, +body.background-notebook-liked-switch.notebook-liked-markdown-page-dotted-notebook-2 .cm-s-obsidian .cm-scroller { + background: var(--bg-color-notebook); + background-image: radial-gradient(var(--dotted-notebook-dot-color) 10%, transparent 0), + radial-gradient(var(--dotted-notebook-dot-color) 10%, transparent 0); + background-size: 30px 30px; + background-position: 0 0, 15px 15px; +} + +/*https://www.jianshu.com/p/2b713844cfe9*/ +body.background-notebook-liked-switch.notebook-liked-markdown-page-grid-notebook-2 .markdown-preview-view.markdown-rendered, +body.background-notebook-liked-switch.notebook-liked-markdown-page-grid-notebook-2 .cm-s-obsidian .cm-scroller { + background: var(--bg-color-notebook); + background-image: + linear-gradient(var(--grid-notebook-line-color-2) 1px, transparent 0), + linear-gradient(90deg, var(--grid-notebook-line-color-2) 1px,transparent 0), + linear-gradient(var(--grid-notebook-line-color-1) 1px, + transparent 0), + linear-gradient(90deg,var(--grid-notebook-line-color-1) 1px, + transparent 0); + background-size: 75px 75px, 75px 75px, 15px 15px, 15px 15px; +} +body.background-notebook-liked-switch.notebook-liked-markdown-page-stripe-notebook-1 .markdown-preview-view.markdown-rendered, +body.background-notebook-liked-switch.notebook-liked-markdown-page-stripe-notebook-1 .cm-s-obsidian .cm-scroller { + background: var(--stripe-notebook-stripe-color); + background-image: repeating-linear-gradient(135deg, + hsla(0,0%,100%,.03), hsla(0,0%,100%,.03) 13px, transparent 0, transparent 30px); +} +body.background-notebook-liked-switch.notebook-liked-markdown-page-stripe-notebook-1.theme-light .markdown-preview-view.markdown-rendered, +body.background-notebook-liked-switch.notebook-liked-markdown-page-stripe-notebook-1.theme-light .cm-s-obsidian .cm-scroller { + background: var(--stripe-notebook-stripe-color); + background-image: repeating-linear-gradient(135deg, + hsla(0,0%,100%,.3), hsla(0,0%,100%,.3) 13px, transparent 0, transparent 30px); +} +body.background-notebook-liked-switch.notebook-liked-markdown-page-stripe-notebook-2 .markdown-preview-view.markdown-rendered, +body.background-notebook-liked-switch.notebook-liked-markdown-page-stripe-notebook-2 .cm-s-obsidian .cm-scroller { + background: var(--stripe-notebook-stripe-color); + background-image:repeating-linear-gradient(45deg, + hsla(0,0%,100%,.025), hsla(0,0%,100%,.025) 20px, transparent 0, transparent 60px), repeating-linear-gradient(-45deg, hsla(0,0%,100%,.025), hsla(0,0%,100%,.025) 20px, transparent 0, transparent 60px); +} +body.background-notebook-liked-switch.notebook-liked-markdown-page-stripe-notebook-2.theme-light .markdown-preview-view.markdown-rendered, +body.background-notebook-liked-switch.notebook-liked-markdown-page-stripe-notebook-2.theme-light .cm-s-obsidian .cm-scroller { + background: var(--stripe-notebook-stripe-color); + background-image:repeating-linear-gradient(45deg, + hsla(0,0%,100%,.3), hsla(0,0%,100%,.3) 20px, transparent 0, transparent 60px), repeating-linear-gradient(-45deg, hsla(0,0%,100%,.3), hsla(0,0%,100%,.3) 20px, transparent 0, transparent 60px); +} + +.workspace-leaf-content .floating-toc-div+.markdown-source-view .cm-editor { + padding-left: 0; +} + +body.toggle-split-note-background .workspace-split.mod-horizontal:is(.mod-left-split,.mod-right-split) .workspace-leaf-content .markdown-rendered, +body.toggle-split-note-background .workspace-split.mod-horizontal:is(.mod-left-split,.mod-right-split) .workspace-tab-container .workspace-leaf-content .cm-scroller, +body.toggle-split-note-background .workspace-split.mod-horizontal:is(.mod-left-split,.mod-right-split) .workspace-tab-container .workspace-leaf-content .markdown-reading-view { + background: initial; +} + +body.background-image-settings-switch .workspace-split.mod-root .workspace-leaf:nth-child(n) .workspace-leaf-content[data-type="markdown"]::before { + content: ''; + display: block; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + opacity: var(--bg-markdown-page-opacity-cp,0.25); + background-size: cover; +} + + +body.background-image-settings-switch.background-image-settings-markdown-page-transparent .workspace-split.mod-root { + --background-primary: transparent; + --tab-outline-color:transparent; +} + +body.background-image-settings-switch.background-image-settings-markdown-page-transparent.theme-dark .workspace-split.mod-root .workspace-tab-header.is-active { + background-color: transparent; +} +body.background-image-settings-switch.background-image-settings-markdown-page-transparent .mod-root .workspace-tabs .workspace-leaf { + background-color: unset; +} + + +body.background-image-settings-switch.background-image-settings-markdown-page-four-seasons .workspace-split.mod-root .workspace-leaf:nth-child(n) .workspace-leaf-content[data-type="markdown"]::before { + background-size: 100% 100%; +} + +body.background-image-settings-switch.background-image-settings-markdown-page-custom.theme-dark .workspace-split.mod-root .workspace-leaf .workspace-leaf-content[data-type="markdown"]::before { + background-image: var(--background-markdown-page-theme-dark-custom); +} + +body.background-image-settings-switch.background-image-settings-markdown-page-custom.theme-light .workspace-split.mod-root .workspace-leaf .workspace-leaf-content[data-type="markdown"]::before { + background-image: var(--background-markdown-page-theme-light-custom); +} +body.background-image-settings-switch.background-image-settings-markdown-page-custom .workspace-split.mod-root .workspace-leaf .workspace-leaf-content[data-type="markdown"]::before { +background-size:unset; +background-color: var(--custom-markdown-page-background-color); +opacity: var(--bg-markdown-page-opacity-cp,1); +} +/* ================================== */ +/* ============= publish ============ */ +/* ================================== */ +/* +.site-body .site-body-left-column-site-name { + color: var(--theme-color); + font-size: 2.5em; +} + +.modal.mod-publish .file-tree-item-checkbox { + filter: hue-rotate(var(--theme-color)); +} + +.graph-view-outer .graph-view-container, +.site-body-left-column, +.site-body-left-column:before { + background-color: var(--background-secondary); +} + +.theme-light .site-body-left-column, +.theme-light .site-body-left-column:before { + background-color: var(--background-secondary-alt-bg-4-bt-publish); +} + +.nav-view-outer .tree-item .tree-item .tree-item-children { + margin-left: 12px; + padding-left: 0; + border-left: 1px solid var(--background-modifier-border); + border-radius: 0; + transition: all 400ms ease-in; +} + +.nav-view-outer .tree-item .tree-item .tree-item-children:hover { + border-left-color: var(--theme-color); +} + +body:not(.default-icons) .nav-view-outer .tree-item-self.collapse-icon { + left: 0px; + top: 7px; + margin-top: 0px; +} + +body:not(.default-icons) .nav-view-outer .tree-item-self .tree-item-icon::before { + content: "↓"; + font-size: 14px; + font-family: 'Inter'; + font-weight: bold; + color: var(--text-accent); + transition: transform 10ms linear 0s; +} + +body:not(.default-icons) .nav-view-outer .tree-item-self .tree-item-icon svg { + display: none; + color: var(--accent-strong); + height: 7px; + width: 7px; +} + +body:not(.default-icons) .nav-view-outer .tree-item.is-collapsed .tree-item-icon.collapse-icon { + transform: translateX(0px) translateY(0px) rotate(-90deg); + opacity: 0.5; +} + +.nav-view-outer .tree-item-self.mod-active { + --background-secondary-alt: var(--interactive-accent); + --text-normal: #ffffff; +} + +.nav-view-outer .tree-item .tree-item-self.is-clickable { + color: var(--text-normal); + font-weight: 600; +} + +.nav-view-outer .tree-item .tree-item-self.is-clickable:hover { + background-color: var(--background-secondary-alt); +} + +.nav-view-outer .tree-item.is-collapsed .tree-item-self.is-clickable { + color: var(--text-muted); +} + +.outline-view-outer .tree-item .tree-item-children { + margin-left: 12px; + padding-left: 0; + border-left: 1px solid var(--background-modifier-border); + border-radius: 0; + transition: all 400ms ease-in; +} + +.outline-view-outer .tree-item.tree-item-children:hover { + border-left-color: var(--theme-color); +} + +.outline-view-outer .tree-item-self { + padding: 2px 6px 2px 10px; +} + +.outline-view-outer .tree-item-self.mod-active { + background-color: var(--theme-color-translucent-015); +} + +.site-body :is(.markdown-preview-view,.markdown-rendered) .tag:not(.token) { + color: var(--tag-text); +} + +.site-body .publish-renderer :is(.markdown-preview-view,.markdown-rendered) ol>li { + border-left: 0.125em solid var(--list-ol-block-color); +} + +.site-body .publish-renderer :is(.markdown-preview-view,.markdown-rendered) ul>li:not(.task-list-item) { + border-left: 0.125em solid var(--list-ul-block-color); +} +*/ + +/* Coloured Folders for Blue Topaz 0-Z, v0.3 +modified from the snippet created by @Lithou */ +body.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order) .nav-folder-title { + margin-bottom: 0; +} + +body.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order).theme-dark { + --FoldText: #cbcbcb; +} + +/*color scheme-1, high transparency*/ +body.bt-toggle-colorful-folder.folder-colorful-one.theme-dark { + --Fold0: #ff40403d; + --Fold1: #f31f7448; + --Fold2: #be25ff49; + --Fold3: #7337ff67; + --Fold4: #2f4bff65; + --Fold5: #1372d188; + --Fold6: #0289d17e; + --Fold7: #0096a77e; + --Fold8: #00796b94; + --Fold9: #388e3c80; + --FoldA: #689f3883; + --FoldB: #afb42b81; + --FoldC: #f9ab255d; + --FoldD: #ff910063; + --FoldE: #ef6c0067; + --FoldF: #d8421559; + --FoldG: #1e5f74ca; + --FoldH: #c53571b9; + --FoldI: #4b5d67d0; + --FoldJ: #295d6d7a; + --FoldK: #5734d691; + --FoldL: #4c4c6dda; + --FoldM: #ad62aab9; + --FoldN: #c490e4a1; + --FoldO: #b42a3d8e; + --FoldP: #af173880; + --FoldQ: #4c25a0b2; + --FoldR: #5f84dbc4; + --FoldS: #c06c84ce; + --FoldT: #684656d5; + --FoldU: #797d8581; + --FoldV: #556e53e3; + --FoldW: #2f5241b2; + --FoldX: #834c69ed; + --FoldY: #df85c885; + --FoldZ: #362222ea; +} + +/*color scheme-2, low transparency*/ +body.bt-toggle-colorful-folder.folder-colorful-two.theme-dark { + --Fold0: #823131d7; + --Fold1: #96174ad7; + --Fold2: #731a9ad7; + --Fold3: #543796d7; + --Fold4: #2b3ba2d7; + --Fold5: #185898d7; + --Fold6: #1e6b95d7; + --Fold7: #187782d7; + --Fold8: #0d6a5fd7; + --Fold9: #1f7624d7; + --FoldA: #2f6007ef; + --FoldB: #6c7e12ef; + --FoldC: #7b7e0def; + --FoldD: #7f6c0cef; + --FoldE: #7d550cef; + --FoldF: #76350aef; + --FoldG: #671c14ef; + --FoldH: #710d0def; + --FoldI: #7a0d36ef; + --FoldJ: #710b52ef; + --FoldK: #710e7aef; + --FoldL: #621287ef; + --FoldM: #470f7bef; + --FoldN: #381182ef; + --FoldO: #1c1089ef; + --FoldP: #192698ef; + --FoldQ: #1737a2ef; + --FoldR: #0e4295ef; + --FoldS: #0f5495ef; + --FoldT: #0f5f8eef; + --FoldU: #0d687eef; + --FoldV: #0a7373ef; + --FoldW: #0d6e5def; + --FoldX: #0b6542ef; + --FoldY: #0a642def; + --FoldZ: #105b09ef; +} + +/*color scheme-3*/ +body.bt-toggle-colorful-folder.folder-colorful-three.theme-dark { + --Fold0: #002044d7; + --Fold1: #042b58d7; + --Fold2: #032d5dd7; + --Fold3: #032f60d7; + --Fold4: #04356ed7; + --Fold5: #053c7ad7; + --Fold6: #0f4a8ed7; + --Fold7: #18559ad7; + --Fold8: #1e5fa9d7; + --Fold9: #296bb6d7; + --FoldA: #003404ef; + --FoldB: #014406ef; + --FoldC: #004c06ef; + --FoldD: #005607ef; + --FoldE: #005d08ef; + --FoldF: #006c09ef; + --FoldG: #007a06ef; + --FoldH: #4e3200ef; + --FoldI: #5d3c00ef; + --FoldJ: #6c4600ef; + --FoldK: #784e00ef; + --FoldL: #8c5b00ef; + --FoldM: #915e00ef; + --FoldN: #a06800ef; + --FoldO: #5d0000ef; + --FoldP: #640000ef; + --FoldQ: #780000ef; + --FoldR: #870000ef; + --FoldS: #930000ef; + --FoldT: #a20000ef; + --FoldU: #0a0f58ef; + --FoldV: #050b64ef; + --FoldW: #091075ef; + --FoldX: #131a82ef; + --FoldY: #1f2791ef; + --FoldZ: #2a3296ef; +} + +/*color scheme-4*/ +body.bt-toggle-colorful-folder.folder-colorful-four.theme-dark { + --Fold0: #002f65d7; + --Fold1: #003675d7; + --Fold2: #003d82d7; + --Fold3: #004696d7; + --Fold4: #0053b1d7; + --Fold5: #0657b5d7; + --Fold6: #0b66ced7; + --Fold7: #156cd0d7; + --Fold8: #2278dad7; + --Fold9: #2879d6d7; + --FoldA: #001e5fef; + --FoldB: #002473ef; + --FoldC: #002d90ef; + --FoldD: #0135a5ef; + --FoldE: #073bb6ef; + --FoldF: #0d46c2ef; + --FoldG: #1253d6ef; + --FoldH: #002351ef; + --FoldI: #00306eef; + --FoldJ: #05336fef; + --FoldK: #093c7eef; + --FoldL: #0f4489ef; + --FoldM: #19529def; + --FoldN: #2965b3ef; + --FoldO: #003156ef; + --FoldP: #003f6fef; + --FoldQ: #004b84ef; + --FoldR: #005190ef; + --FoldS: #07599bef; + --FoldT: #1c6db0ef; + --FoldU: #003d5aef; + --FoldV: #004d71ef; + --FoldW: #005c87ef; + --FoldX: #066996ef; + --FoldY: #1379a9ef; + --FoldZ: #1b89bbef; +} + +/*color scheme-5*/ +body.bt-toggle-colorful-folder.folder-colorful-five.theme-dark { + --Fold0: #7b7b05d7; + --Fold1: #2d7a04d7; + --Fold2: #097a4bd7; + --Fold3: #09756fd7; + --Fold4: #0a6b7ad7; + --Fold5: #0b556ed7; + --Fold6: #0b426fd7; + --Fold7: #0d226ed7; + --Fold8: #350e6cd7; + --Fold9: #5b0254d7; + --FoldA: #350e6cd7; + --FoldB: #0d226ed7; + --FoldC: #0b426fd7; + --FoldD: #0b556ed7; + --FoldE: #09756fd7; + --FoldF: #097a4bd7; + --FoldG: #2d7a04d7; + --FoldH: #7b7b05d7; + --FoldI: #2d7a04d7; + --FoldJ: #097a4bd7; + --FoldK: #09756fd7; + --FoldL: #0b556ed7; + --FoldM: #0b556ed7; + --FoldN: #0b426fd7; + --FoldO: #0d226ed7; + --FoldP: #350e6cd7; + --FoldQ: #5b0254d7; + --FoldR: #350e6cd7; + --FoldS: #0d226ed7; + --FoldT: #0b426fd7; + --FoldU: #0b556ed7; + --FoldV: #0b556ed7; + --FoldW: #09756fd7; + --FoldX: #097a4bd7; + --FoldY: #2d7a04d7; + --FoldZ: #7b7b05d7; +} + +body.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order).theme-light { + --FoldText: #000000; +} + +/*color scheme-1, high transparency*/ +body.bt-toggle-colorful-folder.folder-colorful-one.theme-light { + --Fold0: #f3bfbf54; + --Fold1: #ffbdd769; + --Fold2: #ebbcff69; + --Fold3: #ccb7ff65; + --Fold4: #b1bcff5e; + --Fold5: #98c6f45d; + --Fold6: #99ceeb5d; + --Fold7: #81dee95d; + --Fold8: #6ec7bc5b; + --Fold9: #8dde9162; + --FoldA: #a5dd745e; + --FoldB: #c9d96c5e; + --FoldC: #dbdd6a65; + --FoldD: #e5cb5965; + --FoldE: #e6b25365; + --FoldF: #e5915965; + --FoldG: #df756765; + --FoldH: #f46f6f65; + --FoldI: #f16fa16e; + --FoldJ: #ec6bc66e; + --FoldK: #de6ce86e; + --FoldL: #be62e96e; + --FoldM: #ad6cea6e; + --FoldN: #966ce66e; + --FoldO: #786be56e; + --FoldP: #717ce26e; + --FoldQ: #748fe76e; + --FoldR: #6f9ee96e; + --FoldS: #6fade86e; + --FoldT: #68b8e76e; + --FoldU: #63c9e36e; + --FoldV: #6ed3d36e; + --FoldW: #61c0b06e; + --FoldX: #4dbc916e; + --FoldY: #52bb7b6e; + --FoldZ: #5fbb576e; +} + +/*color scheme-2, low transparency*/ +body.bt-toggle-colorful-folder.folder-colorful-two.theme-light { + --Fold0: #ffe2e2; + --Fold1: #ffdee9; + --Fold2: #f6e1ff; + --Fold3: #e9dfff; + --Fold4: #e1e5ff; + --Fold5: #d4eaff; + --Fold6: #cdedff; + --Fold7: #ccf2f7; + --Fold8: #d5f8f4; + --Fold9: #d8f8da; + --FoldA: #ecffdb; + --FoldB: #f4fbd2; + --FoldC: #f7f8cf; + --FoldD: #f7f0cc; + --FoldE: #fdeed2; + --FoldF: #ffe4d3; + --FoldG: #ffdbd6; + --FoldH: #ffdfdf; + --FoldI: #ffdce9; + --FoldJ: #ffdbf4; + --FoldK: #fcddff; + --FoldL: #f4dbff; + --FoldM: #ecd7ff; + --FoldN: #e5d7ff; + --FoldO: #dad6ff; + --FoldP: #d6daff; + --FoldQ: #d7e1ff; + --FoldR: #d5e5ff; + --FoldS: #d3eaff; + --FoldT: #d3eeff; + --FoldU: #d6f7ff; + --FoldV: #d6ffff; + --FoldW: #dafff8; + --FoldX: #dcfcef; + --FoldY: #dcffe9; + --FoldZ: #defcdc; +} + + +/*color scheme-3*/ +body.bt-toggle-colorful-folder.folder-colorful-three.theme-light { + --Fold0: #80dc87ef; + --Fold1: #8fe296ef; + --Fold2: #9de5a3ef; + --Fold3: #b1ebb6ef; + --Fold4: #bbebbfef; + --Fold5: #c8ebcbef; + --Fold6: #d9ecdaef; + --FoldG: #50a2ffd7; + --FoldF: #60aaffd7; + --FoldE: #6eb2ffd7; + --FoldD: #76b6ffd7; + --FoldC: #89c0ffd7; + --FoldB: #93c5ffd7; + --FoldA: #aad2ffd7; + --Fold9: #bbdbffd7; + --Fold8: #c8e2ffd7; + --Fold7: #d2e7ffd7; + --FoldH: #ffbc40ef; + --FoldI: #ffc75fef; + --FoldJ: #ffcd71ef; + --FoldK: #ffd485ef; + --FoldL: #ffe0a6ef; + --FoldM: #ffe7bbef; + --FoldN: #ffedcbef; + --FoldO: #ff7676ef; + --FoldP: #ff9494ef; + --FoldQ: #ffa1a1ef; + --FoldR: #ffb8b8ef; + --FoldS: #ffcbcbef; + --FoldT: #ffe1e1ef; + --FoldU: #a38fffef; + --FoldV: #b09fffef; + --FoldW: #c2b5ffef; + --FoldX: #d2c6ffef; + --FoldY: #e0daffef; + --FoldZ: #eae4ffef; +} + +/*color scheme-4*/ +body.bt-toggle-colorful-folder.folder-colorful-four.theme-light { + --Fold0: #50a2ffd7; + --Fold1: #60aaffd7; + --Fold2: #6eb2ffd7; + --Fold3: #76b6ffd7; + --Fold4: #89c0ffd7; + --Fold5: #93c5ffd7; + --Fold6: #aad2ffd7; + --Fold7: #bbdbffd7; + --Fold8: #c8e2ffd7; + --Fold9: #d2e7ffd7; + --FoldA: #709effef; + --FoldB: #81a9ffef; + --FoldC: #92b5ffef; + --FoldD: #a4c1ffef; + --FoldE: #b4cbffef; + --FoldF: #c3d6ffef; + --FoldG: #d4e2ffef; + --FoldH: #7ab3ffef; + --FoldI: #86bbffef; + --FoldJ: #9dc7ffef; + --FoldK: #acd0ffef; + --FoldL: #b1d3ffef; + --FoldM: #c6dfffef; + --FoldN: #d1e5ffef; + --FoldO: #80c8ffef; + --FoldP: #97d2ffef; + --FoldQ: #a9daffef; + --FoldR: #b7e0ffef; + --FoldS: #c8e6ffef; + --FoldT: #d9eeffef; + --FoldU: #7dd6ffef; + --FoldV: #94ddffef; + --FoldW: #a4e2ffef; + --FoldX: #b5e8ffef; + --FoldY: #c5edffef; + --FoldZ: #d2f1ffef; +} + +/*color scheme-5*/ +body.bt-toggle-colorful-folder.folder-colorful-five.theme-light { + --Fold0: #e4e483d7; + --Fold1: #bde7a7d7; + --Fold2: #9de2c5d7; + --Fold3: #93dad6d7; + --Fold4: #9de2ecd7; + --Fold5: #8ddcf7d7; + --Fold6: #8acaffd7; + --Fold7: #aebdf3d7; + --Fold8: #cab2ebd7; + --Fold9: #e9b1e5d7; + --FoldA: #cab2ebd7; + --FoldB: #aebdf3d7; + --FoldC: #8acaffd7; + --FoldD: #9de2ecd7; + --FoldE: #93dad6d7; + --FoldF: #9de2c5d7; + --FoldG: #bde7a7d7; + --FoldH: #e4e483d7; + --FoldI: #bde7a7d7; + --FoldJ: #9de2c5d7; + --FoldK: #93dad6d7; + --FoldL: #9de2ecd7; + --FoldM: #8ddcf7d7; + --FoldN: #8acaffd7; + --FoldO: #aebdf3d7; + --FoldP: #cab2ebd7; + --FoldQ: #e9b1e5d7; + --FoldR: #cab2ebd7; + --FoldS: #aebdf3d7; + --FoldT: #8acaffd7; + --FoldU: #8ddcf7d7; + --FoldV: #9de2ecd7; + --FoldW: #93dad6d7; + --FoldX: #9de2c5d7; + --FoldY: #bde7a7d7; + --FoldZ: #e4e483d7; +} + +/*color scheme-custom*/ +body.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default) { + --Fold0: hue-rotate(350deg); + --Fold1: hue-rotate(340deg); + --Fold2: hue-rotate(330deg); + --Fold3: hue-rotate(320deg); + --Fold4: hue-rotate(310deg); + --Fold5: hue-rotate(300deg); + --Fold6: hue-rotate(290deg); + --Fold7: hue-rotate(280deg); + --Fold8: hue-rotate(270deg); + --Fold9: hue-rotate(260deg); + --FoldA: hue-rotate(250deg); + --FoldB: hue-rotate(240deg); + --FoldC: hue-rotate(230deg); + --FoldD: hue-rotate(220deg); + --FoldE: hue-rotate(210deg); + --FoldF: hue-rotate(200deg); + --FoldG: hue-rotate(190deg); + --FoldH: hue-rotate(180deg); + --FoldJ: hue-rotate(170deg); + --FoldK: hue-rotate(160deg); + --FoldL: hue-rotate(150deg); + --FoldM: hue-rotate(140deg); + --FoldN: hue-rotate(130deg); + --FoldO: hue-rotate(120deg); + --FoldP: hue-rotate(110deg); + --FoldQ: hue-rotate(100deg); + --FoldR: hue-rotate(90deg); + --FoldS: hue-rotate(80deg); + --FoldT: hue-rotate(70deg); + --FoldU: hue-rotate(60deg); + --FoldV: hue-rotate(50deg); + --FoldW: hue-rotate(40deg); + --FoldX: hue-rotate(30deg); + --FoldY: hue-rotate(20deg); + --FoldZ: hue-rotate(10deg); +} + +body.bt-toggle-colorful-folder.folder-colorful-six { + --Fold0: #fc5c65; + --Fold1: #fd9644; + --Fold2: #fed330; + --Fold3: #26de81; + --Fold4: #2bcbba; + --Fold5: #45aaf2; + --Fold6: #4b7bec; + --Fold7: #a55eea; + --Fold8: #d1d8e0; + --Fold9: #778ca3; + --FoldA: #eb3b5a; + --FoldB: #fa8231; + --FoldC: #f7b731; + --FoldD: #20bf6b; + --FoldE: #0fb9b1; + --FoldF: #2d98da; + --FoldG: #3867d6; + --FoldH: #8854d0; + --FoldI: #a5b1c2; + --FoldJ: #4b6584; + --FoldK: #fc5c65; + --FoldL: #fd9644; + --FoldM: #fed330; + --FoldN: #26de81; + --FoldO: #2bcbba; + --FoldP: #45aaf2; + --FoldQ: #4b7bec; + --FoldR: #a55eea; + --FoldS: #d1d8e0; + --FoldT: #778ca3; + --FoldU: #eb3b5a; + --FoldV: #fa8231; + --FoldW: #f7b731; + --FoldX: #20bf6b; + --FoldY: #0fb9b1; + --FoldZ: #2d98da; +} +/* =======folder-colorful-custom============= */ +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder .nav-folder-title:hover, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder .nav-file-title:hover{ + font-weight: bold; +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title+.nav-folder-children .nav-file-title.is-active { + opacity: 0.8; + background-color: var(--folder-colorful-custom-color); +} + +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="0"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="0"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="0"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--Fold0); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="1"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="1"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="1"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--Fold1); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="2"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="2"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="2"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--Fold2); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="3"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="3"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="3"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--Fold3); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="4"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="4"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="4"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--Fold4); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="5"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="5"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="5"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--Fold5); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="6"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="6"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="6"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--Fold6); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="7"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="7"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="7"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--Fold7); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="8"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="8"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="8"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--Fold8); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="9"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="9"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="9"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--Fold9); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="A"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="A"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="A"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--FoldA); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="B"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="B"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="B"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--FoldB); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="C"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="C"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="C"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--FoldC); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="D"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="D"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="D"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--FoldD); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="E"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="E"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="E"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--FoldE); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="F"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="F"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="F"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--FoldF); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="G"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="G"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="G"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--FoldG); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="H"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="H"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="H"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--FoldH); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="I"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="I"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="I"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--FoldI); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="J"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="J"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="J"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--FoldJ); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="K"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="K"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="K"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--FoldK); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="L"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="L"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="L"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--FoldL); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="M"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="M"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="M"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--FoldM); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="N"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="N"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="N"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--FoldN); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="O"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="O"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="O"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--FoldO); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="P"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="P"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="P"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--FoldP); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="Q"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="Q"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="Q"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--FoldQ); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="R"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="R"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="R"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--FoldR); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="S"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="S"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="S"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--FoldS); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="T"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="T"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="T"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--FoldT); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="U"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="U"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="U"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--FoldU); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="V"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="V"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="V"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--FoldV); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="W"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="W"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="W"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--FoldW); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="X"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="X"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="X"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--FoldX); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="Y"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="Y"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="Y"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--FoldY); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="Z"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="Z"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="Z"]+.nav-folder-children .nav-file-title.is-active { + filter: var(--FoldZ); +} + +/* ===folder-style-change-options-colorful-order ============ */ + +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-folder.mod-root>.nav-folder-children>.nav-folder .nav-file-title { + color: var(--FoldText); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-folder.mod-root>.nav-folder-children>.nav-folder .nav-folder-title.is-active, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-folder.mod-root>.nav-folder-children>.nav-folder .nav-folder-title:hover { + font-weight: bold; + filter: saturate(150%); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+2) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+2) .nav-folder-title+.nav-folder-children { + background-color: var(--Fold0); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+3) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+3) .nav-folder-title+.nav-folder-children { + background-color: var(--Fold1); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+4) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+4) .nav-folder-title+.nav-folder-children { + background-color: var(--Fold2); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+5) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+5) .nav-folder-title+.nav-folder-children { + background-color: var(--Fold3); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+6) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+6) .nav-folder-title+.nav-folder-children { + background-color: var(--Fold4); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+7) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+7) .nav-folder-title+.nav-folder-children { + background-color: var(--Fold5); +} + +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+8) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+8) .nav-folder-title+.nav-folder-children { + background-color: var(--Fold6); +} + +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+9) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+9) .nav-folder-title+.nav-folder-children { + background-color: var(--Fold7); +} + +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+10) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+10) .nav-folder-title+.nav-folder-children { + background-color: var(--Fold8); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+11) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+11) .nav-folder-title+.nav-folder-children { + background-color: var(--Fold9); +} + +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+12) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+12) .nav-folder-title+.nav-folder-children { + background-color: var(--FoldA); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+13) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-order .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+13) .nav-folder-title+.nav-folder-children { + background-color: var(--FoldB); +} + +/*=====folder colorful title=====*/ +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-folder.mod-root>.nav-folder-children>.nav-folder .nav-folder-title.is-active, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-folder.mod-root>.nav-folder-children>.nav-folder .nav-file-title.is-active, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-folder.mod-root>.nav-folder-children>.nav-folder .nav-folder-title:hover, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-folder.mod-root>.nav-folder-children>.nav-folder .nav-file-title:hover{ + font-weight: bold; + filter: saturate(150%); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-folder.mod-root>.nav-folder-children>.nav-folder .nav-folder-title { + font-weight: 600; +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+2) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+2) .nav-file-title { + color: var(--Fold0); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+3) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+3) .nav-file-title { + color: var(--Fold1); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+4) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+4) .nav-file-title{ + color: var(--Fold2); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+5) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+5) .nav-file-title { + color: var(--Fold3); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+6) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+6) .nav-file-title { + color: var(--Fold4); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+7) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+7) .nav-file-title { + color: var(--Fold5); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+8) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+8) .nav-file-title { + color: var(--Fold6); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+9) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+9) .nav-file-title { + color: var(--Fold7); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+10) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+10) .nav-file-title { + color: var(--Fold8); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+11) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+11) .nav-file-title { + color: var(--Fold9); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+12) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+12) .nav-file-title { + color: var(--FoldA); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+13) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-title .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+13) .nav-file-title { + color: var(--FoldB); +} + +/*=====folder-colorful-custom=====*/ +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-order.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder .nav-folder-title, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-order.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder .nav-folder-title+.nav-folder-children { + background-color: var(--folder-colorful-custom-color); +} + +body.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order,.folder-style-change-options-colorful-title) { + --folder-colorful-custom-color: var(--theme-color); +} + +body.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default) .nav-folder.mod-root>.nav-folder-children>.nav-folder .nav-folder-title.is-active, +body.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default) .nav-folder.mod-root>.nav-folder-children>.nav-folder .nav-file-title.is-active, +body.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default) .nav-folder.mod-root>.nav-folder-children>.nav-folder .nav-folder-title:hover, +body.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default) .nav-folder.mod-root>.nav-folder-children>.nav-folder .nav-file-title:hover{ + font-weight: bold; + filter: saturate(150%); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-title.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder .nav-folder-title, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-title.folder-colorful-custom .nav-folder.mod-root>.nav-folder-children>.nav-folder .nav-file-title { + color:var(--folder-colorful-custom-color); + font-weight: 600; +} +body.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default) .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+2) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default) .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+2) .nav-file-title { + filter: var(--Fold0); +} +body.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default) .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+3) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default) .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+3) .nav-file-title { + filter: var(--Fold1); +} +body.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default) .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+4) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default) .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+4) .nav-file-title { + filter: var(--Fold2); +} +body.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default) .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+5) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default) .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+5) .nav-file-title { + filter: var(--Fold3); +} +body.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default) .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+6) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default) .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+6) .nav-file-title { + filter: var(--Fold4); +} +body.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default) .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+7) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default) .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+7) .nav-file-title { + filter: var(--Fold5); +} +body.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default) .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+8) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default) .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+8) .nav-file-title { + filter: var(--Fold6); +} +body.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default) .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+9) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default) .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+9) .nav-file-title { + filter: var(--Fold7); +} +body.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default) .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+10) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default) .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+10) .nav-file-title { + filter: var(--Fold8); +} +body.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default) .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+11) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default) .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+11) .nav-file-title { + filter: var(--Fold9); +} +body.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default) .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+12) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default) .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+12) .nav-file-title { + filter: var(--FoldA); +} +body.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default) .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+13) .nav-folder-title, +body.bt-toggle-colorful-folder.folder-colorful-custom:not(.folder-style-change-options-colorful-default) .nav-folder.mod-root>.nav-folder-children>.nav-folder:nth-child(12n+13) .nav-file-title { + filter: var(--FoldB); +} + +/* Set up explorer container margins */ +body.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order) .nav-files-container { + margin: 0 5px; +} + +/* Remove collapse arrow from top level folders */ +body.remove-arrow.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order) .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title>.nav-folder-collapse-indicator { + display: none; +} + +/* Top Level Folder Titles */ +body.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order) .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title { + color: var(--FoldText); + padding: var(--nav-item-parent-padding); + padding-bottom: 4px; + /* padding-left: 3px; */ + margin-top: 3px; + /* space between top level sections */ + border-radius: 5px 5px 0 0; +} + +/* Rounded borders */ +body.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order) .nav-folder.mod-root>.nav-folder-children>.nav-folder.is-collapsed>.nav-folder-title { + border-radius: 5px; +} + +/* General Nav Folder Children (this is the part that expands from each top level folder) */ +body.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order) .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-children { + margin-left: 0; + border-radius: 0 0 5px 5px; + padding-bottom: 5px; + border-left: 0px solid; + padding-left:1em; +} + +body.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order) .nav-file-title { + padding-left: 5px; +} + +body.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order) .nav-file-title-content { + color: var(--FoldText); +} + +/* +body.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder>.nav-folder-children { + margin-left: 0; + padding-left: 0; + border-left: unset !important; + border-radius: 0; + transition: all 400ms ease-in; +} +*/ +body.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order).is-mobile .nav-folder-title { + margin-bottom: 0; +} + +body.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order) .nav-folder-children .nav-folder-children { + border-left: 1px solid var(--text-muted); +} + +body.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order).is-mobile .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-children { + padding-bottom: 5px; +} + +/* active file increase font size and removes normal highlight marker */ +body.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order) .nav-file-title.is-active { + background-color: var(--theme-color-translucent-015); +} + +/* Adds hemisphere marker to active file instead */ +body.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order) .nav-file-title.is-active::before { + content: ''; + position: absolute; + bottom: -1px; + left: 0; + height: 2px; + width: 100%; + background-image: linear-gradient(to right, var(--theme-color), transparent 90%); +} + +body.unmuted-collapsed-folder.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.is-collapsed { + opacity: 1; +} + +/* 16 Top level Folders By Starting Digit (0-F) +These are set for me by leading number/letter which also ensures they are in the correct order when sorted alphabetically +You can change these to match your use case. +*/ +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="0"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="0"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="0"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--Fold0); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="1"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="1"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="1"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--Fold1); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="2"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="2"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="2"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--Fold2); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="3"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="3"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="3"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--Fold3); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="4"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="4"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="4"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--Fold4); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="5"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="5"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="5"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--Fold5); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="6"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="6"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="6"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--Fold6); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="7"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="7"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="7"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--Fold7); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="8"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="8"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="8"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--Fold8); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="9"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="9"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="9"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--Fold9); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="A"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="A"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="A"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--FoldA); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="B"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="B"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="B"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--FoldB); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="C"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="C"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="C"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--FoldC); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="D"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="D"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="D"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--FoldD); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="E"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="E"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="E"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--FoldE); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="F"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="F"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="F"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--FoldF); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="G"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="G"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="G"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--FoldG); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="H"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="H"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="H"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--FoldH); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="I"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="I"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="I"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--FoldI); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="J"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="J"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="J"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--FoldJ); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="K"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="K"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="K"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--FoldK); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="L"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="L"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="L"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--FoldL); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="M"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="M"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="M"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--FoldM); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="N"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="N"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="N"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--FoldN); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="O"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="O"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="O"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--FoldO); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="P"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="P"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="P"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--FoldP); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="Q"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="Q"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="Q"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--FoldQ); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="R"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="R"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="R"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--FoldR); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="S"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="S"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="S"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--FoldS); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="T"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="T"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="T"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--FoldT); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="U"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="U"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="U"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--FoldU); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="V"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="V"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="V"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--FoldV); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="W"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="W"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="W"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--FoldW); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="X"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="X"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="X"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--FoldX); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="Y"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="Y"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="Y"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--FoldY); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="Z"], +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="Z"]+.nav-folder-children, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children>.nav-folder>.nav-folder-title[data-path^="Z"]+.nav-folder-children .nav-file-title.is-active { + background-color: var(--FoldZ); +} +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder.mod-root>.nav-folder-children .nav-file-title.is-active { + filter: hue-rotate(110deg); +} +/* Scrollbars eliminated +body.folder-style-change-options-colorful .workspace-leaf-content[data-type='file-explorer'] ::-webkit-scrollbar { + width: 0px; + height: 0px; +} +*/ + +body.bt-toggle-colorful-folder.folder-style-change-options-colorful .nav-folder-title:hover { + font-weight: bold; + filter: saturate(250%); +} + +body.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order) .theme-dark .workspace-leaf-content[data-type="file-explorer"] { + background-color: var(--background-secondary-alt); +} + +body.bt-toggle-colorful-folder:is(.folder-style-change-options-colorful,.folder-style-change-options-colorful-order) .nav-folder.mod-root>.nav-folder-title { + background-color: initial; +} + +/*style settings blockquote quotation marks*/ +body.blockquote-style-quotation-mark .markdown-source-view.mod-cm6.is-live-preview .HyperMD-quote:before, +body.blockquote-style-quotation-mark .markdown-source-view.mod-cm6 .cm-blockquote-border:before { + border-left: none; +} +body.blockquote-style-quotation-mark :is(.markdown-preview-view,.markdown-rendered) blockquote { + color: var(--text-normal); + box-shadow: 0 0.8rem 2rem rgba(0, 0, 0, 0.1); +} + +body.blockquote-style-quotation-mark :is(.markdown-preview-view,.markdown-rendered) blockquote { + padding-left: 35px; + padding-right: 10px; + margin-inline-start: 1%; + margin-inline-end: 1%; + border-left-width: 0px; +} + +body.blockquote-style-quotation-mark :is(.markdown-preview-view,.markdown-rendered) blockquote p { + position: relative; + margin-left: 0.7em; + margin-right: 0; + font-size: var(--font-size-preview-blockquote); +} + +body.blockquote-style-quotation-mark :is(.markdown-preview-view,.markdown-rendered) blockquote p:first-of-type::before { + content: '\ee81'; + font-size: 2em; + font-family: boxicons; + color: var(--text-folder-file-icon); + position: absolute; + top: -0.4em; + left: -1.2em; +} + +body.blockquote-style-quotation-mark +.markdown-source-view.mod-cm6.is-live-preview +.HyperMD-quote:not(.cm-active) > .cm-formatting.cm-formatting-quote.cm-quote::before { + content: '\ee81'; + font-size: 1.5em; + font-family: boxicons; + color: var(--text-folder-file-icon); + position: absolute; + margin-left: -0.8em; +} +body.blockquote-style-quotation-mark .markdown-source-view.mod-cm6.is-live-preview .HyperMD-quote + .HyperMD-quote > .cm-formatting.cm-formatting-quote.cm-quote::before { + display: none; +} +body.blockquote-style-quotation-mark .markdown-source-view.mod-cm6.is-live-preview .cm-content div.HyperMD-quote .cm-blockquote-border { + border: none; +} + +/*speech bubble-1*/ +body.blockquote-style-speech-bubble-one :is(.markdown-preview-view,.markdown-rendered):not(.kanban-plugin__markdown-preview-view) blockquote { + position: relative; + color: var(--theme-color); + font-weight: normal; + line-height: 1.5; + margin-top: 2em; + margin-bottom: 2.5em; + border: 3px solid; + border-radius: 20px; + padding: 10px 15px; + background: var(--background-primary) !important; +} + +body.blockquote-style-speech-bubble-one .theme-dark :is(.markdown-preview-view,.markdown-rendered):not(.kanban-plugin__markdown-preview-view) blockquote { + background-color: var(--background-primary) !important; +} + +body.blockquote-style-speech-bubble-one :is(.markdown-preview-view,.markdown-rendered):not(.kanban-plugin__markdown-preview-view) blockquote p { + color: var(--text-normal); +} + +body.blockquote-style-speech-bubble-one :is(.markdown-preview-view,.markdown-rendered):not(.kanban-plugin__markdown-preview-view) blockquote:after { + content: ''; + position: absolute; + border: 2.5px solid var(--theme-color); + border-radius: 35px 0 0 0; + width: 1.75rem; + height: 3.45rem; + bottom: -3.65rem; + left: 1.8rem; + border-bottom: none; + border-left: none; + border-right: none; + z-index: 3; +} + +body.blockquote-style-speech-bubble-one :is(.markdown-preview-view,.markdown-rendered):not(.kanban-plugin__markdown-preview-view) blockquote:before { + content: ''; + position: absolute; + width: 25px; + border: 4px solid var(--background-primary); + bottom: -4px; + left: 20px; + z-index: 2; +} + +/*speech bubble-2*/ +/*adapted from https://codepen.io/mchernin34/pen/ojXvLq*/ +body.blockquote-style-speech-bubble-two :is(.markdown-preview-view,.markdown-rendered):not(.kanban-plugin__markdown-preview-view) blockquote { + position: relative; + padding: 10px; + margin-top: 1.5rem; + margin-bottom: 2.2rem; + border: 4px solid var(--theme-color); + text-align: center; + background: var(--background-primary); + -webkit-border-radius: 20px; + -moz-border-radius: 20px; + border-radius: 20px; + font-size: 1.2em; +} + +body.blockquote-style-speech-bubble-two .theme-dark :is(.markdown-preview-view,.markdown-rendered):not(.kanban-plugin__markdown-preview-view) blockquote { + background-color: var(--background-primary) !important; + border: 4px solid var(--theme-color); +} + +body.blockquote-style-speech-bubble-two.theme-dark :is(.markdown-preview-view,.markdown-rendered):not(.kanban-plugin__markdown-preview-view) blockquote:before, +body.blockquote-style-speech-bubble-two.theme-dark :is(.markdown-preview-view,.markdown-rendered):not(.kanban-plugin__markdown-preview-view) blockquote:after { + border-color: var(--theme-color); +} + +body.blockquote-style-speech-bubble-two.theme-dark :is(.markdown-preview-view,.markdown-rendered):not(.kanban-plugin__markdown-preview-view) blockquote> :first-child:before { + background: var(--theme-color); +} + +body.blockquote-style-speech-bubble-two :is(.markdown-preview-view,.markdown-rendered):not(.kanban-plugin__markdown-preview-view) blockquote:before { + content: ''; + position: absolute; + z-index: 10; + bottom: -35px; + left: 50px; + width: 50px; + height: 29px; + border-style: solid; + border-width: 0 7px 4px 0; + border-color: var(--theme-color); + background: transparent; + -webkit-border-bottom-right-radius: 80px 50px; + -moz-border-radius-bottomright: 80px 50px; + border-bottom-right-radius: 80px 50px; + display: block; +} + +body.blockquote-style-speech-bubble-two :is(.markdown-preview-view,.markdown-rendered):not(.kanban-plugin__markdown-preview-view) blockquote:after { + content: ''; + position: absolute; + z-index: 10; + bottom: -35px; + left: 49px; + width: 20px; + height: 29px; + border-style: solid; + border-width: 0 7px 4px 0; + border-color: var(--theme-color); + background: transparent; + -webkit-border-bottom-right-radius: 40px 50px; + -moz-border-radius-bottomright: 40px 50px; + border-bottom-right-radius: 40px 50px; + display: block; +} + +/* creates a small circle to produce a rounded point where the two curves meet */ +body.blockquote-style-speech-bubble-two :is(.markdown-preview-view,.markdown-rendered):not(.kanban-plugin__markdown-preview-view) blockquote> :first-child:before { + content: ''; + position: absolute; + bottom: -35px; + left: 47px; + width: 4px; + height: 4px; + background: var(--theme-color); + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + border-radius: 10px; +} + +/* creates a white rectangle to cover part of the oval border*/ +body.blockquote-style-speech-bubble-two :is(.markdown-preview-view,.markdown-rendered):not(.kanban-plugin__markdown-preview-view) blockquote> :first-child:after { + content: ""; + position: absolute; + bottom: -10px; + left: 76px; + width: 24px; + height: 15px; + background: var(--background-primary); +} + +/*blockquote-style-outline*/ +body.blockquote-style-outline :is(.markdown-preview-view,.markdown-rendered) blockquote { + border: 3px solid var(--theme-color-translucent-04); + background-color: transparent; + border-radius: var(--radius-m); +} + +/*blockquote-style-border-left*/ +body.blockquote-style-border-left :is(.markdown-preview-view,.markdown-rendered) blockquote { + border-left: 3px solid var(--theme-color-translucent-04); + background-color: transparent; + border-radius: 0; +} + +body.background-settings-workplace-background-image .titlebar { + z-index: 1; +} + +body.background-settings-workplace-background-image.theme-light .titlebar-text, +body.background-settings-workplace-background-image.theme-dark .titlebar-text { + color: var(--text-normal); +} + +body.background-settings-workplace-background-image:not(.simple-titlebar):not(.is-frameless) .titlebar::before { + background-image: var(--theme-background); + background-size: cover; + content: ''; + display: block; + position: absolute; + top: -3px; + filter: blur(var(--titlebar-blur-depth)) brightness(var(--titlebar-brightness)) opacity(0.5); + right: -15px; + bottom: 0px; + left: -15px; +} +body.background-settings-workplace-background-image:not(.simple-titlebar):not(.is-frameless).theme-dark .titlebar::before { + filter: blur(var(--titlebar-blur-depth)) brightness(calc(var(--titlebar-brightness) - 0.5)) opacity(0.5); +} + +body:not(.simple-titlebar).background-settings-workplace-waves-light.theme-light .titlebar::before { + content: ''; + display: block; + position: absolute; + height:40px; + width: 120%; + background-image: unset; + -webkit-mask-image: var(--theme-background); + background-size: 100% 100%; + opacity: 0.5; + background-color: var(--wave-background-color); +} +body.background-settings-workplace-background-image:not(.simple-titlebar):not(.is-hidden-frameless) .titlebar { + --custom-titlebar-bg: var(--background-primary); + background-color: var(--custom-titlebar-bg); + border: none; +} + +body .titlebar, +body .workspace-ribbon.mod-left { + --titlebar-background: var(--titlebar-background-focused); +} + +body.simple-titlebar .titlebar { + background-color: var(--custom-titlebar-bg); + border: none; +} + +body.simple-titlebar .titlebar::before { + content: ''; + background-color: var(--custom-titlebar-bg); +} + +/*==========*/ +body.background-settings-workplace-background-image .side-dock-ribbon-tab, +body.background-settings-workplace-background-image .side-dock-ribbon-action:not(:hover), +body.background-settings-workplace-style-high-transparency .side-dock-ribbon-tab, +body.background-settings-workplace-style-high-transparency .side-dock-ribbon-action:not(:hover) { + color: var(--text-normal); +} + +body.is-mobile.background-settings-workplace-background-image .workspace-split.mod-root { + background-color: transparent; +} +body.is-mobile.background-settings-workplace-background-image:not(:is(.background-settings-workplace-waves-light,.background-settings-workplace-waves2-light,.background-settings-workplace-waves,.background-settings-workplace-waves2)) { + background-image: var(--theme-background); + background-size: cover; + opacity: 0.8; +} +body.color-scheme-options-simplicity-topaz.theme-dark.background-settings-workplace-background-image .workspace::before { + filter: blur(var(--blur-depth)) brightness(calc(var(--brightness-4-bg) - 0.5)) saturate(var(--saturate-4-bg)); +} + +body.background-settings-workplace-background-image.theme-light .workspace::before, +body.background-settings-workplace-background-image.theme-dark .workspace::before { + background-image: var(--theme-background); + background-size: cover; + filter: blur(var(--blur-depth)) brightness(var(--brightness-4-bg)) saturate(var(--saturate-4-bg)); +} + +body.is-mobile.background-settings-workplace-background-image:is(.background-settings-workplace-waves-light,.background-settings-workplace-waves2-light,.background-settings-workplace-waves,.background-settings-workplace-waves2), +body.background-settings-workplace-background-image:is(.background-settings-workplace-waves-light,.background-settings-workplace-waves2-light).theme-light .workspace, +body.color-scheme-options-simplicity-topaz.background-settings-workplace-background-image:is(.background-settings-workplace-waves,.background-settings-workplace-waves2).theme-dark .workspace, +body.background-settings-workplace-background-image:is(.background-settings-workplace-waves-light,.background-settings-workplace-waves2-light):not(.is-hidden-frameless).theme-light .titlebar { + background: var(--simple-white-2); +} + +body.background-settings-workplace-background-image:is(.background-settings-workplace-waves-light,.background-settings-workplace-waves,.background-settings-workplace-waves2,.background-settings-workplace-waves2-light):not(.is-hidden-frameless) .titlebar-inner, +body.background-settings-workplace-background-image:is(.background-settings-workplace-waves,.background-settings-workplace-waves2).theme-dark .workspace { + background: var(--background-secondary); +} + +/****from https://www.shapedivider.app/*****/ +body.background-settings-workplace-background-image.background-settings-workplace-waves-light.theme-light .workspace:before, +body.background-settings-workplace-background-image.background-settings-workplace-waves.theme-dark .workspace:before { + content: ""; + position: fixed; + height: auto; + width: 300%; + transform: rotate(180deg); + top: 75%; + left: -25%; + background-image: unset; + -webkit-mask-image: var(--theme-background); + background-size: 100% 100%; + opacity: 0.7; + filter: blur(var(--blur-depth)) brightness(var(--brightness-4-bg)) saturate(var(--saturate-4-bg)); + background-color: var(--wave-background-color); +} +/**from https://svgwave.in/*/ +body.background-settings-workplace-background-image.background-settings-workplace-waves2-light.theme-light .workspace::before, +body.background-settings-workplace-background-image.background-settings-workplace-waves2.theme-dark .workspace:before { + content: ""; + position: fixed; + height: auto; + width: 300%; + top: 75%; + left: -25%; + background-image: unset; + -webkit-mask-image: var(--theme-background); + background-size: 100% 100%; + opacity: 0.7; + filter: blur(var(--blur-depth)) brightness(var(--brightness-4-bg)) saturate(var(--saturate-4-bg)); + background-color: var(--wave2-background-color); +} + +body.background-settings-workplace-background-image.theme-light .workspace-split.mod-root:fullscreen::before, +body.background-settings-workplace-background-image.theme-dark .workspace-split.mod-root:fullscreen::before { + background-image: var(--theme-background); + background-size: cover; + filter: blur(var(--blur-depth)) brightness(var(--brightness-4-bg)) saturate(var(--saturate-4-bg)); + content: ''; + display: block; + position: absolute; + top: -25px; + right: -15px; + bottom: 0px; + left: -15px; +} + +/****from https://www.shapedivider.app/*****/ +body.background-settings-workplace-background-image.background-settings-workplace-waves-light.theme-light .workspace-split.mod-root::before, +body.background-settings-workplace-background-image.background-settings-workplace-waves.theme-dark .workspace-split.mod-root::before { + content: ""; + position: fixed; + height: auto; + width: 300%; + transform: rotate(180deg); + top: 75%; + left: -25%; + background-image: unset; + -webkit-mask-image: var(--theme-background); + background-size: 100% 100%; + opacity: 0.7; + filter: blur(var(--blur-depth)) brightness(var(--brightness-4-bg)) saturate(var(--saturate-4-bg)); + background-color: var(--wave-background-color); +} + +/**from https://svgwave.in/*/ +body.background-settings-workplace-background-image.background-settings-workplace-waves2-light.theme-light .workspace-split.mod-root::before, +body.background-settings-workplace-background-image.background-settings-workplace-waves2.theme-dark .workspace-split.mod-root:before { + content: ""; + position: fixed; + height: auto; + width: 300%; + top: 75%; + left: -25%; + background-image: unset; + -webkit-mask-image: var(--theme-background); + background-size: 100% 100%; + opacity: 0.7; + filter: blur(var(--blur-depth)) brightness(var(--brightness-4-bg)) saturate(var(--saturate-4-bg)); + background-color: var(--wave2-background-color); +} + +.workspace-split.mod-root:fullscreen .modal-container .prompt { + width: 90%; +} + +body.background-settings-workplace-background-image .workspace::before { + content: ''; + display: block; + position: absolute; + top: -37px; + right: -15px; + bottom: 0; + left: -15px; +} + +/* +body.background-settings-workplace-background-image.theme-light .workspace-leaf .view-header { + background: #f7f7f7; +} + +body.background-settings-workplace-background-image.theme-light .workspace-split.mod-root .workspace-tab-header.is-active.mod-active { + --tab-background-active: #f7f7f7; +} +*/ +body.background-settings-workplace-background-image.theme-light { + --background-primary:var(--background-primary-bg-4-bt); + --background-primary-bg-4-bt: #ffffffab; + --background-primary-alt-bg-4-bt: #ffffffbe; + --background-secondary-bg-4-bt: #ffffff80; + --background-secondary-alt-bg-4-bt: #ffffff20; + --text-muted: #525252; + --text-folder-file: #292929; + --background-modifier-border: #bfbfbf; + --page-border-bottom: var(--color-base-30); + --tab-outline-color: #dededee0; + --divider-color: #dededee0; +} + +textarea, input[type='text'], input[type='search'], input[type='email'], input[type='password'], input[type='number'] +{ + background: var(--bg-color-settings-4); +} + +body:is(.background-settings-workplace-background-image,.background-image-settings-switch) .modal-container { + --modal-background:var(--bg-color-settings-3); + --background-primary: var(--bg-color-settings-3); + --background-secondary:var(--bg-color-settings-3); +} + + +/* font color */ +/* body.background-settings-workplace-background-image :is(.tree-item-inner,.tree-item-flair,.workspace-ribbon-collapse-btn,.side-dock-ribbon-tab,.side-dock-ribbon-action):not(:hover) { + color: var(--text-normal); +} */ + + +body.background-settings-workplace-background-image.theme-dark { + --background-primary-bg-4-bt: #1414148a; + --background-secondary-bg-4-bt: #16161680; + --background-secondary-alt-bg-4-bt: #16161680; + --background-primary-alt-bg-4-bt: #1c1c1ccf; + --text-normal: #cccccc; + --page-border-bottom: var(--color-base-30); +} + +body.background-settings-workplace-background-image .nav-folder.mod-root>.nav-folder-title { + background-color: transparent !important; +} + +body.background-settings-workplace-background-image.theme-dark.is-mobile { + --background-primary-bg-4-bt: #1f1f1fbf; + --background-secondary-bg-4-bt: #00000069; + --background-secondary-alt-bg-4-bt: #16161680; + --background-primary-alt-bg-4-bt: #00000082; + --text-normal: #d4d4d4; + --page-border-bottom: var(--color-base-30); +} + +body.background-settings-workplace-background-image.background-settings-workplace-theme-dark-night-sky.theme-dark { + --night-sky: url(data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gIcSUNDX1BST0ZJTEUAAQEAAAIMbGNtcwIQAABtbnRyUkdCIFhZWiAH3AABABkAAwApADlhY3NwQVBQTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWxjbXMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApkZXNjAAAA/AAAAF5jcHJ0AAABXAAAAAt3dHB0AAABaAAAABRia3B0AAABfAAAABRyWFlaAAABkAAAABRnWFlaAAABpAAAABRiWFlaAAABuAAAABRyVFJDAAABzAAAAEBnVFJDAAABzAAAAEBiVFJDAAABzAAAAEBkZXNjAAAAAAAAAANjMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0ZXh0AAAAAElYAABYWVogAAAAAAAA9tYAAQAAAADTLVhZWiAAAAAAAAADFgAAAzMAAAKkWFlaIAAAAAAAAG+iAAA49QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAAAAAAAAAkoAAAD4QAALbPY3VydgAAAAAAAAAaAAAAywHJA2MFkghrC/YQPxVRGzQh8SmQMhg7kkYFUXdd7WtwegWJsZp8rGm/fdPD6TD////bAQQQAA0ADQANAA0ADgANAA4AEAAQAA4AFAAWABMAFgAUAB4AGwAZABkAGwAeAC0AIAAiACAAIgAgAC0ARAAqADIAKgAqADIAKgBEADwASQA7ADcAOwBJADwAbABVAEsASwBVAGwAfQBpAGMAaQB9AJcAhwCHAJcAvgC1AL4A+QD5AU4RAA0ADQANAA0ADgANAA4AEAAQAA4AFAAWABMAFgAUAB4AGwAZABkAGwAeAC0AIAAiACAAIgAgAC0ARAAqADIAKgAqADIAKgBEADwASQA7ADcAOwBJADwAbABVAEsASwBVAGwAfQBpAGMAaQB9AJcAhwCHAJcAvgC1AL4A+QD5AU7/wgARCAHgAoADASIAAhEBAxEB/8QAGgABAQEBAQEBAAAAAAAAAAAAAAECAwQFB//aAAgBAQAAAAD81uiraqi1atq6a1U1N3rs0zjO9Xp27zXXOGPL55q85rlxzmZkSeS6Kq2irTRo1dXVk1pvWtxrOLbvv6mNejGJjz8cazjm44M5kieS2lqtCqtVV1pvWU11W63KyVfV3XtefLlnGDnnjnnkzJInktpVrSaFW1Vu2qkvTpWtLFwt9LprrryZxNc5ccuOcy5kkknmpaWqqirbTVa0zLvtHRdppzNdets5825zZxz5YJEzmHmtFWlU0mlqmrWsx26S26ttcs3r10Rzzbpxxx5xMmZEeaqKtLVtFsrPRdXeN7NNF0mM7626uZqNYzx5YzJISCeWrRSqtaUUztqt60a0qNMxrd1pnrvjnOefPOMxWUInltKVUtq2qKzurb0W7bTC3Ntu+lm9zjjnjGc5mVISSea0Fqo0ttFXN001q229JnKm+hrtdXDhjnyyznJSJGZ57QKti1VpbZNW3Wlt0yLda6dtZ6NzGfPjnykmJQiRJ51KlpoFLWhNW2701Wc2rda6+ntnMrPHjnHLOWJQSRJ56tBZaFKtot1bray5lqr06+nvMNOXCccYxhmCwkTPBaCigWrVpq2t7RlaNdunbt0jpnyYxwxmZxJKEQx56pQstItFN6saWtkLTfbr07erp1vzvN04+XGZMSQQQx5rVFS0BVWzV0GrdSFarfXt17+/fr4fMzv53n5yTCEQlM+UoopZQq6qqq2gVrWt9enX09/R2z4/Nw8/DnJmIhC2J4xQVVUSta0lsaAqta113vv32OV5+fjyxmSpBCpJ5FALVqmbdXbNFrK3SXet9/XejnjnN6zjljjjJKECR4ygLVtLLV0hVuTTQ3rp7ey58/Fres5nLnzkLmoQR45ShbS2pVKlotpbq4vT0d+lzz4xdMTMmMwJICL4goXVLQLFKltq6t3jPbv0rnMW1jMSTMgZBB46RS21aBCiirdrrbHTtIktJhEkiCQRFeQAtVpZbGUtKLWrq6urq4ljZLzkMoqzMCFnlBQtUaCZWlFt3obupmGqEzmyRRJAlHlBULaooshdaYa1vWRpWS2hMmYUkEAeWgCrQopV1az21c4ihC2gyiFSQAR5igU0JUpVtturrUyxLbZgtVTMICCRViecKCrRbmS21bbbrTCLrW+XFVqiIIEqRRJ51BRaKuQurLbbrWc1brd48RbVQQCKZFjPACilsqwW1VXdki3WtTPHJaoEVACQJwAFUotiW1auukyyutVJjMlqgCwgIB5wAWgpUtW272zmLdWQmcKoAsEAgecoAtgopVt11rOYq1C5xBVQqWWAiFecUApFKFq71qkzKUozmCgAEWRLZwBQAFKatulWpkK0kucxQCxUCAnAUUABVttpbbrOULayTMooAEAhwBSgALVtqrbZIFqQzAFAEsCVxAFAAWraVqkgqoMwigABAcgBQFIVbaFtSFUQkQAoCBBzAKCgQq6ssVSFVUSEQCgQCGAFAUCFtohbKLQkgiAoQAGCgVAoCLdIgtCqEkikAAAGCgAFAS22QFAtWEyAAEAGFWUABQRaCkAa0JMgBFEAGCqAACkVQEAtqoygACkAYFUhQAApQIhVUJAKQKQBgKAUABQoJAWgQBQKktgcwAoUAAoUSALSCUFAKocQAKKAAKKIgCgAKFFUcAAChQAFAEAKlAChSi8AABQUABQBAALKlCgqnEAACgoACgEgoAFChRyAAAUFAABSIFAAUKKcgAAAUFAAAEKAAFUHMAAACgUAACCgEoAqnMAAAAKCgABBQQCgKYAAAABQBQACUQhSgC4AAAAACgUABAgKUAZAAAAAAoBQBCpAUoB//8QAFwEBAQEBAAAAAAAAAAAAAAAAAAECA//aAAgBAhAAAADdKpS22y3ZLdFYZmJJOdKUpdUuqF0EYxEywKKpVs2tqN1ms4zEjnRS0F0tomrqWTGYkMAVaFttsLdaTGJkI50ClFttFvSmM4mVRMUApVXSK300mMZzATnSgFpaLd71ZOMzAOQpQqlDWt9EvPnkgOQVQpRV111MrnOIWDkFoKFqzfRmWJIQOQtFgKttorKEA5FKAWW1UWpAIs5gtAtUEUIAOYLSKW2LWCgJYswBQpai1mKAA5lAVTSKJFAlIwKAW2kFkAAMAqKWlslEAAMAKC0AEUAMAoCigIAAyKAKhRUQACFQoABakAAgAoAAABUzQAoBCgBVOdlABQEKAKrmKABQIUANOYKABQQpCisAUAAUgBQyAFAAAAU//8QAGAEBAQEBAQAAAAAAAAAAAAAAAAECAwT/2gAIAQMQAAAA5yJkkkkmJc45xvOM25nZvXa61e8iSIkkzheecSmcot126at1e8iRIkjMl5TOZNzlGzp23bdu0iJJEJnMzmRN4xmy77dNLV7yESSIkmMzGrJnnnO+3XW6LrtCIiSGZiZWTn50d+vXW0XV7ZCESRnMwqTl5sXXbvverKt75IESMGZCZ4ccm/Xrdql9EIgZyiREzz4+drPp77tqxfSgzEuciWSTn5OeurPTr1oVfSRMoQhmTN5ed01Lq7q0r0CSRLUJM5zMKja2miu5CRCpLnEZVIuqLQ9CEQRMyYasmpEtpaDuQkS2ZZmLZl1SFFLF7BEQSTMtxm9NSALLTtAQhJOTaZrdQCizsQCGZnMtsi6sAFOogCZkZmrItoAK6AgEyklsStAAXYgBJASLVACtIADJUJFtABaQAIJRItFSgoEAIKQUlQDQBABKABEQ6wAQAAAIiOqABAApACI6EAAgAsACNhAAIAqFEDQEAAICgIP/xAApEAADAAIBAwQDAAIDAQAAAAAAARECECASITADMUBQE0FgUXAEYXGQ/9oACAEBAAE/APkzitsRYmJn69zHLuJ7u2PSIJCVZjVC4z3Hml2MXSUnSmhpZZRJpH40j1MFiZqjWkUpSja/yNj+gXFaW7pETShjXpC2ijY+4tJi90YY06MelH48WZ4xwxTQmdrTJpNjy/aZn3xMpB6SGM/bKZZaQ/o1tHco9oWO17n65Jl0j083hB5powzZ13MxRDqXdMydZkz8g6yEHpjGx/BXxEIb0i7pTFnfeI9foeoNTTE4dSeIs46Woxyhjm2epnMR5Vts6h5URUN7pm4NlLw76eqi/PpRM7ob1TE7zaY2JiHpDQ+xSibMRdimORlk29Z0T7dzq7RDJrJlMn3Mi8rpk8a8C8TEMWvYjfDAo3pMotXVOrsN0ohGPYp1ITGz9D13IQqRlkNpDY9Ub8M0vhTmxcb3Gk1UyCxROEXBMunvERWJsU08hVnREMRSjfZ0eSGN6v07FxXbiluj1S8UJlFpvsJUwQzLVHkZZFGxvi/lrwXSXFH6urq7QxsWqURCdxCFiQaMcRdhsbKN9xsb0x/U/sXFC5L2Ex5bu8UQhBGJDpJ23kxjG9XVf0VLyYvAtLVG+SFrHGn4zpjEkkMQxIzfYbKZPd09X6ReJNTudrq99tl5JiZizAWI8caZPXuQbiMmN0hkPg/oL4mLa0n329vldYmJgzFjQ9JDRkZd2QbMtP6a7pS77rdKWCzLiz/zT2uKF7GImYiILFtk9oZoyaZ/ky0+D8z+Mua3XpCG0IRS6vJGAhGBij8KXc9P0EzL/jvHGo9ZzsxYnR/0er2Q+DHueN+C/Cu0Xgk+FKUvJCMRCMF3QknEVuIwxSWLZ6+XaY9lazPBCS/fZGeWPeHq5dTiGN7fmg18lInCcGIpUUvJaSEhCMTAxyYvai9Sr3PyYVNunq5rIycM8uw2jJj1fJPiwhOKF4Lpf+jE/AkJGOJ0sSZjg2LBJFFkflUhl6z7RnW/8nUZ5DMhj+rXgWm+C09IQhHpqsWKFilqmWfceZ1nWJlGxmSo0ZD+nnBD5Xmh6QmJmKPTSxQmUplkZZDZRCZRsbOpGTHxnG/EnFeG8qXmhIaUPbWJhBMTGPIeXYb2tNjyKUo9zhPr7uaWmiGBjBHWkdY8i8WxvVGylH9utoQyGImPNnUUbKXdKNlLql+pfnWkIoiCGNlOoukUpSjKXhS8XzfzJ4JxQlxTKUbKUpRMpeDH4qNl1fl3lCE2kQhHpJixFgycqUpeNKXVLwvN/UTixYiQj2GPV1dt8bql+0viQ/BBou6Uv3yFpl3CEEhIzZfvF4EUb1eCFrPwXd+5S8KP0UY18e/VoXsPw0umT+BxXKbXKDX36FwfkY/vUhFKXbXG82vvEtUpeD8d0x/wT/kH5X9jPg3+Pv8AqG/Bv8RS8X/B3zP+KWr/ACV/0q/7afWzwX/6ff/EAB4RAAMAAwADAQEAAAAAAAAAAAABERAgQAJQYHAh/9oACAECAQE/AONbI/hMUtWWN8a1WFqtLp5PpWLm4QtmPqWy0ZRsvoYImGMb7bohImWx9d3QsvvuiEIomNDiQ8PvSEhLNGx96EeKw2UTLh+gRR+Q3ml9Cil1peyZpc34xD9EvkL8TP1Sfrf/xAAhEQADAAICAgMBAQAAAAAAAAAAARECECBAMVASITADgP/aAAgBAwEBPwD93pjHqCW3RfIWTGiJkjE9JGOJBdF6eoP60+Lo6KMf0TaMEJdWC1l51BrUYkND8kILwQokYrS0ugtsb0x6aEtZEIOITpKLESEuoh6e5pIhBspkylpiYoSF0pwfJIm8h5OloxGCMREF0ITU29NEITUIZGSEymAhIQua/Zj4MhNsyMj4oeCSMXFEfzryFpc0/wBbyhNseRk0ZOibKJfZhiInK/rdPm9MyM8m2OmGFFghoWIk0Yi7+Y8aLAWM2sSEF15wemeB/bPiQaIQhCE2urdNob3CEIQhBLU3CdCcqMQibhCE5TsMYltsx8k3CE7j4MgkJ9ucmLbJtd66mlzXqF6CE9RPWTgvUL/E3//Z); + --theme-background: var(--night-sky); +} + +body.background-settings-workplace-background-image.background-settings-workplace-theme-dark-dark-sky.theme-dark { + --dark-sky: url(data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gIcSUNDX1BST0ZJTEUAAQEAAAIMbGNtcwIQAABtbnRyUkdCIFhZWiAH3AABABkAAwApADlhY3NwQVBQTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWxjbXMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApkZXNjAAAA/AAAAF5jcHJ0AAABXAAAAAt3dHB0AAABaAAAABRia3B0AAABfAAAABRyWFlaAAABkAAAABRnWFlaAAABpAAAABRiWFlaAAABuAAAABRyVFJDAAABzAAAAEBnVFJDAAABzAAAAEBiVFJDAAABzAAAAEBkZXNjAAAAAAAAAANjMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0ZXh0AAAAAElYAABYWVogAAAAAAAA9tYAAQAAAADTLVhZWiAAAAAAAAADFgAAAzMAAAKkWFlaIAAAAAAAAG+iAAA49QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAAAAAAAAAkoAAAD4QAALbPY3VydgAAAAAAAAAaAAAAywHJA2MFkghrC/YQPxVRGzQh8SmQMhg7kkYFUXdd7WtwegWJsZp8rGm/fdPD6TD////bAQQQAA0ADQANAA0ADgANAA4AEAAQAA4AFAAWABMAFgAUAB4AGwAZABkAGwAeAC0AIAAiACAAIgAgAC0ARAAqADIAKgAqADIAKgBEADwASQA7ADcAOwBJADwAbABVAEsASwBVAGwAfQBpAGMAaQB9AJcAhwCHAJcAvgC1AL4A+QD5AU4RAA0ADQANAA0ADgANAA4AEAAQAA4AFAAWABMAFgAUAB4AGwAZABkAGwAeAC0AIAAiACAAIgAgAC0ARAAqADIAKgAqADIAKgBEADwASQA7ADcAOwBJADwAbABVAEsASwBVAGwAfQBpAGMAaQB9AJcAhwCHAJcAvgC1AL4A+QD5AU7/wgARCAHgAoADASIAAhEBAxEB/8QAGgABAQEBAQEBAAAAAAAAAAAAAAECAwQFBv/aAAgBAQAAAAD81Gcc8SQSCSAUpaFUAlQoIJAaoPoRnDOcYkBEgKKtAFAAAQkBbQ+hDMkxxZIQQFoWhCgCkAREqEulPeJIzyZxCRSAtsLFRSFUCBIQqBdD21SsZmMZwRKENUCoAS2pBIQABar2WtWpJjOeecAEi1Q1IAF3MxGYgopFVa9da1skTDHPnM0iyIWqsABdsJJlEFKItqvYu90EkzjOMTIEkKtAFWTSJJJIFBC1a9t6btIQScuUzC5kkiqSqWiSkSSJApALT376aqkIqYznMqc85zIWBVUVIskiJAAgo+h16aTVQktmZlKxjGc5hEUoLSJJJECFERQ+h066jVtkmbJFmdJOWZM4hCpS1SSZZSEAUkA9XTv0zdXdjPPOY1dS3U5YSc8yALq0kkmZEiCFCID0XpdbutLZnOZFu9a6TnnJjOc5gNdBJMpJJIkABEK9A1u6uuhM84S7u+2meeUkyziQ10qZzIkiSSQQAgPRSrq9O1mOWFrV1ro1rPOZzGtM4zV1pnGJCZjMkIQAD0gXXTvefPElut1Yu9ZmcyOnW45UaM5xmGZJmQiAIK9ClTWuzjIW62ipdokkb6sYzd6RM4zlJmZiIgIBe9tg1dXnC26pVWqLk0zjnNdOkSTGJJM5JIgIA9C1S6Zg1bbStbLZNaIxz5Zb6azMyYMyZkSEBAXutoqBd20tt12utTHPptJnnjllqs5hEzJmJEQBCu6rQC63q01vbe9LJGkMcsYiY5wEkmUSIgCK7ltCl1ve9JrfTVaAgJnM54xy5wRJEiIkQAO5bRVu976a1W7dWgIkEyzx4YxlCSIhEiIAO6rQ106b3db1NbW6BCJmUk5+XjiCTMAhJEBBexbRd999LdrdabtIEhMZxMzjxzgJmQUhJIgA7pbVt326dJrbWrd2iBEkxyzz48+UKSSABJIiAO4Wtb1rt0utXerq6WSCVMYxjWOHk5xbqSEACSRADpaVW+m+mumm+mtXVMwBOPLLXLl5eUN6mQIVbJMyIA21VU10666a106at6TmtAZ445Zs8vLnldbzFVIWqkmcxANGlug69eut9J206Y5c+Xt0FTDlnPPzceeY1oLUhaCTMzEChbqqXbp22zd8Jvn6vVszOupnlM54+LnnK6opEtC1mZzJAgWtUFt2w61rXb19jM6as5xnl4OGItUCKC1kxmQMiqUFt1Yt31zfd23pdUmZnh5uHDFsWhAC2QmZBMFUAW0XV106dOvbfTroSZk4Y83DgCghSAJmBOaqAC2Rq6vo16vUXt2SJzxnGfP5OaACAhQmYDkoFAVFt3239D1atd2ZMfO4+S9d8ss4ARAgtJkI5FIUUUqt79n0O3p1WYnDx/I55l312ziAiCAqpIF81ogqqW0rV9Xu36vVb5Pk+v0+b5vi5pd76bzIEJAChBTyVUBVWratavfp6vX6eXz/AAcfRz58cQut9dMkEQCiBSzyBQFLbVq23r7OzzePniDEir16UQIhQRBZa8gCgFtpV1rt6s5vj4ZFkgt1rViiotISEIuvKAUAqqtutb05c8ZhSIq20paRRdIkJF4ACgFVVt1q3HOZkBAqil1IBdaqQmTkAFAUqrbrVYxiQEAoUtkA1dVCQ5AAoKVVuqusTGJACCihUAttoSOYAKClurdapnniZgAgKKACrVDLAAFFLbvda3vHPjzkgBAFKAAWipmAAUU1db73fSZxx588wEIQFUACFCkAEUULdb69+++PPlzc82pJGYQi0BREAUAACqFuumukmYQEmZERIWBRakggKUABQarWqjRCFSCSZkWAtXVZTMgDUFAltg0LoiqQQtlSZBAurdFYYyBECgXSItltCFIkkurQAFWhdMwkJnMStCS63EJC22yCIQKopQBSWl3jOYOZLrdMZb0DMi62JIkIEVSqFIlUQ2Ywt40a3UkW22Ii6okkREEpVKUBKtZlW3EvTxqW2pVWiK0CSQiCFKKoFCiC66zp6/giqpS0IttISIggCqUFUBQt6dd9Ph0VQpQhdUIREABVFlChC2LQ/8QAGgEAAwEBAQEAAAAAAAAAAAAAAAECAwQFBv/aAAgBAhAAAAD6acsss85SQDKoC2kaCmUQitGeslOGWWcoApvWYTbsZCmUgVaV6bpxGGGMgK27rOQL0nKYQADq/TrUCMcMoREFVaCqKzxmUDBU37GrBhGGZOWEMCtaCcoUoAQN+1uA2Spcc8Y5ym7uieeZQgAA7+q9KJzh3peERjlBW1qcsZlIAEB06Xeu6wh1ru84zRnN2ss8omUIQAdLqterDNXqDuYnTXFWTlllnMiEAG1utazLqiqpqh5YVtMZY5xIhABtVXYq0srTXRy2scJMZnOISQgA2d3TvXe3oAAwMeXmyUpJJIANy9Hv0a6NJAMbS5uOcpgEJIEG5Wm23TpSUgwHUcXCqmZACUgDSnWu/TtcpAwLieDgLECKqIkQUO6rffe0J2CdzwefLoZNaU88YQmDbHprO2unUiRuPN5qKEFXSzxgEDAbHp1de6gG74+OE0IY2sUiQBgxvq9Ckh58cbvOJlIQNxIZgDGOnp39COe/P5S+q4iUgAEM5wAY23WnfvyefKSK2cgACQisAAGMbrbbkyQIGxjAKEkQADBg6q5ylAgYDEFMESAAxlaa658sIBAAwAGDSAAY3Xd0Tz8uYJJAMAEAwAYAwrXWSEiUJSAMYkgKAYMBtgBIMQAOrbiJJAbRQJVZKEgGMYADd5QSFNDoRVEykCGDYAMRVa8IxgwCmJJAAMAYxMet/wD/xAAZAQADAQEBAAAAAAAAAAAAAAAAAQIDBAX/2gAIAQMQAAAA8F6Xd7U3QISzbWQ2ZDum7ZOMnC29L11pjCEc96OScyXV3TYxYRyJKq012tpuIMp1oZlnW122CBTnwrNN1eml0aUTENqYJ06LbATFK8zKQGVrQ9Om0CWEBW902AMEvJxEihtqtb10sRlmlXVbbAAA8/BRJVtKY1daa24xkrTot0DBMDmyzmcnpSUZK7bLcyaXvo6bABhzKIzx0smAU06iNHKq9N9LbBgBjCzyVkykSkAr1WTq+nW2MYAZTGUDmJFGcFJPTYd1WultsYAYmeeaWecqISGMb1226HVNjYwDEyyWWMTMzIBRbrbore6YDbADInHHPGJiZQxla109tZ3bAG2wDNTOOOOc5TFABvo+rvebYNKLumAkomcccc0tZ5hzWl9XoXMiKnHM16LYwSQjPCsYjjggqunv6ZJTZGUvbewpAAkLLl5+aMUXevV06NNsklPeh2gAEJcfBwwivQ9CsJq7umNkzpQaAAhJLLh5OLX0s/S6iePKtrbGCGI6AAQSKcuDLq9CignFUA0DbCOgABAhThz9urBgkCTBSMosABAImIvVsAAEDESA6AAQJZY46dtMAAAAASBsABAo8/Ctu6xsYAAAACaAAASxxo0bKY2wASbYAgECYkgENtIYAKMlOmtNsJGQNuYVsbAQhACJnPfQsSTJQyYLpsYIEgAltRGPpCECAJTG2AAhAIAIxz//xAAiEAACAgEFAQEBAQEAAAAAAAABEQACEgMQIDBAUBMEYBT/2gAIAQEAAQIA3MMISS86Xxh1GJIgg/4Ada2VgQj/AIV8laJEL7w4vgkiMTUhEdw6EfI2236kQQjU1Nexvmewbndv1jmQkakEEeJ9g+EAt0tkiDXA1SXtEJ9wHSkkQQa4pY44peAfDewA7kQarDDDEghEeB/CYlYPCtyCCCEQvpAgg7joeRs3xRBESII7ElxPsyrats8hZggtwwnJtvJ8DCFEQQuoBJbnY+0EXzFwchbLJ5Gxh3beQLBhiIURriakLkIOJ+I2DkCCOBJL4OCV3IWx2MWBpjikhskj8dsGsG5JLg5Ai+YtDDsyWwVjgapIQbkEEfGBqQXazJ4jixYXyJZ4CCw2sIOZBCI+KDWxJLfFtvccklKlu0ZsLPiQQuJ+Cz3rZJRLEBIww7ZVts9jDDxPuGz4jqQrjjjiRAMcccUQQdwAdiW/mAJJRAJACuArijXEVxxSIIIsElGTk2/lAAJJLEVwwFElEjUDZJGpoaYpGGH5oAAAqkkKioqklEkklxSwNURYEfKQAriKiqAQqKoRJeEyxyJPyhABUVFQEBsAkAkl0Jcry8MfyVUVAAEHBDZd5jN/0Or+ltY3J+QIoJWDcbgKAJJdhhisDDZt/JBEAEEBg3AQHeSbm21pcWhLbHyQQRBBAXBBsNl2GWLJBNibWsTwHgSS7h0CwsCCDBBBuIJaPMW6CSDS1QIZcmHgDD4Ul2Ntg8ARqVvllW0FgW62tf8AW+pXVqeD2IWNgjUi9SDwHlSXa2222DmL11RqZfv+/wD0/udXOpWlqC+5gI2RBCRrqUsDDuIPGdkQR42228yY62MrCK2qaV2RAA3INVia2GqCDsl5zyXU3xfER1KVTp3BBixA3IUMsL0NbBD0nmvE222CDWCtaV2BEXA7mWlq3pavqPuY2pHoxJCUiS2MMteuodr2uUvC+R94glSJo0FcPz/MUASUub/031DqDXr/AE5kJEfTWwggOhSsqaxJR7Wvq/03vnk2CLuGH7OlcXrfT1RbbWsf69L+s2OrrkltsEGtn859YI1a6tNSmtXVv/Tra2pGP6r6htbiwRap+g3wbbcpNOGfpqVvbIlmwsTyBrbN+dttvxtt7Nuacrc6p1T/AE3sS22+bYtk2224/CwX62DkCYYSe9tttsGNttvJvqfsGzZiI8Le7cbbbbBfyzD8JsFv4KxUGxJJ/wAKkltiQYY/8KIAoAhLAww/4UQCsNRpflhjaGWBESSSS+E/QCDWwtS1rm5ubQwhY444pKJRJdy+OICD+n6ZZdKSSSSS7kl8URtt8XySSSSSSSW6SQGJrjikvMu9t8W3k+KSSSSSxSSUQqarE1xxxxxxxS7AACNl6H0JJJJc3kzEQtkiFySS3AESSXNbLpS8bb3b3AIJbyb4iJIg7iDrEXzGLNEbJcQXlkz2EIVXyjxbhCEx5OPm+D+tXTOlXRpo97b2bY+rXU/6B/Sf6/C29mD8sltxtttv/8QAJRAAAwABAwMFAQEBAAAAAAAAAAERAhAhYCAwUAMSMUFwgFKQ/9oACAEBAAM/AP8AuGu6+EsY+Tr8XnI1+xL8tXElpfxida/aILgLIJ9q6Meu/kZohCF0LRaIRGXt7i8uzJafVIRa1bGV+dLRjUpel9imxPLMcH1TRNk71TN/PUY0yrv3gFGu9uVaLz1Wk6L1IxS+TDL4Yrq/O0iFqxp9Uxb0uNGZyUf2Y5FfnVU9EKdK6JUy0cnA9tU9dnGep6eUtF6m13LjaYuomTjq4JGMjKRiZhWqJfDFaR1Mzko39nu7N4A0ZfKGbThax1XthXwuD/kBsnC5xCj4dBaJcOg4Mv8ADKE+JUnD2XizfDfcMf2uHPEf2jH/ACYzbiP/xAAgEQACAgIDAQEBAQAAAAAAAAABAgARAxIQIDATQAQU/9oACAECAQECADDGUoQQe9VANalgmUQBUMrkngEGUeCKdShUjiqqAagSuBLBlcE2Td9AQZcqijIcZQrXFQGxBwRxVLKMLFru+wIMEHJGrIcZTTXUjgEHe+AtS2Jh73d3YAHWmQ4vl8mRkZey9CTD6Wh7WWhFFGUo2MqRyIBwYYfVci5xlGTfZmJ2DhwaZNWQoya0AorhoYfUEEMHVoSz3BFIe2BhMOI4tFFFSGBBHpdhgVIdnJgl7WH2JIiOYZsOCrKVYGH0HAgmxMAHQCtdQnz1YGK12WMaGH0EEHQALrqE+aY6hQCtWRsYUwtsXJMPqIOQqoqfMYwsuXd806uWh4J9gRAEVUCged75cjEww/gEUiJFgHF+LLljPuGJ9r4EVkcMGh5rsWZszHgE8VUoDQqR2vYNYZM4/pTP9Pqcgyo/FS4y5sbCCVVcAASmQrXe7vZXD7BlivxfF3mXLjruIODCCKqvGwQ+M4xDD2zTQrXW9t9iT+DGcSk7XBMuXJ/Sv9QzRhD4XZ5r0U4c6sVEOb/TnyXYbHkhhP57u1bCTlz5Gfa+Qwy77Xfhd36gq+zw97u7u7222v8AEAICxPnd9Lv3ECKgR0MP4rv2WIVQlyy6661X4L9Vf6/XYnkitaqutVrVedd7u5d3zVVWuoWKChxnHpqV5qoOKrgQLXvd3ewyFyL6XfcS7P4zyIcKfz+F3d3d+98XcsMM3+n/xAAkEQEAAgEDBAMBAQEAAAAAAAABABECECBAITAxUAMSUUEiYP/aAAgBAgEDPwDS++8vr6c1ewQ9C+hrfejpWlbzlG29Blbnh06XCYw0db9JW4g6kGXrXHphUt3ux0ElML5Fdi463tblmhyljKhCDAho61zA7RAhxL0vvhMZi+Hj1wHGOlnEqD3kfEWXZ23u1K8zGYpMf7Pj/ZhjB8Ry6O+59V7RoMO8kv8AulkslMvf9sZRzWXBaYBRvsmMOd0+24+MjlVT5D+wzOvOqAUzHOJA6scMm6SfGFk++VnjZZXPClmMxr/OUXckeck6Tq/8Y/kYMr0uKTAJiS/S1H9j7khUxmLPz07pikY945KzLyRfPp8iZz//xAAhEQEAAgIDAQEBAQEBAAAAAAABAhEAEgMQMCAEE0AUUP/aAAgBAwEBAgDDBJDFPu7xdrypAWKrgidh0jFwe7ikiY9Xd4uyuEjLcqUb26iUFV8JIruyRIkTJ30OJTj1Fu7ueWYQjGqr6RMcexuMiZMnvuS6SUf51jjK8qIYeNVVr82SJ77koyjLqu5PcQD0qQ/VB2SElHlJDfUleoph6yg8bDTTUArXVyyVkiUeTa2S31APZJRRimARrHHGODlZuT2WxGKI+iIxRNSNY9VjGu2J1XQiSimHo9Sxyg+lu7232HEqqMjhh6OOS7tVu2W8p7WTW9ozJ7GEdTjAw9XJdqyZbM2V3d3fdxYkcDA9pCrJZXeKt38XmukIRDDD/AkxyWSx6Vb+giDDI8ejAPaunJRlFEcceta7MjlBxB0h1d5bL+hIfqqY6yhLheCXE8f8I8H8eTjTKskJLjnFxy7sbWTlw5CV/dVVSg8ejFxjOObLZIeKXFO7y8Mtxx6MjIbu/GkePkJrNyWXhgDx4TjO/mtHj0CPu5ynNKUv6MsD8/BD8z+aXFh0YfaUd36TOXh5OGXHxcP/ADx/HwQymPJx4YHhXd+VUk4cocfBCMNa7YvB/IhrXhVa+qT42PHh4VVVVa661/iVxjGJ6V8VXu48k+TeEz/w5ZMZmQIS222v/fPjOH+Ogdje13f1e1+l/dV1VV1d3e22zLJJyx5jl32Jd7bY9XfTjMb9qqq0lxHHFr4rX4rpxiRP8Th24fo5P1fdVVVVVXtXVVlSi8D+T//EACERAAIBBAMBAAMAAAAAAAAAAAABEQIQIEAhMFAxEkFR/9oACAEDAQM/ANFZR2yrRpSjnONhZMY46FdC1XZCE8JQ7xi524Jzbwl7rQ8lhz4b2pyY1g9qLc9Cyas8XvxivLYyPCY2PUh6LKhq3Om+9u6YoEQ9SRrN5ITVoa612yT8KhpjfwqHIkKJRGcnC6W7ND7kxr9HBDtI5zhnNp2VZEEKSbRg4mLMaJ6Fqcn6Q0MmzY6vqImShjoY92SXapFUqUUV08UwytOGfiof28n4ud9jZU2ppEsk1DKRd0d6+kMULxUIXir+iGvjJifFqpqZVJUQceImIRBHrsqbKytH9E9FaiEyStMpmBC7XspFPxiXzxpKWUH/2Q==); + --theme-background: var(--dark-sky); +} + +body.background-settings-workplace-background-image.background-settings-workplace-theme-dark-in-the-sky.theme-dark { + --in-the-sky: url(data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gIcSUNDX1BST0ZJTEUAAQEAAAIMbGNtcwIQAABtbnRyUkdCIFhZWiAH3AABABkAAwApADlhY3NwQVBQTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWxjbXMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApkZXNjAAAA/AAAAF5jcHJ0AAABXAAAAAt3dHB0AAABaAAAABRia3B0AAABfAAAABRyWFlaAAABkAAAABRnWFlaAAABpAAAABRiWFlaAAABuAAAABRyVFJDAAABzAAAAEBnVFJDAAABzAAAAEBiVFJDAAABzAAAAEBkZXNjAAAAAAAAAANjMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0ZXh0AAAAAElYAABYWVogAAAAAAAA9tYAAQAAAADTLVhZWiAAAAAAAAADFgAAAzMAAAKkWFlaIAAAAAAAAG+iAAA49QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAAAAAAAAAkoAAAD4QAALbPY3VydgAAAAAAAAAaAAAAywHJA2MFkghrC/YQPxVRGzQh8SmQMhg7kkYFUXdd7WtwegWJsZp8rGm/fdPD6TD////bAQQQAA0ADQANAA0ADgANAA4AEAAQAA4AFAAWABMAFgAUAB4AGwAZABkAGwAeAC0AIAAiACAAIgAgAC0ARAAqADIAKgAqADIAKgBEADwASQA7ADcAOwBJADwAbABVAEsASwBVAGwAfQBpAGMAaQB9AJcAhwCHAJcAvgC1AL4A+QD5AU4RAA0ADQANAA0ADgANAA4AEAAQAA4AFAAWABMAFgAUAB4AGwAZABkAGwAeAC0AIAAiACAAIgAgAC0ARAAqADIAKgAqADIAKgBEADwASQA7ADcAOwBJADwAbABVAEsASwBVAGwAfQBpAGMAaQB9AJcAhwCHAJcAvgC1AL4A+QD5AU7/wgARCAHgAoADASIAAhEBAxEB/8QAGwABAQEBAQEBAQAAAAAAAAAAAQACAwQFBgf/2gAIAQEAAAAA8dUszMzMyzTTTTTMszUzSzSzMFFT8XMzM0y0ss0000zM0stTMzMzMmWKp+LiZmaWZZmZppmalmZZpmZmZmoqqr4RLNNLK0yzTNMzS0szNMszM1NEVN8CZpaZVpmZmlpplmZlmaWaaZmoCq+DLUszK0tMzMzNMytLMyzTNLSkWczfBlppZllppWmWmaWWZlZqWWmZqACvhTUzMszSyzMzMzNMssrUsy0zMQEHwmpmZmaWWWmZZmmZllZmZZplqrMUfn9TNNLSzSszLLTTMzLMrMszMzUBUfntM0zTMtLLLTLTM0syysyyzS1VBUfnXS1M0tMzKy0tLTNMsrLMssy1VAVfnHS0tMzTMyyzMzM0zKzKyyzMzREMfnFWZmaZlpaWWZmlpmVllWZmaaoqj84rM0tMzMyzMtLM0zLLK2pmaaaqor822plpWmmWlpZmZZmmWVZWaZpqmKr80qsszTMzTMzLMyzMzKyyzMtNU0Vn84qszNMzMzUzKzMszMsrMszMzVMXk8fgVZWaaWWmpmZWZZaWWlllmZmmqvifnuP19KulmKl0szTLMsssstMzKyzTPO60x+K+Ry/RLp0rVKC6dM6tMyyrMyzNLLMs35ry31Pm/o/YtH5j8x5/0utOVW0kVl1rS66b0zMsyrSzM0syt4/x3h3ej9V9PvXh+X8L5PH9Gaszu3qimrWta6d+iszLLLNKzTMzz5eb8t83O/Z7D9X77z/mPgceGfstOpd6XTVad76d+m9stMrSzLMzTL4Py3n8/ny9/R9D9J7+nh/KfN8uOWPqaV1Ot9HWm09Om+3TppZmZmZpZZZqWx+I+VYznXXv6fZ6u/n+L5M7xy9rp1tdb302669+vTelaWaZmmmWVmaZ8H4Tz3WxkTfr9G/l+bLY92tOturpvpt6dunXW971qZpmmaWmWWaZvP8AA649nnx6fg/P4Z9Po8eOHPNn6KulV1vXTpvp07b69N706ZqZmmmZWZmmxjrqc/J+L8/wde3j4cgyfRVqlda3rW976dO3ftvpvTpppmmpZZmZprn+W+j0/NcExx8nHmRfa6+bI1M7db3re+nTt27ejfTWmZmpppaWZmp4/lvDwxrNHl8fLAN97WMWVp6Wunf0W++uvb1NtZmmZqmmWZpz5vx2unm44pLPHycOeSvu6resa673ufofc7fO3rLvTNNMzNNUzMzXzPzOvAWsZqrPDzcufMj7g61069OnTff0dPZ6tcZpabj5jj3+hummqZpo+D8zt8vGclZjMnE5efGQPtYJ3vXb09u/2s9d6rz+fw+zbzx4/m8jfb0fqPRNNTNPL5vi+V80ZZs5MlccBxxkzfUcTa3t19f6vu6TZ/LfP48tDrp1zjXo6+79Pppmpnj/AD/zEWpdTkzgM8LOeeTIe7ROunb1a5+/7Xq9E3H8T8rJOnfXocunr9f1N/Z76pZp/P8A4znp1MpreLOLHPjnMczIepl326fqNY+xz9jNeD8d8rDojXTerp6+3Y+j+h9HD0Mzef8AmnJnVqJsrnOMccZjEZura33+j5PofT4frK0yPm+D+d4HDBa1q3331129v6Lv7dScufg/C8853pmoxnWM2eWCMhZ9Fb6en9H9DfpvWmo3Vy/KeL5Pn5ita6a766e31/pfe418f4HDHh4+d7NZ1txgxztZ55iMzj9H5c+vjv8ARfc6aWZrl1/L/A8vDGMFMut+zrz79/R3scdPiufh8+9aA1psnPnlM5hTIffuly6fb+l9TzfL9f0u1V+Zz+e8nI1yxkrS9++zj2329PTXDlux4fJzrpE6nOc88SZkqL7HTXLO+nX6fPz793p+t768H4vxc+OrOM5LT0td7l0fQ3Xed83y+bjyNOU3ZzYyHS5kUmvfvvnWtm47O/X776Pi+Dy8HIyGQnXUz06Ght+rcYufi4ZlzY1YrG0sgUNe56dE6ZtZ69er00azz8GOfEM2Rd9InW93bmhD5+WBsmaSGzQgLH0bnrTq3nW+mjW+T0xy5c+WAbJWtS6ar1cubdeXDlmiIQaKYqm+rnGGjXSzrrrTi6XHFz545la1BLpNbu3q5mDzceeZCKqiqqar6EL3cZxYnVvWt3PGTmGMAu3VW9d97tGdefy8sTrOaxMwlVSl9ChdWoyYzTvpAZ55ozjKy7nfoM51qOHPE+jo8vPvrzx6+2PK1g6Yzvt36+EmqaEKmgqIbBvWsOo3vOZC5XVetmnVa6Vu32xvPXp16+f8xRVNFTSQRFLNVarW2zWHSqZGtauriZ1rT19P19eH8dFVVVEtFmiqqpnXTpb3u1vOUqmgznPVq3Rv2+7p05Y/DVVVLTQ2ZYolqZlZzbOdFitS6IYubUrnz10pmmmSaJaWZldOl1rSkFkDBFUFkqiAiOdLaqWakqWabVpXWnW9O1MwYM0QQWYACAguM6JZdVJDZVaa060rpdW5qjNmrNmIzAAFARwVVi1vWSdc0pJZnS6dPRemR3BiCyRBRmLNmgIODLtZN6znRVhrRJqWdrt2zsaMhmKCsOUMkRGUONaF2s7isaTEC6NOXZ0tO9VvWbLvOcwEOUAs0ZoCLhnWlaTdorQkRS2hVd2nPfnZmiKy50NjOsuctmixw73kddLctobWd5AUtTnUs6tLrazg1VjDkzWVrI4bFXHyXbr/AP/EABkBAQEBAQEBAAAAAAAAAAAAAAABAgMEBf/aAAgBAhAAAAD74AAQRCEIgO1AEAhEQRCA70AQgREIQiCu6gQQiCEhEIK70pAiIIRERCA9NAQiEEREREA9QBBEQgkSEQD1wAREQhCSIQD1oAgiIhESIQhv0kKkIIiIhEhCOnfQBJCIiJBETt1nn53vrVpSJJkiJCITp0015+XpvPqLTMkiEIkIX0xNSyS0trOZlEEQkJeka7y4xOkW1bJnEkRBCIb9d3OXPLqZHLW5mRCBES9/UpOXLLrdOeODprUXprHnhCa6ejeiJMc8zqqzli9OhdHLhiC++qEnPOcq1pjnF6aTWmrz83M17ltRM88yLbnEg6dc5W63ccb23nGqrOJmI6Ezvnzd9SSW71NWnPmqs5QjdLSaZyjVq6pnkQhAqrbaucSVS3Vk5wICNLVi2syRVu1YwQIQ2KFgRVBKqrCTjNgoAKAFCJjM3QClLS0QgSESUChVVVARCJDNCgUqqAQREMUpQUVQBAkTN//EABkBAQEBAQEBAAAAAAAAAAAAAAABAgMEBf/aAAgBAxAAAAD5oFFBVC1SgDhApRQKWqooDzBSlAqqpRVCPOApQqqLVKWkjzFiilVSlUqrRDygKVaFKq2lWkl8dAVVFUqrVqqQ8YUUpVKW1bVBU8YUUUqrVVbRSmPIWoqiltqqqqorl5NyKFqqtWrRVrh577Ok83DcgC3WqpbaKXly4nq7+TjoCrq21VUWqTwFmri2iK1rVtoUqrU5VjyjVWQFvTW6UUtKcvJObWqGrXec7u1SlCp5/IiW9LcyXr29LjjNueWd+qqGeXlzkhq60yhr07cOEIvo79KM/LIFturco3162zzciQd/V0TPzISi6ttid+mrTj5pSTLt2nHksC6Wrcpvrjr1vk4rSZiVF3CW6KMhG9c82iSElN0Wy0JCRZDSwiJF3aoAiIJC1USSGtWWooXMAgUQAICrr0XzBAAAAEqnXd89hCCCIAKKFNIEIEQAlClK0ggIIQABVK2kEBAkKgoUXef/xAAkEAACAQQCAwEBAQEBAAAAAAABEQIAAxASBCAFEzBAFFAVBv/aAAgBAQABAgDK/MuqX1WVhZSpYSWEuiWZD/IXwWEsLoqSS7pICj+FfFdl81hYXdUsLoklSpJf5Kwkl3SSwkuqSS/Esr8KyuqWVhJJJfFJLC/AsL/HXxWV1RH+Yvkvuu5pZSWV+xUv3pUuiS6L7L6pflVL4JKkkspfrX+GkuyohJdl8V+VfnXdUkvquy/Sl1XzXRdUsLKpIfnXxXZfjWUvikl8F8V9F+NfJfRL8S+K/wBBL6LK7KkvyJJfiWVhUspJJLCVLol+pZS6LuvwIn6Kl8F+VfqVKlXL5XH5P+avxLqu3P8AIcnlf2AsSbb6Nttt/jX4V9Ll21e7eSjIkg9W22+jEtttm28L6r8/kOX/ANW15O35m/zOHB9fM2ZmRbFPbbbZvD332e2wLBYIIoBfmS+nK5nK5RlG4TZhwuTaGefet87ncyRNb+wXfZtsJifsE9993h1s9hJ1ERA6L907k+Xc8jz+US41AwkIcGWL3I5/kjOcyXvttuJbbbbAt0C23gUKAjGMQAF1WF+Fdb/keRy7nIldMmKgRLi2rXCt265XM53JlUqMDGm8vAoZFJaiOkbIsDjxsCyIJJJYS/Tcl5Ge25lgEStzjzOP5bkeSteX5PMu3Tc22JIptjIoUKFAaoAQjbEAEsJKksrCXRJLCyqVLPkDfJiIW7UrPrNrV0KsSlV6c4kPbYnoCOgIInuJAiYkCKYkxhLKSXZL4L48m3Dw3/GPgrXip+J4niOT4rk8I2JRFWYTtyoykTk9mxLbbYS3jITFwXI3Y3RMTBBBb7JJfnUo6gJVIc6V7k3bc7dozvSlLoT2bbYltsJbiQkJiYmLkbsbsZsSEsrskuq+6q9OPkeH5O55m7fexBhcqUpSe2zq3GUZR+IoUKFChQoACIjGMI2xAAd13X4Qav3uRzHK5QBGCbhlRLy44uRFs20AtdBAW9BbFqHHHEPHjxo8X+aNiFkW9RDVJfs35163yIcu5ztpmmycGpVMEHDdCWxIoEw9cbYtCz6vT6Y2rPGscecDaFvWUBbEUvwr7c7yVvm8zntvYl4bZMjMGjR6AMS22jITBFChUKEYCBhcld+d6+PJDyk/K2eeJ/jlO754+Zh5yd04OTTezbMjNzo4SRDNN7CQmJxuxuxnaqNiVmMAM3rsOVLyg8p/04eTn5UeWvc67I0JCfss3uPd+9y/f8xc/wDQcrypkDT2ByTRptkyka2lRpvO2xLbBBB9kZ8S/Y5cJdH5K+Obc5Qve4Xvd7he9pkK3hdjHi8iB+t+7yOV7HlvDBycuRMttpGjlvbbbZgigIcc8X0W+ELXGhlXjzQSabEthITjMSMtoytXReteRt873jIPfz85Fgt9GahTwaRo1KjlmiaOW22DGoniciUbINr1DCWOR47ncCQwqbEhc2pwlGUZi4J8fm2uUoDvy4XIgYBbeGJSkJbkuRMiSScHJy26jUYRsC3x7gu8MinsMArVXuJ5HwV3xY4k7JommDtuJCcbkbnuE7U4XOHy9IjJPv8A7fKX5USZbAtt06JoVuZ7syJNNnDz6tNYwjGEfHwj40cH+e3xKWqQj0u3uR5KXk7twlttt7CW9upiM4XIXvH3RdMxe9vO5V0m5/TdqVSlCm9ttxIFyL2lIyB2JJbbw258Y29PTUIeOqJ+XurzHkP6rl4k0aOG26YOtoSFQkLsL4vcjmGXt90+STCN+pTJEhLbYyYltuS3IkvYy2bYNHoZg+2V527/ABuZa8gDyuRDykPLWb3Qi7eueT5nLEZUMGkRkYAhFxldoETE4ziRHa7QJpGd2ZNOMtns3T2MtjIkkFGnhtt0JxuGnQETDkQ8nPli5txebPy1jyAOLvH5RkNyRTNGlkUAAxOEpmJIgRL2e2Erk4Y2q5bIkDgEjAL2MtiTJnABJw8NsUxKMsRLoSMt4yiYCNQ5v9lvyd7mXhOErfrRLNE5FAgyFROxp03ExmRv7PYJ3DOpHApsltnBxGjSb+QMZ7bCQlKhMz2hT9gvQuSu+0XRK5UwZykS26NNsSjIltgg0DGUrm/u9uxM6lUhTBZLbdPam2/l6zFg7PYTJUa2EziMpz3E4zM5UYStkHqQsAttvbbbbaNStoSEpTJlTw28t/g2ZFLXEZCexnGYnvs9qjRM5VKRJEhTbYOuqw8IRFo2uPS1lAWJWpEk5RH4V1dJRogwNv16GFCW/sjPZgkkYNE1poYqmxLfZ4FAxoS3YMpQnK5KciaS1EZRSSSSWuqSykkiEsPZ7bPajEx1oSEtnsyCNU6INEVrqsPbaJgZnZiRnEzluZUgIWo2pQNjUWv5DYFmPFhxbnGlaFk8ccWfHjYjxp2NBYhxI8GPj3s9tttttttttm26b222222eHRjqI4QjqQwQTgFk7SogREdajOU3tQPs3YoRNLfaNwy1FSq3bZMrt282222222222222222223u0Ma6aes2TAQ9euunrMCKToA0DEskS2b2Et3E2jbt3+HLx7bbbbbbbfRd3lvoox1EAAKQrY0m6XVYJqIxroLfr0EVZhECv6ZeTl5J7Ntvu8vam9ttt9m3s8Nt7Na6+k2NDD0en1+vX1er1CGmqGVW2xKe/sF43xyf65ckxSbbb+CSWqSWq111S1QitVrrqI66iOmmuuqMUlqbXp9Hp9Pp9Pp9Hp9Pp9Pp9Wmuq1SSSwkh2VJKiKSXdUlQwKVICNCbbpLJykkkiEkl2VLsB0SQApAdEjSoCkqSFIYGGq2dCNayO+5lTJdHDwckKkQlSysHI6IUjQIkC5Ewy6XZtihTGBLAoFChiJYoFHsaTZJkDTp0TT+gNChhEa6gGGi1oyETgF0aWGI4BbdCkJKkCMRoEg4S2fQZdIURR7Ho8OjkEES2BeuxmSQSC6SVNuhTMgW6BbBoSjLbZ1IxmZCRoFtjDdOiTQwxTfxJYyKFPYgAitjgA4BPUgAYA67ijWuBQgQ0JGVSkZiRwSKdNujWxp5FJ0cOUhdBrd7ugVRpIRe++xy6Rw8mVOgBQqWIxiAMCiKjbNsWtNDExQjqiNdNUzQLNOVCmThu5IlWzKX//xAA7EAACAgAEBAQEBQMCBQUAAAAAAQIRAxAhURIgMUEEMGGRIkBScRMyUIGhQlNgYnIUIzNDsVSgosHR/9oACAEBAAM/AP8A2p8Y1b/w+Hh4PW5dkLEk54jSrpf+HPBxVhx6LqSxZttmLGNKVL/AktXyYeFG5yUUYeLfBK652vE4rbt2P/A8R4zStRjojGSriMfjTnN0YdvijIWP4ipSbjemyIRwo8LTW/PGMuPiVy+QX6nh+Ghcmr7I/FnJ0lbyZJ9CUZKTRGMOF0ludXdp8k8HBbgjAjCMpSbml/JLxMnJl5L5Nj/SYw6tGFCFt/sYS4eHU/HxpyWivkkqVCcbkTnJU9CSwowlrSq84YUJSb6E8bDcOwy+Z87GPy2xj/Q8DBm4N2yeLjSlx9ybSXFZKmk3yU7aHKqOKcfxKowVqldigqyhgLcnjztN1sPJsa+SY9iTGPJEV+iVFq6dFY+Ik716lO8m+XhdsnF2Y+HLWToxsXDhWJW9aD/CWHLV1Vs4oKOi7i7Z6ZL5CxIiJfpLjgSaHKbYxscuxLZ5SXZkkMYzinBPcisZpKkQ4aVXlXyizsr9IWLhSgXbmYUlQou/xLRhxi09TF1SqicMXixYWqMNxuC1JYauifXhdFZS4k1KiSbcpM1yv5hMQv0eyVaI0yWVpmHGMHLfocelKiE7ZT0NxuCi/nHmtxb5X+irDwsSe0WzxUE0sRkUuHGk29zwyhPgUnKtDExZXObk92PKLIbFeRSsjJajj5zHkxjGSJlIY/0FZQwMKU5dv5MfGtObp9V2EurLtLKys9B6+VaRfca8pk5dET7xY9iT7DKZQu4qWa/QIcXBxLi2vUeB4TGmutUv30MTCk3Ccosx4Tc440+LezxGLBQxMRySffK35F+VeaklTJbDyQsmNsuk0YUIqoohwttCbegkLNL9Dh4WX4ag5T4fYx8HGeLGVzfVvWzG8U/idRXSK5NPKfPS50+RC2IrsJISLVJci8jCwFeJNLZHhKtza9KPCu9ZexDphw/dkJOp6EWrUlXykYRcpSSS7sw0pqGE77Ns8V+Lxpr7djxSm3NQca/KfiScm9W/NofyLNLZF9xykkiTijhNOVYablJJEJRbSbMSGJXCqMHgTfU8NVts8LJNuTT2aMFOowciLX5KZiTdRfCrsxcSblObk9xpDyapjckQxYaXa0fyGFhf9TEjH7s8Pg4rw+Fyp02hJzUMC1ejbMbxUXCdKN3SQuR+Y38loM1Iww5W/ieiHKLUlVd2xTiny6XRL8a707E0qTHNUz1Huep6jzvKKISVNCVOLsxMOaaOKKluvOWDg4mK02oq6Ri4uLKU5ttjflX5OubfnQ4SUv6XqSUn8LJKVUyfwtp0QhgSfRuNE44MYz68s0lwr7k1iST3Hm+dsZRTGtUjHpNtM8S3TaevVkZOMYNSk126DzT8jFw8LA4HJJuSdP8ARlaMPEwoWqaVM/5icG3BqtSGJjVXxGlehL4b1iuZGBj25Q1on4fEaq12K8pZal9z1ympJqbX7mLCUXLEckYOKk1PKUJSb1T8jCn4bGjitKLg7b7FNmvm2+W18hZUHp2J3orMXCi48L1IKGsZ3Q/+Mi1dXkkRzT5MLGlGU+xCaniYL1WtHjIJy/DfDuY71UGSw1FyrVeVpk3SF3kU+o4yHOKg1brQxJzdtlKuStWzCSb41SPDd8VGHjeBxoYc05UmOxLzEa5UXnflSGhjeV0SjC5O0zDjiSkno+xGMk9iLi1RhYck4rNbZ1yIw8KEpSktFZiznNt1G9ESdpl6LovMjNHDTTKE0ShrBtM4sG5St93sQ0+Ja9NSKvVELac17kF/UqJz4oQ7bMxU6laJVZLo+hUmaZW/kE/JWUXqnSIi2Kw7ojsWzFw0k+Gi0vLw+JxvKcJfg4dxS6sn3m2ORfmS2ZS6Cop5zXSTRqneqJzkuKbJyjaZPvJ0SWqZOSpjQm25Eey6Lkt+RfyU5aNuhEY9IqyUlq8lB/lR4dq5KSfoYLlFNNW6sTVolgQbUVddzH7qLMNupYbTMPGjcH91ty2jGwp4mHFOTb1k+xiYGDGPFczE8TK51YzXzIqrEuaziVHCtWjo0NNvsxtpDi1aE2NXaXLr8hWenPQhNZSsscVRJIx1hpRnw6GJiQqc23fcqWrsV8SZLAm2ldqjFctJcP2MHEjcmoiaTWcVJzk6VPUTxZJXSKXKvMtZKuuSGiW5J0dh2mWmn1T0yjJaohVkSPI8tPmdeRclpj3OJHCkjFjg/hRnXr3PEf3pMw1hLjTc1t3HO5X8N/lHOfElb7kXBJrU9SQ15SzrJCayY8ovqQl0bscUk8ovqiN9cmnz6eQhfKMaLQyQzhQx2U8rVCjojiTKeSeSyXkR5bKYiF1Qk2kNDztkhvmXy7yp81ollTyt5NFxpjzdsaOJjQ+dj8tot2RnGkSTGPoNNM4hLlfzSeVqxoeTWeuTztFF5NlvkTK5kxMZIY+RkibVpE11Q02IVtCZxChu2J/oMRJCI7CYyRIfLfk2LJoazY+dotPJEBGgkyrobTvmY11z0+UQhc1CzQs2hj5VzPke5IkMYxjye4lkxruM15mcRwsjLqjR0xljSuydNpE9i4kK1IrVMaJNdCRiPomYkOsWTl2Jtk4Omh7E3/SzFf8AQybWsSd/MPNC5kIQryQllHbJPLUQt83tlEgR2KLzjsJdiRIZJj7s9S9jhVcKE+qEqojL8yRASSp6Cl2RGVUo/dnBKmk0KT+FMisOMHhxtf1dyU3bfb9Ivk9R5SZifST2JbEtslkyWxJdmMa7ZsebGPkYxsZPtFlNWjCxFbuzw84aNxktiXDpO39q+UYxj8l5seTyea5KyTI/Ty+h6ZemUdkLkY82yWxLYddBjRdWj0F9KMPDpSnCP3aR4RSp4+Ff+48N/wCpw7/3IluT3JkyZMmTJkyZMmTMTdGJuYu5ibmIu5ifUT+pk/qZPdkyZMnsiWyJ7InsiexPYn9JPYxPpMT6DF+n+DF+n+DG+n+DxGz9jxO8vY8S/wCqXseJ+qR4n65GM3bcrMWWrbbPE/3JHif7kzF3Zi7sxvrkY31y9zH+uXuYvqYvqYq3MddJy9zG68UjH+uRj/XIx1/3GY/9xmNovxHZjO/jZ4hKvxJe54n+7L3PEf3Ze5jvriS9zF+qXuYvaUvcx/7k/dnien4k/c8THpiTPFNU8SZ4xKljYnueMu/xsT3PFzVSxsRr7j2JbEtvkWMYxj85CFyvL1REiR9CJEj6ESJHZGF9KML6EYP0owfpRg/SYX0GF9CML6f5ML6f5MPb+WYez92Yez9zD2fuQ2fuQ9fcW7+WQs9C+rF8it8kI9D0z01ojrWSpJ1bRGkqI0vhVmmlHorHsslsj0QthbITFsREIQhCEvmNemTK0cc5vRIabQx7DHmslkhCy9TZjXcdCyQth9kzTVMi0v8A80QhtLo0Uf6SMFb/AJdHw6J+9EWnTNmJacQi1msvVZ+ghCExC+VvsV0RuLK+7F6mnRUVonlpZ6DPUe7Pvk1mxcrGuiH3E1rFMvZMkn+ZPLvUfYuk6Z90Ym6/eidu+El3imh+i9ybQz0f7jV2menJrV5IV9ULK/mGxvo2NdH/APEVmnUWwu2h6sVVwqyV9EkiXYru0JpUzdWLsxbjyebrsemf+k3iz0Y+0b/clX5E/wBytq+4n2tEWjS1K/uxuvhtejJdoqt7Pv8A+TukqJ7L3HTtu1sS13+xHZM0a4X7kI0+j9WRd/ENayYqepFCXdEZdGPujTmSPVWL5L15GOrQy7pr/wAC7v8Akv8ArO936j00RXbTbJpLQfThJJaplroLZiH5CG+kb/clt/IqbpsXdNGjG26bNRIrq1f3F2SY1HVqjt8K31I3piO66LUfVv3RxWn7Uav81GruGpevCv2VfyLsmOy30E1+RnoaZOzVs1yea7cllHqIXnojuiLpOiO6E6EtGiPaKH3TNLJvuiVfmJbv3KrW/wBxCEuhTy9D0F3Qq0WVDJOtRGyYlrf8Ggmqfvk9NClTirF9X20JOWjVepK/y2WtYtoa0blQqd4c3+1mHf5FYnomv2o11ZdfCzXo17l0kN6X0Ojyruy+jNdGIeWot7Z6kWJaNcmvOoq7G5clpiVaifTLcXaRvZfRM3Q6f/2dRdW6PVF9KZr1kv2HRLdIfI0qsQr68lPWSz060byZp1Z6iNfzI7JL7j7kmUtU0rLa4bruJR/LIXVzkvtKmLs5PX6i49/s2Qt/ElvdMw29OBsf5U0lslQ7qn+4vpafoQ3ZuiKbdKxMSKPv7l7+5ZG2qQvQ2o3aza3Y6VRG+2VC5Fw/ceVa3foJH//EACcRAAMAAQMDBAMAAwAAAAAAAAABEQIDEBIgITAxQEFRE1BhYGKA/9oACAECAQE/AP1C/wCP1i5f0+mk2Uv6DSx+WiY/QscU6kZppvZKuGGDxY37/DTb9RaeKKLbUzTUEm2Yaax7v1Gx9N6KcjkX2WPdrbuRncpMW/Q44rukNlG/BCE8NL4k4z8uQ9XI/NkYajfYm7fivQ0h+z09N5j08MlIYaeOHptDJjZehranI5GeusTT1ua9Dmch5F9gk8nEhaD5LuocV9ISSXZdDMh7rdpMeI0Wn40/UxSxUQu5wbOGX0cMvoWnkxaKndi0sDLSXqh9vAscn6Ix0c21ewtLBfAsccfRTrbGPelLu4NL430/s5HI5HIpSmpg8u6MsHj1YLlkkLsXw0vRSi2hm40N3dZNCzT3osilLtnprI4tNp7xsxxy5Ls/Xa9VKhsfTCbZNpnNjbZejHT+WypDe1KUTPgRngskfg/p+D/YxwWKmzL3ORTkUbGynIpetpMWHc4Y/Q9N3sNNbYzL48CZewmUvRkmMpSlORS9dLtSl2iY8MX8CSQ+pPal2RSlMum+W7UvS/DTuIhGMfmnTNu5drs/AtqUo3vxGmTbixp7x+Gl6KUvhpSl8UR22ZlnxMdTBlKUpSlKUpSlKUpSlKXasv8ACl/hf4cv4cv4cjkcjkcjkcmcx9x404L2MJ0zaEIRERCIhCIn+LX3166Up//EACgRAAICAQMDBAIDAQAAAAAAAAERAAIDECAhEjAxQEFQUQQTFFJgYv/aAAgBAwEBPwD4g/4NeuXzy+DWq0Xw6/wq7ahuAV8IOdc1jWoU5MUXdUUW1dvNcJAzqt9w5LHgmUIIC0JQJmXJW1dHHq/TLZfKK+OYc1oeSzoJixmpcJFQzMmU24Hjcoooop0wVnTFFqoou5YqpMPJ29dknOuxCJ7LjjjgPpCGFP01HtBhp9T9FG5lxVAfj0IJgJgcHosmQUC94MtqluXy2v51EAi2A6dM6DOgyn43V5mTAKJGfrnRBWLsLsWsKhmH8gGp45nVb7MNifJ2iDcCpW4lSGIlDlIlrGxZhKhyVEF6fc66f2hy1hz2fAn77yuc+DByAewb1r5Mt+RQDgsy2bIfeWvaw5L3qCDejKmwPEqbe51zHgDRRbcWQV4MrkrbdkPTQmFnuDVbAWJjDBgAGpqD5lsVgyPGxbHMeY1gsLAEasDyZe9em3IPHYUWg7FKgjmClYKgbbZgCQBCSYoootFrjydBn8jjxP5P/MvfrLJjO1RRaKKLYtlbkQ5QoMlvuDLVcwEHwdL9VPfuvUaKKKKdMUWg0XaFlBkI95Ym3fUGxRbF6Edlbh3n6ZRaAaOOOOOOOOOPvrsqKKKLtvSspj65fDl9uRFFFFFFFFFFFFFFFsUWzjRD7iH3EPuIRRRRRCIRCISpAgyrxP3W9YzGY4zGYzGY/wDLL4UQVEU//9k=); + --theme-background: var(--in-the-sky); +} + +body.background-settings-workplace-background-image.background-settings-workplace-waves-light.theme-light, +body.background-settings-workplace-background-image.background-settings-workplace-waves.theme-dark { + --wave-background: url("data:image/svg+xml, %3Csvg data-name='Layer 1' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1200 120' preserveAspectRatio='none'%3E %3Cpath d='M0,0V46.29c47.79,22.2,103.59,32.17,158,28,70.36-5.37,136.33-33.31,206.8-37.5C438.64,32.43,512.34,53.67,583,72.05c69.27,18,138.3,24.88,209.4,13.08,36.15-6,69.85-17.84,104.45-29.34C989.49,25,1113-14.29,1200,52.47V0Z' opacity='.25' class='shape-fill'%3E%3C/path%3E %3Cpath d='M0,0V15.81C13,36.92,27.64,56.86,47.69,72.05,99.41,111.27,165,111,224.58,91.58c31.15-10.15,60.09-26.07,89.67-39.8,40.92-19,84.73-46,130.83-49.67,36.26-2.85,70.9,9.42,98.6,31.56,31.77,25.39,62.32,62,103.63,73,40.44,10.79,81.35-6.69,119.13-24.28s75.16-39,116.92-43.05c59.73-5.85,113.28,22.88,168.9,38.84,30.2,8.66,59,6.17,87.09-7.5,22.43-10.89,48-26.93,60.65-49.24V0Z' opacity='.5' class='shape-fill'%3E%3C/path%3E %3Cpath d='M0,0V5.63C149.93,59,314.09,71.32,475.83,42.57c43-7.64,84.23-20.12,127.61-26.46,59-8.63,112.48,12.24,165.56,35.4C827.93,77.22,886,95.24,951.2,90c86.53-7,172.46-45.71,248.8-84.81V0Z' class='shape-fill'%3E%3C/path%3E %3C/svg%3E"); + --theme-background: var(--wave-background); + --wave-background-color: var(--background-waves-color); +} +body.background-settings-workplace-background-image.background-settings-workplace-waves2-light.theme-light, +body.background-settings-workplace-background-image.background-settings-workplace-waves2.theme-dark { + --wave2-background: url("data:image/svg+xml,%3Csvg width='100%25' height='100%25' id='svg' viewBox='0 0 1440 600' xmlns='http://www.w3.org/2000/svg' class='transition duration-300 ease-in-out delay-150'%3E%3Cstyle%3E .path-0%7B animation:pathAnim-0 4s; animation-timing-function: linear; animation-iteration-count: infinite; %7D @keyframes pathAnim-0%7B 0%25%7B d: path('M 0,600 C 0,600 0,150 0,150 C 81.35641025641027,172.9153846153846 162.71282051282054,195.83076923076922 252,194 C 341.28717948717946,192.16923076923078 438.50512820512824,165.59230769230766 511,146 C 583.4948717948718,126.40769230769234 631.2666666666665,113.80000000000004 703,116 C 774.7333333333335,118.19999999999996 870.428205128205,135.20769230769227 957,154 C 1043.571794871795,172.79230769230773 1121.0205128205127,193.3692307692308 1200,193 C 1278.9794871794873,192.6307692307692 1359.4897435897437,171.3153846153846 1440,150 C 1440,150 1440,600 1440,600 Z'); %7D 25%25%7B d: path('M 0,600 C 0,600 0,150 0,150 C 93.78717948717946,117.86410256410255 187.57435897435892,85.72820512820512 265,105 C 342.4256410256411,124.27179487179488 403.4897435897436,194.95128205128205 488,191 C 572.5102564102564,187.04871794871795 680.4666666666668,108.46666666666668 760,108 C 839.5333333333332,107.53333333333332 890.6435897435897,185.18205128205128 968,201 C 1045.3564102564103,216.81794871794872 1148.9589743589743,170.8051282051282 1232,152 C 1315.0410256410257,133.1948717948718 1377.520512820513,141.5974358974359 1440,150 C 1440,150 1440,600 1440,600 Z'); %7D 50%25%7B d: path('M 0,600 C 0,600 0,150 0,150 C 96.15641025641025,143.13589743589745 192.3128205128205,136.2717948717949 266,127 C 339.6871794871795,117.72820512820512 390.9051282051282,106.04871794871795 455,129 C 519.0948717948718,151.95128205128205 596.0666666666668,209.5333333333333 676,201 C 755.9333333333332,192.4666666666667 838.8282051282051,117.81794871794872 936,114 C 1033.1717948717949,110.18205128205128 1144.6205128205129,177.1948717948718 1231,195 C 1317.3794871794871,212.8051282051282 1378.6897435897436,181.4025641025641 1440,150 C 1440,150 1440,600 1440,600 Z'); %7D 75%25%7B d: path('M 0,600 C 0,600 0,150 0,150 C 55.16923076923078,140.31538461538463 110.33846153846156,130.63076923076923 198,135 C 285.66153846153844,139.36923076923077 405.8153846153846,157.7923076923077 496,167 C 586.1846153846154,176.2076923076923 646.4000000000001,176.2 733,158 C 819.5999999999999,139.8 932.5846153846155,103.40769230769229 1001,104 C 1069.4153846153845,104.59230769230771 1093.2615384615385,142.16923076923078 1159,156 C 1224.7384615384615,169.83076923076922 1332.3692307692309,159.9153846153846 1440,150 C 1440,150 1440,600 1440,600 Z'); %7D 100%25%7B d: path('M 0,600 C 0,600 0,150 0,150 C 81.35641025641027,172.9153846153846 162.71282051282054,195.83076923076922 252,194 C 341.28717948717946,192.16923076923078 438.50512820512824,165.59230769230766 511,146 C 583.4948717948718,126.40769230769234 631.2666666666665,113.80000000000004 703,116 C 774.7333333333335,118.19999999999996 870.428205128205,135.20769230769227 957,154 C 1043.571794871795,172.79230769230773 1121.0205128205127,193.3692307692308 1200,193 C 1278.9794871794873,192.6307692307692 1359.4897435897437,171.3153846153846 1440,150 C 1440,150 1440,600 1440,600 Z'); %7D %7D%3C/style%3E%3Cdefs%3E%3ClinearGradient id='gradient' x1='0%25' y1='50%25' x2='100%25' y2='50%25'%3E%3Cstop offset='5%25' stop-color='%23002bdc66'%3E%3C/stop%3E%3Cstop offset='95%25' stop-color='%2332ded466'%3E%3C/stop%3E%3C/linearGradient%3E%3C/defs%3E%3Cpath d='M 0,600 C 0,600 0,150 0,150 C 81.35641025641027,172.9153846153846 162.71282051282054,195.83076923076922 252,194 C 341.28717948717946,192.16923076923078 438.50512820512824,165.59230769230766 511,146 C 583.4948717948718,126.40769230769234 631.2666666666665,113.80000000000004 703,116 C 774.7333333333335,118.19999999999996 870.428205128205,135.20769230769227 957,154 C 1043.571794871795,172.79230769230773 1121.0205128205127,193.3692307692308 1200,193 C 1278.9794871794873,192.6307692307692 1359.4897435897437,171.3153846153846 1440,150 C 1440,150 1440,600 1440,600 Z' stroke='none' stroke-width='0' fill='url(%23gradient)' class='transition-all duration-300 ease-in-out delay-150 path-0'%3E%3C/path%3E%3Cstyle%3E .path-1%7B animation:pathAnim-1 4s; animation-timing-function: linear; animation-iteration-count: infinite; %7D @keyframes pathAnim-1%7B 0%25%7B d: path('M 0,600 C 0,600 0,300 0,300 C 82.94102564102565,295.425641025641 165.8820512820513,290.85128205128206 257,284 C 348.1179487179487,277.14871794871794 447.41282051282053,268.02051282051286 514,267 C 580.5871794871795,265.97948717948714 614.4666666666667,273.06666666666666 676,278 C 737.5333333333333,282.93333333333334 826.7205128205128,285.71282051282054 921,295 C 1015.2794871794872,304.28717948717946 1114.6512820512821,320.0820512820513 1202,322 C 1289.3487179487179,323.9179487179487 1364.674358974359,311.9589743589744 1440,300 C 1440,300 1440,600 1440,600 Z'); %7D 25%25%7B d: path('M 0,600 C 0,600 0,300 0,300 C 88.24102564102563,279.49487179487176 176.48205128205126,258.98974358974357 263,274 C 349.51794871794874,289.01025641025643 434.3128205128206,339.5358974358975 519,332 C 603.6871794871794,324.4641025641025 688.2666666666667,258.8666666666667 759,247 C 829.7333333333333,235.13333333333335 886.6205128205129,276.99743589743593 960,293 C 1033.3794871794871,309.00256410256407 1123.2512820512823,299.14358974358976 1206,296 C 1288.7487179487177,292.85641025641024 1364.374358974359,296.42820512820515 1440,300 C 1440,300 1440,600 1440,600 Z'); %7D 50%25%7B d: path('M 0,600 C 0,600 0,300 0,300 C 77.61025641025643,301.1948717948718 155.22051282051285,302.38974358974355 229,309 C 302.77948717948715,315.61025641025645 372.7282051282051,327.63589743589745 455,315 C 537.2717948717949,302.36410256410255 631.8666666666667,265.0666666666667 730,264 C 828.1333333333333,262.9333333333333 929.8051282051283,298.0974358974359 1003,313 C 1076.1948717948717,327.9025641025641 1120.9128205128204,322.54358974358973 1189,317 C 1257.0871794871796,311.45641025641027 1348.5435897435898,305.7282051282051 1440,300 C 1440,300 1440,600 1440,600 Z'); %7D 75%25%7B d: path('M 0,600 C 0,600 0,300 0,300 C 53.37692307692305,305.2846153846154 106.7538461538461,310.5692307692308 202,310 C 297.2461538461539,309.4307692307692 434.36153846153854,303.00769230769225 521,293 C 607.6384615384615,282.99230769230775 643.8,269.4 716,259 C 788.2,248.6 896.4384615384615,241.39230769230772 974,254 C 1051.5615384615385,266.6076923076923 1098.4461538461537,299.03076923076924 1171,310 C 1243.5538461538463,320.96923076923076 1341.7769230769231,310.4846153846154 1440,300 C 1440,300 1440,600 1440,600 Z'); %7D 100%25%7B d: path('M 0,600 C 0,600 0,300 0,300 C 82.94102564102565,295.425641025641 165.8820512820513,290.85128205128206 257,284 C 348.1179487179487,277.14871794871794 447.41282051282053,268.02051282051286 514,267 C 580.5871794871795,265.97948717948714 614.4666666666667,273.06666666666666 676,278 C 737.5333333333333,282.93333333333334 826.7205128205128,285.71282051282054 921,295 C 1015.2794871794872,304.28717948717946 1114.6512820512821,320.0820512820513 1202,322 C 1289.3487179487179,323.9179487179487 1364.674358974359,311.9589743589744 1440,300 C 1440,300 1440,600 1440,600 Z'); %7D %7D%3C/style%3E%3Cdefs%3E%3ClinearGradient id='gradient' x1='0%25' y1='50%25' x2='100%25' y2='50%25'%3E%3Cstop offset='5%25' stop-color='%23002bdc88'%3E%3C/stop%3E%3Cstop offset='95%25' stop-color='%2332ded488'%3E%3C/stop%3E%3C/linearGradient%3E%3C/defs%3E%3Cpath d='M 0,600 C 0,600 0,300 0,300 C 82.94102564102565,295.425641025641 165.8820512820513,290.85128205128206 257,284 C 348.1179487179487,277.14871794871794 447.41282051282053,268.02051282051286 514,267 C 580.5871794871795,265.97948717948714 614.4666666666667,273.06666666666666 676,278 C 737.5333333333333,282.93333333333334 826.7205128205128,285.71282051282054 921,295 C 1015.2794871794872,304.28717948717946 1114.6512820512821,320.0820512820513 1202,322 C 1289.3487179487179,323.9179487179487 1364.674358974359,311.9589743589744 1440,300 C 1440,300 1440,600 1440,600 Z' stroke='none' stroke-width='0' fill='url(%23gradient)' class='transition-all duration-300 ease-in-out delay-150 path-1'%3E%3C/path%3E%3Cstyle%3E .path-2%7B animation:pathAnim-2 4s; animation-timing-function: linear; animation-iteration-count: infinite; %7D @keyframes pathAnim-2%7B 0%25%7B d: path('M 0,600 C 0,600 0,450 0,450 C 76.1974358974359,467.39230769230767 152.3948717948718,484.7846153846154 220,481 C 287.6051282051282,477.2153846153846 346.6179487179487,452.25384615384615 441,452 C 535.3820512820513,451.74615384615385 665.1333333333334,476.2 762,477 C 858.8666666666666,477.8 922.8487179487179,454.94615384615383 984,443 C 1045.1512820512821,431.05384615384617 1103.4717948717948,430.0153846153846 1179,433 C 1254.5282051282052,435.9846153846154 1347.2641025641026,442.9923076923077 1440,450 C 1440,450 1440,600 1440,600 Z'); %7D 25%25%7B d: path('M 0,600 C 0,600 0,450 0,450 C 86.80769230769232,454.0974358974359 173.61538461538464,458.1948717948718 262,469 C 350.38461538461536,479.8051282051282 440.3461538461538,497.3179487179487 508,488 C 575.6538461538462,478.6820512820513 621,442.53333333333336 697,418 C 773,393.46666666666664 879.6538461538462,380.5487179487179 972,401 C 1064.3461538461538,421.4512820512821 1142.3846153846155,475.2717948717949 1218,489 C 1293.6153846153845,502.7282051282051 1366.8076923076924,476.36410256410255 1440,450 C 1440,450 1440,600 1440,600 Z'); %7D 50%25%7B d: path('M 0,600 C 0,600 0,450 0,450 C 79.76153846153846,435.7282051282051 159.52307692307693,421.45641025641027 229,422 C 298.4769230769231,422.54358974358973 357.6692307692308,437.9025641025641 443,442 C 528.3307692307692,446.0974358974359 639.8,438.93333333333334 720,424 C 800.2,409.06666666666666 849.1307692307691,386.36410256410255 925,394 C 1000.8692307692309,401.63589743589745 1103.676923076923,439.6102564102564 1194,454 C 1284.323076923077,468.3897435897436 1362.1615384615384,459.1948717948718 1440,450 C 1440,450 1440,600 1440,600 Z'); %7D 75%25%7B d: path('M 0,600 C 0,600 0,450 0,450 C 72.5102564102564,462.1435897435897 145.0205128205128,474.28717948717946 236,478 C 326.9794871794872,481.71282051282054 436.42820512820515,476.9948717948718 503,459 C 569.5717948717949,441.0051282051282 593.2666666666667,409.7333333333333 677,408 C 760.7333333333333,406.2666666666667 904.5051282051284,434.07179487179496 998,437 C 1091.4948717948716,439.92820512820504 1134.7128205128206,417.9794871794872 1200,416 C 1265.2871794871794,414.0205128205128 1352.6435897435897,432.0102564102564 1440,450 C 1440,450 1440,600 1440,600 Z'); %7D 100%25%7B d: path('M 0,600 C 0,600 0,450 0,450 C 76.1974358974359,467.39230769230767 152.3948717948718,484.7846153846154 220,481 C 287.6051282051282,477.2153846153846 346.6179487179487,452.25384615384615 441,452 C 535.3820512820513,451.74615384615385 665.1333333333334,476.2 762,477 C 858.8666666666666,477.8 922.8487179487179,454.94615384615383 984,443 C 1045.1512820512821,431.05384615384617 1103.4717948717948,430.0153846153846 1179,433 C 1254.5282051282052,435.9846153846154 1347.2641025641026,442.9923076923077 1440,450 C 1440,450 1440,600 1440,600 Z'); %7D %7D%3C/style%3E%3Cdefs%3E%3ClinearGradient id='gradient' x1='0%25' y1='50%25' x2='100%25' y2='50%25'%3E%3Cstop offset='5%25' stop-color='%23002bdcff'%3E%3C/stop%3E%3Cstop offset='95%25' stop-color='%2332ded4ff'%3E%3C/stop%3E%3C/linearGradient%3E%3C/defs%3E%3Cpath d='M 0,600 C 0,600 0,450 0,450 C 76.1974358974359,467.39230769230767 152.3948717948718,484.7846153846154 220,481 C 287.6051282051282,477.2153846153846 346.6179487179487,452.25384615384615 441,452 C 535.3820512820513,451.74615384615385 665.1333333333334,476.2 762,477 C 858.8666666666666,477.8 922.8487179487179,454.94615384615383 984,443 C 1045.1512820512821,431.05384615384617 1103.4717948717948,430.0153846153846 1179,433 C 1254.5282051282052,435.9846153846154 1347.2641025641026,442.9923076923077 1440,450 C 1440,450 1440,600 1440,600 Z' stroke='none' stroke-width='0' fill='url(%23gradient)' class='transition-all duration-300 ease-in-out delay-150 path-2'%3E%3C/path%3E%3C/svg%3E"); + --theme-background: var(--wave2-background); + --wave2-background-color: var(--background-waves-color); +} + +body.is-mobile.background-settings-workplace-background-image:is(.background-settings-workplace-waves-light,.background-settings-workplace-waves2-light).theme-light, +body.is-mobile.background-settings-workplace-background-image:is(.background-settings-workplace-waves,.background-settings-workplace-waves2).theme-dark { + --wave2-background-color: #001ae0; + --wave-background-color: #245eff; +} + +body.background-image-settings-command-palette-switch .modal-container .prompt::before { + background-size: cover; + content: ''; + top: 0; + right: 0; + bottom: 0; + left: 0; + position: absolute; +} + +body.background-image-settings-command-palette-same-as-workplace.background-image-settings-command-palette-switch .modal-container .prompt::before { + background-image: var(--theme-background); + filter: blur(var(--blur-depth-cp)) brightness(var(--brightness-4-bg-cp)) saturate(var(--saturate-4-bg-cp)); + opacity: var(--opacity-cp); + z-index: -1; +} +body.background-image-settings-command-palette-same-as-workplace.background-image-settings-command-palette-switch.background-settings-workplace-waves2-light .modal-container .prompt::before, +body.background-image-settings-command-palette-same-as-workplace.background-image-settings-command-palette-switch.background-settings-workplace-waves2 .modal-container .prompt::before { + top: 60%; +} + +body.theme-light.background-image-settings-command-palette-same-as-workplace.background-image-settings-command-palette-switch.background-settings-workplace-waves-light .modal-container .prompt::before, +body.background-image-settings-command-palette-same-as-workplace.background-image-settings-command-palette-switch.background-settings-workplace-background-image.background-settings-workplace-waves.theme-dark .prompt:before { + transform: rotate(180deg); + top: 75%; + background-image:unset; + -webkit-mask-image: var(--theme-background); + background-size:100% 100%; + opacity:0.5; + background-color: var(--wave-background-color); +} + +body.background-image-settings-command-palette-same-as-workplace.background-image-settings-command-palette-switch .modal-container .prompt input.prompt-input, +body.background-image-settings-command-palette-switch:not(.background-image-settings-command-palette-same-as-workplace) .modal-container .prompt input.prompt-input { + background-color: transparent; +} + +body.background-image-settings-command-palette-custom.background-image-settings-command-palette-switch:not(.background-image-settings-command-palette-same-as-workplace).theme-light .modal-container .prompt::before { + background-image: var(--background-command-palette-theme-light-custom); +} + +body.background-image-settings-command-palette-custom.background-image-settings-command-palette-switch:not(.background-image-settings-command-palette-same-as-workplace).theme-dark .modal-container .prompt::before { + background-image: var(--background-command-palette-theme-dark-custom); +} + +body.layout-style-options-default.background-settings-workplace-background-image .workspace-tab-container-before.is-before-active .workspace-tab-header-inner, +body.layout-style-options-default.background-settings-workplace-background-image .workspace-tab-container-after.is-after-active .workspace-tab-header-inner, +body.layout-style-options-default.background-settings-workplace-background-image .workspace-tab-header.is-before-active .workspace-tab-header-inner, +body.layout-style-options-default.background-settings-workplace-background-image .workspace-tab-header.is-after-active .workspace-tab-header-inner, +body.layout-style-options-default.background-settings-workplace-background-image .workspace-tab-container-before.is-before-active, +body.layout-style-options-default.background-settings-workplace-background-image .workspace-tab-container-after.is-after-active, +body.layout-style-options-default.background-settings-workplace-background-image .workspace-tab-header.is-before-active, +body.layout-style-options-default.background-settings-workplace-background-image .workspace-tab-header.is-after-active { + background-color: transparent; +} + +body.background-settings-workplace-background-image.background-settings-workplace-theme-light-custom-option.theme-light { + --theme-background: var(--background-settings-workplace-theme-light-custom); +} + +body.background-settings-workplace-background-image.background-settings-workplace-theme-dark-custom-option.theme-dark { + --theme-background: var(--background-settings-workplace-theme-dark-custom); +} + +/*rectangle*/ +body.layout-style-options-rectangle .workspace-tab-container-before.is-before-active .workspace-tab-header-inner, +body.layout-style-options-rectangle .workspace-tab-container-after.is-after-active .workspace-tab-header-inner, +body.layout-style-options-rectangle .workspace-tab-header.is-before-active .workspace-tab-header-inner, +body.layout-style-options-rectangle .workspace-tab-header.is-after-active .workspace-tab-header-inner, +body.layout-style-options-rectangle .workspace-tab-header, +body.layout-style-options-rectangle .workspace-tab-header-inner, +body.layout-style-options-rectangle .workspace-split.mod-left-split .view-content, +body.layout-style-options-rectangle .workspace-split.mod-right-split .view-content, +body.layout-style-options-rectangle .workspace-tab-header.is-after-active, +body.layout-style-options-rectangle .workspace-tab-header.is-before-active, +body.layout-style-options-rectangle .workspace-tab-container-before.is-before-active .workspace-tab-header-inner { + background-color: transparent; + border-radius: 0; +} + +body.layout-style-options-rectangle .workspace-split.mod-root>.workspace-leaf:first-of-type .workspace-leaf-content, +body.layout-style-options-rectangle .workspace-split.mod-root>.workspace-leaf:last-of-type .workspace-leaf-content { + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +body.layout-style-options-rectangle .workspace-tab-header-inner { + padding: 3px 9px; +} + +body.layout-style-options-rectangle .workspace-tab-container-before, +body.layout-style-options-rectangle .workspace-tab-container-after { + width: 0; +} + +body.layout-style-options-rectangle .workspace-tab-header-container { + padding: 4px 0 0 4px; +} + +body.layout-style-options-rectangle .workspace-split.mod-right-split .workspace-tabs .workspace-leaf { + border-top-right-radius: 0; +} + +body.layout-style-options-rectangle .workspace-split.mod-left-split .workspace-tabs .workspace-leaf { + border-top-left-radius: 0; +} + +body.layout-style-options-rectangle .workspace-tab-header-container { + background-color: var(--background-secondary); + border-bottom: 1px solid var(--background-modifier-border-1); +} + +body.layout-style-options-rectangle .workspace-split.mod-left-split>.workspace-leaf-resize-handle:not(:hover), +body.layout-style-options-rectangle .workspace-split.mod-right-split>.workspace-leaf-resize-handle:not(:hover), +body.layout-style-options-rectangle .workspace-split.mod-vertical>*>.workspace-leaf-resize-handle:not(:hover) { + height: 100%; + background-color: var(--background-leaf-resize-handle); +} + +body.layout-style-options-rectangle .workspace-split.mod-left-split>.workspace-leaf-resize-handle:hover, +body.layout-style-options-rectangle .workspace-split.mod-right-split>.workspace-leaf-resize-handle:hover, +body.layout-style-options-rectangle .workspace-split.mod-vertical>*>.workspace-leaf-resize-handle:hover { + height: 100%; +} + +body.layout-style-options-rectangle .side-dock-ribbon-action { + padding: 3px 0; +} + +/*-------- Eisenhower Matrix start--- */ +/* Eisenhower Matrix from Spectrum themes */ + +/*for Blue Topaz theme-表格四象图分布 Modified by cuman 2021-11-29*/ +/* 用法 yaml区域声明 +cssclass: matrix +内容如下形式(表格内容最好使用嵌入形式): + +| | | +| ----------------- | ----------- | +| ![[#To-Do]] | ![[#Doing]] | +| ![[#Considering]] | ![[#Maybe]] | + +*/ + +:root, +.theme-dark, +.theme-light { + --matrix-1: var(--p-kanban-color-2); + --matrix-2: var(--p-kanban-color-3); + --matrix-4: var(--p-kanban-color-5); + --matrix-5: var(--p-kanban-color-6); +} + +:is(.markdown-preview-view,.markdown-rendered).matrix table tr { + display: flex; +} +:is(.markdown-preview-view,.markdown-rendered).matrix table th { + background-color: transparent; + background-image: none; +} +:is(.markdown-preview-view,.markdown-rendered).matrix table tbody>tr { + background-color: transparent; +} + +:is(.markdown-preview-view,.markdown-rendered).matrix .internal-embed:not(.image-embed) { + border: 1px solid; + border-radius: 10px; +} +:is(.markdown-preview-view,.markdown-rendered).matrix thead { + background-color: transparent; +} +:is(.markdown-preview-view,.markdown-rendered).matrix table tr th, +:is(.markdown-preview-view,.markdown-rendered).matrix table tr td { + background-color: transparent; + padding-right: 0; + border: 0px; + width: 50%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} +:is(.markdown-preview-view,.markdown-rendered).matrix .markdown-embed { + background-color: transparent; +} +:is(.markdown-preview-view,.markdown-rendered).matrix table tr th > *, +:is(.markdown-preview-view,.markdown-rendered).matrix table tr td > * { + width: 100%; + height: 100%; + background-color: var(--background-secondary); +} + +:is(.markdown-preview-view,.markdown-rendered).matrix table tr td { + background-color: transparent; +} + +:is(.markdown-preview-view,.markdown-rendered).matrix table tr:nth-child(1n) td:nth-child(1) > * { + border-color: var(--matrix-1); +} + +:is(.markdown-preview-view,.markdown-rendered).matrix table tr:nth-child(1n) td:nth-child(1):hover { + background-color: var(--matrix-1); +} + +:is(.markdown-preview-view,.markdown-rendered).matrix table tr:nth-child(1n) td:nth-child(2) > * { + border-color: var(--matrix-2); +} + +:is(.markdown-preview-view,.markdown-rendered).matrix table tr:nth-child(1n) td:nth-child(2):hover { + background-color: var(--matrix-2); +} + +:is(.markdown-preview-view,.markdown-rendered).matrix table tr:nth-child(2n) td:nth-child(1) > * { + border-color: var(--matrix-4); +} + +:is(.markdown-preview-view,.markdown-rendered).matrix table tr:nth-child(2n) td:nth-child(1):hover { + background-color: var(--matrix-4); +} + +:is(.markdown-preview-view,.markdown-rendered).matrix table tr:nth-child(2n) td:nth-child(2) > * { + border-color: var(--matrix-5); +} + +:is(.markdown-preview-view,.markdown-rendered).matrix table tr:nth-child(2n) td:nth-child(2):hover { + background-color: var(--matrix-5); +} +/*-------- Eisenhower Matrix end--- */ + +.recent-vaults-list-item:hover { + color: var(--theme-color) !important; +} + +body.plain-file-title.theme-light, +body.plain-file-title.theme-dark { + --color-view-header-gradient-1: var(--background-primary); + --color-view-header-gradient-2: var(--background-primary); +} + +body:not(:is(.default-loading-page,.is-popout-window)) .progress-bar-message { + visibility: hidden; +} + +body:not(.default-loading-page).loading-page-style-default .progress-bar-message:before { + content: ""; + width: 80px; + height: 80px; + position: relative; + animation: shape 2.5s infinite alternate; + visibility: visible !important; + display: block; + transform: translateZ(0); + -webkit-transform: translateZ(0); + will-change: transform; +} + +body:not(.default-loading-page).theme-light .progress-bar { + background-color: white; +} +body:not(.default-loading-page).theme-dark .progress-bar { + background-color: #222222; +} + +@keyframes shape { + 0% {background-color: transparent; transform: translate(-50px, -50px); border-radius: 50%;} + 10% {background-color: #53c7ff; transform: translate(-50px, -50px); border-radius: 50%;} + 30% {background-color: #8fff7b; transform: translate(110px, -50px); border-radius: 0;} + 50% {background-color: #ffe468; transform: translate(110px, 110px); border-radius: 50%;} + 70% {background-color: #fe9289; transform: translate(-50px, 110px); border-radius: 0;} + 90% {background-color: #53c7ff; transform: translate(-50px, -50px); border-radius: 50%;} + 100% {background-color: transparent; transform: translate(-50px, -50px); border-radius: 50%;} +} + +/* the gif animation was created by @Jake Fleming https://dribbble.com/shots/9948351-kitty-wiggle */ +body:not(.default-loading-page).loading-animation-cat .progress-bar-message::before { + content: "GIF creator: Jake Fleming"; + display: block; + background: no-repeat center/cover; + width: 800px; + height: 500px; + margin-top: -20px; + font-size: initial; + color: var(--text-muted); + filter: hue-rotate(-55deg) saturate(120%); + position: initial; + animation: unset; +} + +body:not(.default-loading-page).loading-animation-cat.theme-dark .progress-bar-message::before { + filter: invert(100%) hue-rotate(153deg) saturate(250%); +} + +body:not(.default-loading-page).loading-animation-cat.theme-light .progress-bar { + background-color: white; +} + +body:not(.default-loading-page).loading-animation-cat.theme-dark .progress-bar { + background-color: black; +} + +body:not(.default-loading-page).loading-animation-cat .progress-bar-message { + color: var(--text-normal); + font-size: 25px; + visibility: visible; +} + +body:not(.default-loading-page).loading-animation-custom .progress-bar-message::before { + position: initial; + animation: unset; + display: block; + content: var(--loading-page-custom-gif-caption); + background: no-repeat center/cover var(--loading-page-custom-gif-url); + width: 800px; + height: 600px; + margin-top: -20px; +} + +body:not(.default-loading-page).loading-shape-with-custom-gif .progress-bar-message:before { + display: block; + width: 250px; + height: 250px; + content: var(--loading-page-custom-gif-caption-alt); + background: no-repeat center/cover var(--loading-page-custom-gif-url-alt); + animation: shape-gif 2.5s infinite alternate; +} + +body:not(.default-loading-page).loading-shape-with-custom-gif.loading-shape-with-custom-high-contrast-bg.theme-light .progress-bar { + background-color: black; +} + +body:not(.default-loading-page).loading-shape-with-custom-gif.loading-shape-with-custom-high-contrast-bg.theme-dark .progress-bar { + background-color: white; +} + +body:not(.default-loading-page).loading-shape-with-custom-gif.loading-shape-with-custom-high-contrast-bg.theme-dark .progress-bar-message::before { + animation: shape-gif-dark 2.5s infinite alternate; + transform: translateZ(0); + -webkit-transform: translateZ(0); + will-change: transform; +} + +@keyframes shape-gif { + 0% {filter: hue-rotate(0deg); transform: translate(-80px, -80px); border-radius: 50%;} + 25% {filter: hue-rotate(90deg); transform: translate(80px, -80px); border-radius: 0;} + 50% {filter: hue-rotate(180deg); transform: translate(80px, 80px); border-radius: 50%;} + 75% {filter: hue-rotate(270deg); transform: translate(-80px, 80px); border-radius: 0;} + 100% {filter: hue-rotate(360deg); transform: translate(-80px, -80px); border-radius: 50%;} +} + +@keyframes shape-gif-dark { + 0% {filter: hue-rotate(0deg) invert(100%); transform: translate(-80px, -80px); border-radius: 50%;} + 25% {filter: hue-rotate(90deg) invert(100%); transform: translate(80px, -80px); border-radius: 0;} + 50% {filter: hue-rotate(180deg) invert(100%); transform: translate(80px, 80px); border-radius: 50%;} + 75% {filter: hue-rotate(270deg) invert(100%); transform: translate(-80px, 80px); border-radius: 0;} + 100% {filter: hue-rotate(360deg) invert(100%); transform: translate(-80px, -80px); border-radius: 50%;} +} + +body:not(.default-loading-page).loading-add-icons .progress-bar-message { + all: initial; + font-size: var(--font-size-loading-add); + color: var(--loading-add-text-color); + animation: 1.5s infinite alternate; + animation-name: gradientChange, moving; +} + +/*加载画面的文字*/ +body:not(.default-loading-page).loading-add-icons .progress-bar-message::before { + all: initial; + color: var(--loading-add-text-color); + content: var(--loading-text-before); + animation: 2s infinite alternate; + animation-name: gradientChange; +} + +body:not(.default-loading-page).loading-add-icons .progress-bar-message::after { + all: initial; + color: var(--loading-add-text-color); + content: var(--loading-text-after); + animation: 2s infinite alternate; + animation-name: gradientChange; + transform: translateZ(0); + -webkit-transform: translateZ(0); + will-change: transform; +} + +@keyframes gradientChange { + 100% { color: var(--loading-add-text-color-alt); } +} +@keyframes moving { + 0% { transform: translateX(-100px); } + 100% { transform: translateX(100px); } +} + +body:not(.default-loading-page).loading-custom-text .progress-bar-message::before { + all: initial; + content: var(--loading-diy-text); + font-family: var(--font-loading-text) !important; + visibility: visible !important; + display: block; + font-size: var(--font-size-loading-diy-text); + line-height: 2; + color: var(--loading-diy-text-color); +} + +body:not(.default-loading-page).loading-custom-text.loading-text-typing-style .progress-bar-message::before { + overflow: hidden; + white-space: nowrap; + border-right: 0.07em solid; + animation: typing-style 3s steps(23, end), + cursor-blink 0.3s step-end infinite alternate; + transform: translateZ(0); + -webkit-transform: translateZ(0); + will-change: transform; +} + +@keyframes cursor-blink { + 50% {border-color: transparent;} +} + +@keyframes typing-style { + 0% {width: 0;} + 100% {width: 42ch;} +} + +body:not(.default-loading-page).loading-custom-text.loading-text-moving-style .progress-bar-message::before { + animation: moving-style 3s ease-in-out infinite alternate; + transform: translateZ(0); + -webkit-transform: translateZ(0); + will-change: transform; +} + +@keyframes moving-style { + 0% {-webkit-transform: translateX(-100px); transform: translateX(-100px);} + 50% {-webkit-transform: translateX(100px); transform: translateX(100px);} + 100% {-webkit-transform: translateX(-100px); transform: translateX(-100px)} +} + +body:not(.default-loading-page).loading-custom-text.loading-text-shinning-style .progress-bar-message::before { + animation: shinning-style 3s infinite; + transform: translateZ(0); + -webkit-transform: translateZ(0); + will-change: transform; +} + +@keyframes shinning-style { + 0% { opacity: 1;} + 45% { opacity: 0;} + 90% { opacity: 1;} +} + +body:not(.default-loading-page).loading-custom-text.loading-text-color-changing-style .progress-bar-message::before { + animation: color-changing-style 3s infinite; + transform: translateZ(0); + -webkit-transform: translateZ(0); + will-change: transform; +} + +@keyframes color-changing-style { + 0% { color: var(--text-blue);} + 25% { color: var(--text-green);} + 50% { color: var(--text-yellow);} + 75% { color: var(--text-red);} + 100% { color: var(--text-blue);} +} + +body:not(.default-loading-page).loading-custom-text.loading-text-typing-style.loading-text-moving-style .progress-bar-message::before { + animation: + typing-style 3s steps(26, end), + cursor-blink 0.3s step-end infinite alternate, + moving-style 3s ease-in-out infinite alternate; + transform: translateZ(0); + -webkit-transform: translateZ(0); + will-change: transform; +} + +body:not(.default-loading-page).loading-custom-text.loading-text-typing-style.loading-text-shinning-style .progress-bar-message::before { + animation: + typing-style 3s steps(26, end), + cursor-blink 0.3s step-end infinite alternate, + shinning-style 3s infinite; + transform: translateZ(0); + -webkit-transform: translateZ(0); + will-change: transform; +} + +body:not(.default-loading-page).loading-custom-text.loading-text-typing-style.loading-text-color-changing-style .progress-bar-message::before { + animation: + color-changing-style 3s infinite, + typing-style 3s steps(26, end), + cursor-blink 0.3s step-end infinite alternate; + transform: translateZ(0); + -webkit-transform: translateZ(0); + will-change: transform; +} + +body:not(.default-loading-page).loading-custom-text.loading-text-typing-style.loading-text-moving-style.loading-text-shinning-style .progress-bar-message::before { + animation: + typing-style 3s steps(26, end), + cursor-blink 0.3s step-end infinite alternate, + moving-style 3s ease-in-out infinite alternate, + shinning-style 3s infinite; + transform: translateZ(0); + -webkit-transform: translateZ(0); + will-change: transform; +} + +body:not(.default-loading-page).loading-custom-text.loading-text-typing-style.loading-text-moving-style.loading-text-shinning-style.loading-text-color-changing-style .progress-bar-message::before { + animation: + typing-style 3s steps(26, end), + cursor-blink 0.3s step-end infinite alternate, + moving-style 3s ease-in-out infinite alternate, + shinning-style 3s infinite, + color-changing-style 3s infinite; + transform: translateZ(0); + -webkit-transform: translateZ(0); + will-change: transform; +} + +body:not(.default-loading-page).loading-custom-text.loading-text-moving-style.loading-text-shinning-style .progress-bar-message::before { + animation: + moving-style 3s ease-in-out infinite alternate, + shinning-style 3s infinite; + transform: translateZ(0); + -webkit-transform: translateZ(0); + will-change: transform; +} + +body:not(.default-loading-page).loading-custom-text.loading-text-moving-style.loading-text-color-changing-style .progress-bar-message::before { + animation: + moving-style 3s ease-in-out infinite alternate, + color-changing-style 3s infinite; + transform: translateZ(0); + -webkit-transform: translateZ(0); + will-change: transform; +} + +body:not(.default-loading-page).loading-custom-text.loading-text-moving-style.loading-text-shinning-style.loading-text-color-changing-style .progress-bar-message::before { + animation: + moving-style 3s ease-in-out infinite alternate, + shinning-style 3s infinite, + color-changing-style 3s infinite; + transform: translateZ(0); + -webkit-transform: translateZ(0); + will-change: transform; +} + +body:not(.default-loading-page).loading-custom-text.loading-text-shinning-style.loading-text-color-changing-style .progress-bar-message::before { + animation: + shinning-style 3s infinite, + color-changing-style 3s infinite; + transform: translateZ(0); + -webkit-transform: translateZ(0); + will-change: transform; +} + +/* the mario animation was created by @B.C.Rikko https://bcrikko.github.io/css-collection/other/mario/index.html */ +/* need mario snippets */ +body:not(.default-loading-page).loading-page-style-mario .progress-bar-message:before { + content: ""; + position: relative; + visibility: visible !important; + display: block; + top: calc(var(--pixel) * -6); + left: calc(var(--pixel) * -6.5); + width: var(--pixel); + height: var(--pixel); + background: transparent; + animation: sprite 0.618s infinite, jump 0.618s infinite; + transform: translateZ(0); + -webkit-transform: translateZ(0); + will-change: transform; +} + +@keyframes jump { + from, 25%, 75%, to {transform: translateY(0);} + 50% {transform: translateY(calc(var(--pixel) * -8));} +} + +@keyframes sprite { + from, 24%, 74%, to { + box-shadow: + /* r:1 */ + calc(var(--pixel) * 1) calc(var(--pixel) * 1) 0 transparent, + calc(var(--pixel) * 2) calc(var(--pixel) * 1) 0 transparent, + calc(var(--pixel) * 3) calc(var(--pixel) * 1) 0 transparent, + calc(var(--pixel) * 4) calc(var(--pixel) * 1) 0 transparent, + calc(var(--pixel) * 5) calc(var(--pixel) * 1) 0 transparent, + calc(var(--pixel) * 6) calc(var(--pixel) * 1) 0 transparent, + calc(var(--pixel) * 7) calc(var(--pixel) * 1) 0 var(--c-1), + calc(var(--pixel) * 8) calc(var(--pixel) * 1) 0 var(--c-1), + calc(var(--pixel) * 9) calc(var(--pixel) * 1) 0 var(--c-1), + calc(var(--pixel) * 10) calc(var(--pixel) * 1) 0 var(--c-1), + calc(var(--pixel) * 11) calc(var(--pixel) * 1) 0 var(--c-1), + calc(var(--pixel) * 12) calc(var(--pixel) * 1) 0 transparent, + calc(var(--pixel) * 13) calc(var(--pixel) * 1) 0 transparent, + calc(var(--pixel) * 14) calc(var(--pixel) * 1) 0 transparent, + calc(var(--pixel) * 15) calc(var(--pixel) * 1) 0 transparent, + calc(var(--pixel) * 16) calc(var(--pixel) * 1) 0 transparent, + + /* r:2 */ + calc(var(--pixel) * 1) calc(var(--pixel) * 2) 0 transparent, + calc(var(--pixel) * 2) calc(var(--pixel) * 2) 0 transparent, + calc(var(--pixel) * 3) calc(var(--pixel) * 2) 0 transparent, + calc(var(--pixel) * 4) calc(var(--pixel) * 2) 0 transparent, + calc(var(--pixel) * 5) calc(var(--pixel) * 2) 0 transparent, + calc(var(--pixel) * 6) calc(var(--pixel) * 2) 0 var(--c-1), + calc(var(--pixel) * 7) calc(var(--pixel) * 2) 0 var(--c-1), + calc(var(--pixel) * 8) calc(var(--pixel) * 2) 0 var(--c-1), + calc(var(--pixel) * 9) calc(var(--pixel) * 2) 0 var(--c-1), + calc(var(--pixel) * 10) calc(var(--pixel) * 2) 0 var(--c-1), + calc(var(--pixel) * 11) calc(var(--pixel) * 2) 0 var(--c-1), + calc(var(--pixel) * 12) calc(var(--pixel) * 2) 0 var(--c-1), + calc(var(--pixel) * 13) calc(var(--pixel) * 2) 0 var(--c-1), + calc(var(--pixel) * 14) calc(var(--pixel) * 2) 0 var(--c-1), + calc(var(--pixel) * 15) calc(var(--pixel) * 2) 0 transparent, + calc(var(--pixel) * 16) calc(var(--pixel) * 2) 0 transparent, + + /* r:3 */ + calc(var(--pixel) * 1) calc(var(--pixel) * 3) 0 transparent, + calc(var(--pixel) * 2) calc(var(--pixel) * 3) 0 transparent, + calc(var(--pixel) * 3) calc(var(--pixel) * 3) 0 transparent, + calc(var(--pixel) * 4) calc(var(--pixel) * 3) 0 transparent, + calc(var(--pixel) * 5) calc(var(--pixel) * 3) 0 transparent, + calc(var(--pixel) * 6) calc(var(--pixel) * 3) 0 var(--c-3), + calc(var(--pixel) * 7) calc(var(--pixel) * 3) 0 var(--c-3), + calc(var(--pixel) * 8) calc(var(--pixel) * 3) 0 var(--c-3), + calc(var(--pixel) * 9) calc(var(--pixel) * 3) 0 var(--c-2), + calc(var(--pixel) * 10) calc(var(--pixel) * 3) 0 var(--c-2), + calc(var(--pixel) * 11) calc(var(--pixel) * 3) 0 var(--c-3), + calc(var(--pixel) * 12) calc(var(--pixel) * 3) 0 var(--c-2), + calc(var(--pixel) * 13) calc(var(--pixel) * 3) 0 transparent, + calc(var(--pixel) * 14) calc(var(--pixel) * 3) 0 transparent, + calc(var(--pixel) * 15) calc(var(--pixel) * 3) 0 transparent, + calc(var(--pixel) * 16) calc(var(--pixel) * 3) 0 transparent, + + /* r:4 */ + calc(var(--pixel) * 1) calc(var(--pixel) * 4) 0 transparent, + calc(var(--pixel) * 2) calc(var(--pixel) * 4) 0 transparent, + calc(var(--pixel) * 3) calc(var(--pixel) * 4) 0 transparent, + calc(var(--pixel) * 4) calc(var(--pixel) * 4) 0 transparent, + calc(var(--pixel) * 5) calc(var(--pixel) * 4) 0 var(--c-3), + calc(var(--pixel) * 6) calc(var(--pixel) * 4) 0 var(--c-2), + calc(var(--pixel) * 7) calc(var(--pixel) * 4) 0 var(--c-3), + calc(var(--pixel) * 8) calc(var(--pixel) * 4) 0 var(--c-2), + calc(var(--pixel) * 9) calc(var(--pixel) * 4) 0 var(--c-2), + calc(var(--pixel) * 10) calc(var(--pixel) * 4) 0 var(--c-2), + calc(var(--pixel) * 11) calc(var(--pixel) * 4) 0 var(--c-3), + calc(var(--pixel) * 12) calc(var(--pixel) * 4) 0 var(--c-2), + calc(var(--pixel) * 13) calc(var(--pixel) * 4) 0 var(--c-2), + calc(var(--pixel) * 14) calc(var(--pixel) * 4) 0 var(--c-2), + calc(var(--pixel) * 15) calc(var(--pixel) * 4) 0 transparent, + calc(var(--pixel) * 16) calc(var(--pixel) * 4) 0 transparent, + + /* r:5 */ + calc(var(--pixel) * 1) calc(var(--pixel) * 5) 0 transparent, + calc(var(--pixel) * 2) calc(var(--pixel) * 5) 0 transparent, + calc(var(--pixel) * 3) calc(var(--pixel) * 5) 0 transparent, + calc(var(--pixel) * 4) calc(var(--pixel) * 5) 0 transparent, + calc(var(--pixel) * 5) calc(var(--pixel) * 5) 0 var(--c-3), + calc(var(--pixel) * 6) calc(var(--pixel) * 5) 0 var(--c-2), + calc(var(--pixel) * 7) calc(var(--pixel) * 5) 0 var(--c-3), + calc(var(--pixel) * 8) calc(var(--pixel) * 5) 0 var(--c-3), + calc(var(--pixel) * 9) calc(var(--pixel) * 5) 0 var(--c-2), + calc(var(--pixel) * 10) calc(var(--pixel) * 5) 0 var(--c-2), + calc(var(--pixel) * 11) calc(var(--pixel) * 5) 0 var(--c-2), + calc(var(--pixel) * 12) calc(var(--pixel) * 5) 0 var(--c-3), + calc(var(--pixel) * 13) calc(var(--pixel) * 5) 0 var(--c-2), + calc(var(--pixel) * 14) calc(var(--pixel) * 5) 0 var(--c-2), + calc(var(--pixel) * 15) calc(var(--pixel) * 5) 0 var(--c-2), + calc(var(--pixel) * 16) calc(var(--pixel) * 5) 0 transparent, + + /* r:6 */ + calc(var(--pixel) * 1) calc(var(--pixel) * 6) 0 transparent, + calc(var(--pixel) * 2) calc(var(--pixel) * 6) 0 transparent, + calc(var(--pixel) * 3) calc(var(--pixel) * 6) 0 transparent, + calc(var(--pixel) * 4) calc(var(--pixel) * 6) 0 transparent, + calc(var(--pixel) * 5) calc(var(--pixel) * 6) 0 var(--c-3), + calc(var(--pixel) * 6) calc(var(--pixel) * 6) 0 var(--c-3), + calc(var(--pixel) * 7) calc(var(--pixel) * 6) 0 var(--c-2), + calc(var(--pixel) * 8) calc(var(--pixel) * 6) 0 var(--c-2), + calc(var(--pixel) * 9) calc(var(--pixel) * 6) 0 var(--c-2), + calc(var(--pixel) * 10) calc(var(--pixel) * 6) 0 var(--c-2), + calc(var(--pixel) * 11) calc(var(--pixel) * 6) 0 var(--c-3), + calc(var(--pixel) * 12) calc(var(--pixel) * 6) 0 var(--c-3), + calc(var(--pixel) * 13) calc(var(--pixel) * 6) 0 var(--c-3), + calc(var(--pixel) * 14) calc(var(--pixel) * 6) 0 var(--c-3), + calc(var(--pixel) * 15) calc(var(--pixel) * 6) 0 transparent, + calc(var(--pixel) * 16) calc(var(--pixel) * 6) 0 transparent, + + /* r:7 */ + calc(var(--pixel) * 1) calc(var(--pixel) * 7) 0 transparent, + calc(var(--pixel) * 2) calc(var(--pixel) * 7) 0 transparent, + calc(var(--pixel) * 3) calc(var(--pixel) * 7) 0 transparent, + calc(var(--pixel) * 4) calc(var(--pixel) * 7) 0 transparent, + calc(var(--pixel) * 5) calc(var(--pixel) * 7) 0 transparent, + calc(var(--pixel) * 6) calc(var(--pixel) * 7) 0 transparent, + calc(var(--pixel) * 7) calc(var(--pixel) * 7) 0 var(--c-2), + calc(var(--pixel) * 8) calc(var(--pixel) * 7) 0 var(--c-2), + calc(var(--pixel) * 9) calc(var(--pixel) * 7) 0 var(--c-2), + calc(var(--pixel) * 10) calc(var(--pixel) * 7) 0 var(--c-2), + calc(var(--pixel) * 11) calc(var(--pixel) * 7) 0 var(--c-2), + calc(var(--pixel) * 12) calc(var(--pixel) * 7) 0 var(--c-2), + calc(var(--pixel) * 13) calc(var(--pixel) * 7) 0 var(--c-2), + calc(var(--pixel) * 14) calc(var(--pixel) * 7) 0 transparent, + calc(var(--pixel) * 15) calc(var(--pixel) * 7) 0 transparent, + calc(var(--pixel) * 16) calc(var(--pixel) * 7) 0 transparent, + + /* r:8 */ + calc(var(--pixel) * 1) calc(var(--pixel) * 8) 0 transparent, + calc(var(--pixel) * 2) calc(var(--pixel) * 8) 0 transparent, + calc(var(--pixel) * 3) calc(var(--pixel) * 8) 0 transparent, + calc(var(--pixel) * 4) calc(var(--pixel) * 8) 0 transparent, + calc(var(--pixel) * 5) calc(var(--pixel) * 8) 0 transparent, + calc(var(--pixel) * 6) calc(var(--pixel) * 8) 0 var(--c-3), + calc(var(--pixel) * 7) calc(var(--pixel) * 8) 0 var(--c-3), + calc(var(--pixel) * 8) calc(var(--pixel) * 8) 0 var(--c-1), + calc(var(--pixel) * 9) calc(var(--pixel) * 8) 0 var(--c-3), + calc(var(--pixel) * 10) calc(var(--pixel) * 8) 0 var(--c-3), + calc(var(--pixel) * 11) calc(var(--pixel) * 8) 0 var(--c-3), + calc(var(--pixel) * 12) calc(var(--pixel) * 8) 0 transparent, + calc(var(--pixel) * 13) calc(var(--pixel) * 8) 0 transparent, + calc(var(--pixel) * 14) calc(var(--pixel) * 8) 0 transparent, + calc(var(--pixel) * 15) calc(var(--pixel) * 8) 0 transparent, + calc(var(--pixel) * 16) calc(var(--pixel) * 8) 0 transparent, + + /* r:9 */ + calc(var(--pixel) * 1) calc(var(--pixel) * 9) 0 transparent, + calc(var(--pixel) * 2) calc(var(--pixel) * 9) 0 transparent, + calc(var(--pixel) * 3) calc(var(--pixel) * 9) 0 transparent, + calc(var(--pixel) * 4) calc(var(--pixel) * 9) 0 transparent, + calc(var(--pixel) * 5) calc(var(--pixel) * 9) 0 var(--c-3), + calc(var(--pixel) * 6) calc(var(--pixel) * 9) 0 var(--c-3), + calc(var(--pixel) * 7) calc(var(--pixel) * 9) 0 var(--c-3), + calc(var(--pixel) * 8) calc(var(--pixel) * 9) 0 var(--c-1), + calc(var(--pixel) * 9) calc(var(--pixel) * 9) 0 var(--c-3), + calc(var(--pixel) * 10) calc(var(--pixel) * 9) 0 var(--c-3), + calc(var(--pixel) * 11) calc(var(--pixel) * 9) 0 var(--c-1), + calc(var(--pixel) * 12) calc(var(--pixel) * 9) 0 var(--c-3), + calc(var(--pixel) * 13) calc(var(--pixel) * 9) 0 var(--c-3), + calc(var(--pixel) * 14) calc(var(--pixel) * 9) 0 var(--c-3), + calc(var(--pixel) * 15) calc(var(--pixel) * 9) 0 transparent, + calc(var(--pixel) * 16) calc(var(--pixel) * 9) 0 transparent, + + /* r:10 */ + calc(var(--pixel) * 1) calc(var(--pixel) * 10) 0 transparent, + calc(var(--pixel) * 2) calc(var(--pixel) * 10) 0 transparent, + calc(var(--pixel) * 3) calc(var(--pixel) * 10) 0 transparent, + calc(var(--pixel) * 4) calc(var(--pixel) * 10) 0 var(--c-3), + calc(var(--pixel) * 5) calc(var(--pixel) * 10) 0 var(--c-3), + calc(var(--pixel) * 6) calc(var(--pixel) * 10) 0 var(--c-3), + calc(var(--pixel) * 7) calc(var(--pixel) * 10) 0 var(--c-3), + calc(var(--pixel) * 8) calc(var(--pixel) * 10) 0 var(--c-1), + calc(var(--pixel) * 9) calc(var(--pixel) * 10) 0 var(--c-1), + calc(var(--pixel) * 10) calc(var(--pixel) * 10) 0 var(--c-1), + calc(var(--pixel) * 11) calc(var(--pixel) * 10) 0 var(--c-1), + calc(var(--pixel) * 12) calc(var(--pixel) * 10) 0 var(--c-3), + calc(var(--pixel) * 13) calc(var(--pixel) * 10) 0 var(--c-3), + calc(var(--pixel) * 14) calc(var(--pixel) * 10) 0 var(--c-3), + calc(var(--pixel) * 15) calc(var(--pixel) * 10) 0 var(--c-3), + calc(var(--pixel) * 16) calc(var(--pixel) * 10) 0 transparent, + + /* r:11 */ + calc(var(--pixel) * 1) calc(var(--pixel) * 11) 0 transparent, + calc(var(--pixel) * 2) calc(var(--pixel) * 11) 0 transparent, + calc(var(--pixel) * 3) calc(var(--pixel) * 11) 0 transparent, + calc(var(--pixel) * 4) calc(var(--pixel) * 11) 0 var(--c-2), + calc(var(--pixel) * 5) calc(var(--pixel) * 11) 0 var(--c-2), + calc(var(--pixel) * 6) calc(var(--pixel) * 11) 0 var(--c-3), + calc(var(--pixel) * 7) calc(var(--pixel) * 11) 0 var(--c-1), + calc(var(--pixel) * 8) calc(var(--pixel) * 11) 0 var(--c-2), + calc(var(--pixel) * 9) calc(var(--pixel) * 11) 0 var(--c-1), + calc(var(--pixel) * 10) calc(var(--pixel) * 11) 0 var(--c-1), + calc(var(--pixel) * 11) calc(var(--pixel) * 11) 0 var(--c-2), + calc(var(--pixel) * 12) calc(var(--pixel) * 11) 0 var(--c-1), + calc(var(--pixel) * 13) calc(var(--pixel) * 11) 0 var(--c-3), + calc(var(--pixel) * 14) calc(var(--pixel) * 11) 0 var(--c-2), + calc(var(--pixel) * 15) calc(var(--pixel) * 11) 0 var(--c-2), + calc(var(--pixel) * 16) calc(var(--pixel) * 11) 0 transparent, + + /* r:12 */ + calc(var(--pixel) * 1) calc(var(--pixel) * 12) 0 transparent, + calc(var(--pixel) * 2) calc(var(--pixel) * 12) 0 transparent, + calc(var(--pixel) * 3) calc(var(--pixel) * 12) 0 transparent, + calc(var(--pixel) * 4) calc(var(--pixel) * 12) 0 var(--c-2), + calc(var(--pixel) * 5) calc(var(--pixel) * 12) 0 var(--c-2), + calc(var(--pixel) * 6) calc(var(--pixel) * 12) 0 var(--c-2), + calc(var(--pixel) * 7) calc(var(--pixel) * 12) 0 var(--c-1), + calc(var(--pixel) * 8) calc(var(--pixel) * 12) 0 var(--c-1), + calc(var(--pixel) * 9) calc(var(--pixel) * 12) 0 var(--c-1), + calc(var(--pixel) * 10) calc(var(--pixel) * 12) 0 var(--c-1), + calc(var(--pixel) * 11) calc(var(--pixel) * 12) 0 var(--c-1), + calc(var(--pixel) * 12) calc(var(--pixel) * 12) 0 var(--c-1), + calc(var(--pixel) * 13) calc(var(--pixel) * 12) 0 var(--c-2), + calc(var(--pixel) * 14) calc(var(--pixel) * 12) 0 var(--c-2), + calc(var(--pixel) * 15) calc(var(--pixel) * 12) 0 var(--c-2), + calc(var(--pixel) * 16) calc(var(--pixel) * 12) 0 transparent, + + /* r:13 */ + calc(var(--pixel) * 1) calc(var(--pixel) * 13) 0 transparent, + calc(var(--pixel) * 2) calc(var(--pixel) * 13) 0 transparent, + calc(var(--pixel) * 3) calc(var(--pixel) * 13) 0 transparent, + calc(var(--pixel) * 4) calc(var(--pixel) * 13) 0 var(--c-2), + calc(var(--pixel) * 5) calc(var(--pixel) * 13) 0 var(--c-2), + calc(var(--pixel) * 6) calc(var(--pixel) * 13) 0 var(--c-1), + calc(var(--pixel) * 7) calc(var(--pixel) * 13) 0 var(--c-1), + calc(var(--pixel) * 8) calc(var(--pixel) * 13) 0 var(--c-1), + calc(var(--pixel) * 9) calc(var(--pixel) * 13) 0 var(--c-1), + calc(var(--pixel) * 10) calc(var(--pixel) * 13) 0 var(--c-1), + calc(var(--pixel) * 11) calc(var(--pixel) * 13) 0 var(--c-1), + calc(var(--pixel) * 12) calc(var(--pixel) * 13) 0 var(--c-1), + calc(var(--pixel) * 13) calc(var(--pixel) * 13) 0 var(--c-1), + calc(var(--pixel) * 14) calc(var(--pixel) * 13) 0 var(--c-2), + calc(var(--pixel) * 15) calc(var(--pixel) * 13) 0 var(--c-2), + calc(var(--pixel) * 16) calc(var(--pixel) * 13) 0 transparent, + + /* r:14 */ + calc(var(--pixel) * 1) calc(var(--pixel) * 14) 0 transparent, + calc(var(--pixel) * 2) calc(var(--pixel) * 14) 0 transparent, + calc(var(--pixel) * 3) calc(var(--pixel) * 14) 0 transparent, + calc(var(--pixel) * 4) calc(var(--pixel) * 14) 0 transparent, + calc(var(--pixel) * 5) calc(var(--pixel) * 14) 0 transparent, + calc(var(--pixel) * 6) calc(var(--pixel) * 14) 0 var(--c-1), + calc(var(--pixel) * 7) calc(var(--pixel) * 14) 0 var(--c-1), + calc(var(--pixel) * 8) calc(var(--pixel) * 14) 0 var(--c-1), + calc(var(--pixel) * 9) calc(var(--pixel) * 14) 0 transparent, + calc(var(--pixel) * 10) calc(var(--pixel) * 14) 0 transparent, + calc(var(--pixel) * 11) calc(var(--pixel) * 14) 0 var(--c-1), + calc(var(--pixel) * 12) calc(var(--pixel) * 14) 0 var(--c-1), + calc(var(--pixel) * 13) calc(var(--pixel) * 14) 0 var(--c-1), + calc(var(--pixel) * 14) calc(var(--pixel) * 14) 0 transparent, + calc(var(--pixel) * 15) calc(var(--pixel) * 14) 0 transparent, + calc(var(--pixel) * 16) calc(var(--pixel) * 14) 0 transparent, + + /* r:15 */ + calc(var(--pixel) * 1) calc(var(--pixel) * 15) 0 transparent, + calc(var(--pixel) * 2) calc(var(--pixel) * 15) 0 transparent, + calc(var(--pixel) * 3) calc(var(--pixel) * 15) 0 transparent, + calc(var(--pixel) * 4) calc(var(--pixel) * 15) 0 transparent, + calc(var(--pixel) * 5) calc(var(--pixel) * 15) 0 var(--c-3), + calc(var(--pixel) * 6) calc(var(--pixel) * 15) 0 var(--c-3), + calc(var(--pixel) * 7) calc(var(--pixel) * 15) 0 var(--c-3), + calc(var(--pixel) * 8) calc(var(--pixel) * 15) 0 transparent, + calc(var(--pixel) * 9) calc(var(--pixel) * 15) 0 transparent, + calc(var(--pixel) * 10) calc(var(--pixel) * 15) 0 transparent, + calc(var(--pixel) * 11) calc(var(--pixel) * 15) 0 transparent, + calc(var(--pixel) * 12) calc(var(--pixel) * 15) 0 var(--c-3), + calc(var(--pixel) * 13) calc(var(--pixel) * 15) 0 var(--c-3), + calc(var(--pixel) * 14) calc(var(--pixel) * 15) 0 var(--c-3), + calc(var(--pixel) * 15) calc(var(--pixel) * 15) 0 transparent, + calc(var(--pixel) * 16) calc(var(--pixel) * 15) 0 transparent, + + /* r:16 */ + calc(var(--pixel) * 1) calc(var(--pixel) * 16) 0 transparent, + calc(var(--pixel) * 2) calc(var(--pixel) * 16) 0 transparent, + calc(var(--pixel) * 3) calc(var(--pixel) * 16) 0 transparent, + calc(var(--pixel) * 4) calc(var(--pixel) * 16) 0 var(--c-3), + calc(var(--pixel) * 5) calc(var(--pixel) * 16) 0 var(--c-3), + calc(var(--pixel) * 6) calc(var(--pixel) * 16) 0 var(--c-3), + calc(var(--pixel) * 7) calc(var(--pixel) * 16) 0 var(--c-3), + calc(var(--pixel) * 8) calc(var(--pixel) * 16) 0 transparent, + calc(var(--pixel) * 9) calc(var(--pixel) * 16) 0 transparent, + calc(var(--pixel) * 10) calc(var(--pixel) * 16) 0 transparent, + calc(var(--pixel) * 11) calc(var(--pixel) * 16) 0 transparent, + calc(var(--pixel) * 12) calc(var(--pixel) * 16) 0 var(--c-3), + calc(var(--pixel) * 13) calc(var(--pixel) * 16) 0 var(--c-3), + calc(var(--pixel) * 14) calc(var(--pixel) * 16) 0 var(--c-3), + calc(var(--pixel) * 15) calc(var(--pixel) * 16) 0 var(--c-3), + calc(var(--pixel) * 16) calc(var(--pixel) * 16) 0 transparent; + } + + 25%, 75% { + box-shadow: + /* r:1 */ + calc(var(--pixel) * 1) calc(var(--pixel) * 1) 0 transparent, + calc(var(--pixel) * 2) calc(var(--pixel) * 1) 0 transparent, + calc(var(--pixel) * 3) calc(var(--pixel) * 1) 0 transparent, + calc(var(--pixel) * 4) calc(var(--pixel) * 1) 0 transparent, + calc(var(--pixel) * 5) calc(var(--pixel) * 1) 0 transparent, + calc(var(--pixel) * 6) calc(var(--pixel) * 1) 0 transparent, + calc(var(--pixel) * 7) calc(var(--pixel) * 1) 0 transparent, + calc(var(--pixel) * 8) calc(var(--pixel) * 1) 0 transparent, + calc(var(--pixel) * 9) calc(var(--pixel) * 1) 0 transparent, + calc(var(--pixel) * 10) calc(var(--pixel) * 1) 0 transparent, + calc(var(--pixel) * 11) calc(var(--pixel) * 1) 0 transparent, + calc(var(--pixel) * 12) calc(var(--pixel) * 1) 0 transparent, + calc(var(--pixel) * 13) calc(var(--pixel) * 1) 0 transparent, + calc(var(--pixel) * 14) calc(var(--pixel) * 1) 0 var(--c-2), + calc(var(--pixel) * 15) calc(var(--pixel) * 1) 0 var(--c-2), + calc(var(--pixel) * 16) calc(var(--pixel) * 1) 0 var(--c-2), + + /* r:2 */ + calc(var(--pixel) * 1) calc(var(--pixel) * 2) 0 transparent, + calc(var(--pixel) * 2) calc(var(--pixel) * 2) 0 transparent, + calc(var(--pixel) * 3) calc(var(--pixel) * 2) 0 transparent, + calc(var(--pixel) * 4) calc(var(--pixel) * 2) 0 transparent, + calc(var(--pixel) * 5) calc(var(--pixel) * 2) 0 transparent, + calc(var(--pixel) * 6) calc(var(--pixel) * 2) 0 transparent, + calc(var(--pixel) * 7) calc(var(--pixel) * 2) 0 var(--c-1), + calc(var(--pixel) * 8) calc(var(--pixel) * 2) 0 var(--c-1), + calc(var(--pixel) * 9) calc(var(--pixel) * 2) 0 var(--c-1), + calc(var(--pixel) * 10) calc(var(--pixel) * 2) 0 var(--c-1), + calc(var(--pixel) * 11) calc(var(--pixel) * 2) 0 var(--c-1), + calc(var(--pixel) * 12) calc(var(--pixel) * 2) 0 transparent, + calc(var(--pixel) * 13) calc(var(--pixel) * 2) 0 transparent, + calc(var(--pixel) * 14) calc(var(--pixel) * 2) 0 var(--c-2), + calc(var(--pixel) * 15) calc(var(--pixel) * 2) 0 var(--c-2), + calc(var(--pixel) * 16) calc(var(--pixel) * 2) 0 var(--c-2), + + /* r:3 */ + calc(var(--pixel) * 1) calc(var(--pixel) * 3) 0 transparent, + calc(var(--pixel) * 2) calc(var(--pixel) * 3) 0 transparent, + calc(var(--pixel) * 3) calc(var(--pixel) * 3) 0 transparent, + calc(var(--pixel) * 4) calc(var(--pixel) * 3) 0 transparent, + calc(var(--pixel) * 5) calc(var(--pixel) * 3) 0 transparent, + calc(var(--pixel) * 6) calc(var(--pixel) * 3) 0 var(--c-1), + calc(var(--pixel) * 7) calc(var(--pixel) * 3) 0 var(--c-1), + calc(var(--pixel) * 8) calc(var(--pixel) * 3) 0 var(--c-1), + calc(var(--pixel) * 9) calc(var(--pixel) * 3) 0 var(--c-1), + calc(var(--pixel) * 10) calc(var(--pixel) * 3) 0 var(--c-1), + calc(var(--pixel) * 11) calc(var(--pixel) * 3) 0 var(--c-1), + calc(var(--pixel) * 12) calc(var(--pixel) * 3) 0 var(--c-1), + calc(var(--pixel) * 13) calc(var(--pixel) * 3) 0 var(--c-1), + calc(var(--pixel) * 14) calc(var(--pixel) * 3) 0 var(--c-1), + calc(var(--pixel) * 15) calc(var(--pixel) * 3) 0 var(--c-2), + calc(var(--pixel) * 16) calc(var(--pixel) * 3) 0 var(--c-2), + + /* r:4 */ + calc(var(--pixel) * 1) calc(var(--pixel) * 4) 0 transparent, + calc(var(--pixel) * 2) calc(var(--pixel) * 4) 0 transparent, + calc(var(--pixel) * 3) calc(var(--pixel) * 4) 0 transparent, + calc(var(--pixel) * 4) calc(var(--pixel) * 4) 0 transparent, + calc(var(--pixel) * 5) calc(var(--pixel) * 4) 0 transparent, + calc(var(--pixel) * 6) calc(var(--pixel) * 4) 0 var(--c-3), + calc(var(--pixel) * 7) calc(var(--pixel) * 4) 0 var(--c-3), + calc(var(--pixel) * 8) calc(var(--pixel) * 4) 0 var(--c-3), + calc(var(--pixel) * 9) calc(var(--pixel) * 4) 0 var(--c-2), + calc(var(--pixel) * 10) calc(var(--pixel) * 4) 0 var(--c-2), + calc(var(--pixel) * 11) calc(var(--pixel) * 4) 0 var(--c-3), + calc(var(--pixel) * 12) calc(var(--pixel) * 4) 0 var(--c-2), + calc(var(--pixel) * 13) calc(var(--pixel) * 4) 0 transparent, + calc(var(--pixel) * 14) calc(var(--pixel) * 4) 0 var(--c-2), + calc(var(--pixel) * 15) calc(var(--pixel) * 4) 0 var(--c-2), + calc(var(--pixel) * 16) calc(var(--pixel) * 4) 0 var(--c-2), + + /* r:5 */ + calc(var(--pixel) * 1) calc(var(--pixel) * 5) 0 transparent, + calc(var(--pixel) * 2) calc(var(--pixel) * 5) 0 transparent, + calc(var(--pixel) * 3) calc(var(--pixel) * 5) 0 transparent, + calc(var(--pixel) * 4) calc(var(--pixel) * 5) 0 transparent, + calc(var(--pixel) * 5) calc(var(--pixel) * 5) 0 var(--c-3), + calc(var(--pixel) * 6) calc(var(--pixel) * 5) 0 var(--c-2), + calc(var(--pixel) * 7) calc(var(--pixel) * 5) 0 var(--c-3), + calc(var(--pixel) * 8) calc(var(--pixel) * 5) 0 var(--c-2), + calc(var(--pixel) * 9) calc(var(--pixel) * 5) 0 var(--c-2), + calc(var(--pixel) * 10) calc(var(--pixel) * 5) 0 var(--c-2), + calc(var(--pixel) * 11) calc(var(--pixel) * 5) 0 var(--c-3), + calc(var(--pixel) * 12) calc(var(--pixel) * 5) 0 var(--c-2), + calc(var(--pixel) * 13) calc(var(--pixel) * 5) 0 var(--c-2), + calc(var(--pixel) * 14) calc(var(--pixel) * 5) 0 var(--c-2), + calc(var(--pixel) * 15) calc(var(--pixel) * 5) 0 var(--c-3), + calc(var(--pixel) * 16) calc(var(--pixel) * 5) 0 var(--c-3), + + /* r:6 */ + calc(var(--pixel) * 1) calc(var(--pixel) * 6) 0 transparent, + calc(var(--pixel) * 2) calc(var(--pixel) * 6) 0 transparent, + calc(var(--pixel) * 3) calc(var(--pixel) * 6) 0 transparent, + calc(var(--pixel) * 4) calc(var(--pixel) * 6) 0 transparent, + calc(var(--pixel) * 5) calc(var(--pixel) * 6) 0 var(--c-3), + calc(var(--pixel) * 6) calc(var(--pixel) * 6) 0 var(--c-2), + calc(var(--pixel) * 7) calc(var(--pixel) * 6) 0 var(--c-3), + calc(var(--pixel) * 8) calc(var(--pixel) * 6) 0 var(--c-3), + calc(var(--pixel) * 9) calc(var(--pixel) * 6) 0 var(--c-2), + calc(var(--pixel) * 10) calc(var(--pixel) * 6) 0 var(--c-2), + calc(var(--pixel) * 11) calc(var(--pixel) * 6) 0 var(--c-2), + calc(var(--pixel) * 12) calc(var(--pixel) * 6) 0 var(--c-3), + calc(var(--pixel) * 13) calc(var(--pixel) * 6) 0 var(--c-2), + calc(var(--pixel) * 14) calc(var(--pixel) * 6) 0 var(--c-2), + calc(var(--pixel) * 15) calc(var(--pixel) * 6) 0 var(--c-2), + calc(var(--pixel) * 16) calc(var(--pixel) * 6) 0 var(--c-3), + + /* r:7 */ + calc(var(--pixel) * 1) calc(var(--pixel) * 7) 0 transparent, + calc(var(--pixel) * 2) calc(var(--pixel) * 7) 0 transparent, + calc(var(--pixel) * 3) calc(var(--pixel) * 7) 0 transparent, + calc(var(--pixel) * 4) calc(var(--pixel) * 7) 0 transparent, + calc(var(--pixel) * 5) calc(var(--pixel) * 7) 0 var(--c-3), + calc(var(--pixel) * 6) calc(var(--pixel) * 7) 0 var(--c-3), + calc(var(--pixel) * 7) calc(var(--pixel) * 7) 0 var(--c-2), + calc(var(--pixel) * 8) calc(var(--pixel) * 7) 0 var(--c-2), + calc(var(--pixel) * 9) calc(var(--pixel) * 7) 0 var(--c-2), + calc(var(--pixel) * 10) calc(var(--pixel) * 7) 0 var(--c-2), + calc(var(--pixel) * 11) calc(var(--pixel) * 7) 0 var(--c-3), + calc(var(--pixel) * 12) calc(var(--pixel) * 7) 0 var(--c-3), + calc(var(--pixel) * 13) calc(var(--pixel) * 7) 0 var(--c-3), + calc(var(--pixel) * 14) calc(var(--pixel) * 7) 0 var(--c-3), + calc(var(--pixel) * 15) calc(var(--pixel) * 7) 0 transparent, + calc(var(--pixel) * 16) calc(var(--pixel) * 7) 0 transparent, + + /* r:8 */ + calc(var(--pixel) * 1) calc(var(--pixel) * 8) 0 transparent, + calc(var(--pixel) * 2) calc(var(--pixel) * 8) 0 transparent, + calc(var(--pixel) * 3) calc(var(--pixel) * 8) 0 transparent, + calc(var(--pixel) * 4) calc(var(--pixel) * 8) 0 transparent, + calc(var(--pixel) * 5) calc(var(--pixel) * 8) 0 transparent, + calc(var(--pixel) * 6) calc(var(--pixel) * 8) 0 transparent, + calc(var(--pixel) * 7) calc(var(--pixel) * 8) 0 var(--c-2), + calc(var(--pixel) * 8) calc(var(--pixel) * 8) 0 var(--c-2), + calc(var(--pixel) * 9) calc(var(--pixel) * 8) 0 var(--c-2), + calc(var(--pixel) * 10) calc(var(--pixel) * 8) 0 var(--c-2), + calc(var(--pixel) * 11) calc(var(--pixel) * 8) 0 var(--c-2), + calc(var(--pixel) * 12) calc(var(--pixel) * 8) 0 var(--c-2), + calc(var(--pixel) * 13) calc(var(--pixel) * 8) 0 var(--c-2), + calc(var(--pixel) * 14) calc(var(--pixel) * 8) 0 transparent, + calc(var(--pixel) * 15) calc(var(--pixel) * 8) 0 transparent, + calc(var(--pixel) * 16) calc(var(--pixel) * 8) 0 transparent, + + /* r:9 */ + calc(var(--pixel) * 1) calc(var(--pixel) * 9) 0 transparent, + calc(var(--pixel) * 2) calc(var(--pixel) * 9) 0 transparent, + calc(var(--pixel) * 3) calc(var(--pixel) * 9) 0 var(--c-3), + calc(var(--pixel) * 4) calc(var(--pixel) * 9) 0 var(--c-3), + calc(var(--pixel) * 5) calc(var(--pixel) * 9) 0 var(--c-3), + calc(var(--pixel) * 6) calc(var(--pixel) * 9) 0 var(--c-3), + calc(var(--pixel) * 7) calc(var(--pixel) * 9) 0 var(--c-3), + calc(var(--pixel) * 8) calc(var(--pixel) * 9) 0 var(--c-1), + calc(var(--pixel) * 9) calc(var(--pixel) * 9) 0 var(--c-3), + calc(var(--pixel) * 10) calc(var(--pixel) * 9) 0 var(--c-3), + calc(var(--pixel) * 11) calc(var(--pixel) * 9) 0 var(--c-3), + calc(var(--pixel) * 12) calc(var(--pixel) * 9) 0 var(--c-1), + calc(var(--pixel) * 13) calc(var(--pixel) * 9) 0 var(--c-3), + calc(var(--pixel) * 14) calc(var(--pixel) * 9) 0 transparent, + calc(var(--pixel) * 15) calc(var(--pixel) * 9) 0 transparent, + calc(var(--pixel) * 16) calc(var(--pixel) * 9) 0 transparent, + + /* r:10 */ + calc(var(--pixel) * 1) calc(var(--pixel) * 10) 0 transparent, + calc(var(--pixel) * 2) calc(var(--pixel) * 10) 0 var(--c-3), + calc(var(--pixel) * 3) calc(var(--pixel) * 10) 0 var(--c-3), + calc(var(--pixel) * 4) calc(var(--pixel) * 10) 0 var(--c-3), + calc(var(--pixel) * 5) calc(var(--pixel) * 10) 0 var(--c-3), + calc(var(--pixel) * 6) calc(var(--pixel) * 10) 0 var(--c-3), + calc(var(--pixel) * 7) calc(var(--pixel) * 10) 0 var(--c-3), + calc(var(--pixel) * 8) calc(var(--pixel) * 10) 0 var(--c-1), + calc(var(--pixel) * 9) calc(var(--pixel) * 10) 0 var(--c-3), + calc(var(--pixel) * 10) calc(var(--pixel) * 10) 0 var(--c-3), + calc(var(--pixel) * 11) calc(var(--pixel) * 10) 0 var(--c-3), + calc(var(--pixel) * 12) calc(var(--pixel) * 10) 0 var(--c-1), + calc(var(--pixel) * 13) calc(var(--pixel) * 10) 0 transparent, + calc(var(--pixel) * 14) calc(var(--pixel) * 10) 0 transparent, + calc(var(--pixel) * 15) calc(var(--pixel) * 10) 0 transparent, + calc(var(--pixel) * 16) calc(var(--pixel) * 10) 0 var(--c-3), + + /* r:11 */ + calc(var(--pixel) * 1) calc(var(--pixel) * 11) 0 var(--c-2), + calc(var(--pixel) * 2) calc(var(--pixel) * 11) 0 var(--c-2), + calc(var(--pixel) * 3) calc(var(--pixel) * 11) 0 var(--c-3), + calc(var(--pixel) * 4) calc(var(--pixel) * 11) 0 var(--c-3), + calc(var(--pixel) * 5) calc(var(--pixel) * 11) 0 var(--c-3), + calc(var(--pixel) * 6) calc(var(--pixel) * 11) 0 var(--c-3), + calc(var(--pixel) * 7) calc(var(--pixel) * 11) 0 var(--c-3), + calc(var(--pixel) * 8) calc(var(--pixel) * 11) 0 var(--c-3), + calc(var(--pixel) * 9) calc(var(--pixel) * 11) 0 var(--c-1), + calc(var(--pixel) * 10) calc(var(--pixel) * 11) 0 var(--c-1), + calc(var(--pixel) * 11) calc(var(--pixel) * 11) 0 var(--c-1), + calc(var(--pixel) * 12) calc(var(--pixel) * 11) 0 var(--c-1), + calc(var(--pixel) * 13) calc(var(--pixel) * 11) 0 var(--c-1), + calc(var(--pixel) * 14) calc(var(--pixel) * 11) 0 transparent, + calc(var(--pixel) * 15) calc(var(--pixel) * 11) 0 transparent, + calc(var(--pixel) * 16) calc(var(--pixel) * 11) 0 var(--c-3), + + /* r:12 */ + calc(var(--pixel) * 1) calc(var(--pixel) * 12) 0 var(--c-2), + calc(var(--pixel) * 2) calc(var(--pixel) * 12) 0 var(--c-2), + calc(var(--pixel) * 3) calc(var(--pixel) * 12) 0 var(--c-2), + calc(var(--pixel) * 4) calc(var(--pixel) * 12) 0 transparent, + calc(var(--pixel) * 5) calc(var(--pixel) * 12) 0 transparent, + calc(var(--pixel) * 6) calc(var(--pixel) * 12) 0 var(--c-1), + calc(var(--pixel) * 7) calc(var(--pixel) * 12) 0 var(--c-3), + calc(var(--pixel) * 8) calc(var(--pixel) * 12) 0 var(--c-1), + calc(var(--pixel) * 9) calc(var(--pixel) * 12) 0 var(--c-1), + calc(var(--pixel) * 10) calc(var(--pixel) * 12) 0 var(--c-1), + calc(var(--pixel) * 11) calc(var(--pixel) * 12) 0 var(--c-2), + calc(var(--pixel) * 12) calc(var(--pixel) * 12) 0 var(--c-1), + calc(var(--pixel) * 13) calc(var(--pixel) * 12) 0 var(--c-2), + calc(var(--pixel) * 14) calc(var(--pixel) * 12) 0 var(--c-1), + calc(var(--pixel) * 15) calc(var(--pixel) * 12) 0 var(--c-3), + calc(var(--pixel) * 16) calc(var(--pixel) * 12) 0 var(--c-3), + + /* r:13 */ + calc(var(--pixel) * 1) calc(var(--pixel) * 13) 0 transparent, + calc(var(--pixel) * 2) calc(var(--pixel) * 13) 0 var(--c-2), + calc(var(--pixel) * 3) calc(var(--pixel) * 13) 0 transparent, + calc(var(--pixel) * 4) calc(var(--pixel) * 13) 0 var(--c-3), + calc(var(--pixel) * 5) calc(var(--pixel) * 13) 0 transparent, + calc(var(--pixel) * 6) calc(var(--pixel) * 13) 0 var(--c-1), + calc(var(--pixel) * 7) calc(var(--pixel) * 13) 0 var(--c-1), + calc(var(--pixel) * 8) calc(var(--pixel) * 13) 0 var(--c-1), + calc(var(--pixel) * 9) calc(var(--pixel) * 13) 0 var(--c-1), + calc(var(--pixel) * 10) calc(var(--pixel) * 13) 0 var(--c-1), + calc(var(--pixel) * 11) calc(var(--pixel) * 13) 0 var(--c-1), + calc(var(--pixel) * 12) calc(var(--pixel) * 13) 0 var(--c-1), + calc(var(--pixel) * 13) calc(var(--pixel) * 13) 0 var(--c-1), + calc(var(--pixel) * 14) calc(var(--pixel) * 13) 0 var(--c-1), + calc(var(--pixel) * 15) calc(var(--pixel) * 13) 0 var(--c-3), + calc(var(--pixel) * 16) calc(var(--pixel) * 13) 0 var(--c-3), + + /* r:14 */ + calc(var(--pixel) * 1) calc(var(--pixel) * 14) 0 transparent, + calc(var(--pixel) * 2) calc(var(--pixel) * 14) 0 transparent, + calc(var(--pixel) * 3) calc(var(--pixel) * 14) 0 var(--c-3), + calc(var(--pixel) * 4) calc(var(--pixel) * 14) 0 var(--c-3), + calc(var(--pixel) * 5) calc(var(--pixel) * 14) 0 var(--c-3), + calc(var(--pixel) * 6) calc(var(--pixel) * 14) 0 var(--c-1), + calc(var(--pixel) * 7) calc(var(--pixel) * 14) 0 var(--c-1), + calc(var(--pixel) * 8) calc(var(--pixel) * 14) 0 var(--c-1), + calc(var(--pixel) * 9) calc(var(--pixel) * 14) 0 var(--c-1), + calc(var(--pixel) * 10) calc(var(--pixel) * 14) 0 var(--c-1), + calc(var(--pixel) * 11) calc(var(--pixel) * 14) 0 var(--c-1), + calc(var(--pixel) * 12) calc(var(--pixel) * 14) 0 var(--c-1), + calc(var(--pixel) * 13) calc(var(--pixel) * 14) 0 var(--c-1), + calc(var(--pixel) * 14) calc(var(--pixel) * 14) 0 var(--c-1), + calc(var(--pixel) * 15) calc(var(--pixel) * 14) 0 var(--c-3), + calc(var(--pixel) * 16) calc(var(--pixel) * 14) 0 var(--c-3), + + /* r:15 */ + calc(var(--pixel) * 1) calc(var(--pixel) * 15) 0 transparent, + calc(var(--pixel) * 2) calc(var(--pixel) * 15) 0 var(--c-3), + calc(var(--pixel) * 3) calc(var(--pixel) * 15) 0 var(--c-3), + calc(var(--pixel) * 4) calc(var(--pixel) * 15) 0 var(--c-3), + calc(var(--pixel) * 5) calc(var(--pixel) * 15) 0 var(--c-1), + calc(var(--pixel) * 6) calc(var(--pixel) * 15) 0 var(--c-1), + calc(var(--pixel) * 7) calc(var(--pixel) * 15) 0 var(--c-1), + calc(var(--pixel) * 8) calc(var(--pixel) * 15) 0 var(--c-1), + calc(var(--pixel) * 9) calc(var(--pixel) * 15) 0 var(--c-1), + calc(var(--pixel) * 10) calc(var(--pixel) * 15) 0 var(--c-1), + calc(var(--pixel) * 11) calc(var(--pixel) * 15) 0 var(--c-1), + calc(var(--pixel) * 12) calc(var(--pixel) * 15) 0 var(--c-1), + calc(var(--pixel) * 13) calc(var(--pixel) * 15) 0 transparent, + calc(var(--pixel) * 14) calc(var(--pixel) * 15) 0 transparent, + calc(var(--pixel) * 15) calc(var(--pixel) * 15) 0 transparent, + calc(var(--pixel) * 16) calc(var(--pixel) * 15) 0 transparent, + + /* r:16 */ + calc(var(--pixel) * 1) calc(var(--pixel) * 16) 0 transparent, + calc(var(--pixel) * 2) calc(var(--pixel) * 16) 0 var(--c-3), + calc(var(--pixel) * 3) calc(var(--pixel) * 16) 0 transparent, + calc(var(--pixel) * 4) calc(var(--pixel) * 16) 0 transparent, + calc(var(--pixel) * 5) calc(var(--pixel) * 16) 0 var(--c-1), + calc(var(--pixel) * 6) calc(var(--pixel) * 16) 0 var(--c-1), + calc(var(--pixel) * 7) calc(var(--pixel) * 16) 0 var(--c-1), + calc(var(--pixel) * 8) calc(var(--pixel) * 16) 0 var(--c-1), + calc(var(--pixel) * 9) calc(var(--pixel) * 16) 0 transparent, + calc(var(--pixel) * 10) calc(var(--pixel) * 16) 0 transparent, + calc(var(--pixel) * 11) calc(var(--pixel) * 16) 0 transparent, + calc(var(--pixel) * 12) calc(var(--pixel) * 16) 0 transparent, + calc(var(--pixel) * 13) calc(var(--pixel) * 16) 0 transparent, + calc(var(--pixel) * 14) calc(var(--pixel) * 16) 0 transparent, + calc(var(--pixel) * 15) calc(var(--pixel) * 16) 0 transparent, + calc(var(--pixel) * 16) calc(var(--pixel) * 16) 0 transparent; + } +} + +/*加载画面的进度条框*/ +body:not(.default-loading-page) .progress-bar-line { + display: none; +} + +/*加载画面的进度条*/ +body:not(.default-loading-page) .progress-bar-subline { + display: none; +} + +/* ================================== */ +/* ======= Banner ======= */ +/* ================================== */ + +.show-inline-title .obsidian-banner-wrapper.has-banner-icon .obsidian-banner-icon.v-center, +.show-inline-title .obsidian-banner-wrapper.has-banner-icon .obsidian-banner-icon.v-custom { + margin-top: calc(-1em - 6px); +} +.show-inline-title .obsidian-banner-wrapper.has-banner-icon .obsidian-banner-icon.v-above { + margin-top: calc(-2em - 12px); +} +/* ====cssclass background 属性可以使得banner作为笔记背景 ===== */ +.markdown-preview-view.background .obsidian-banner-wrapper { + position: absolute; + width: 100%; + height: 100%; + top: 0; + bottom: 0; + left: 0; + background-size: cover; + z-index: -1; + opacity: 0.8; + background-attachment:fixed; +} + +.markdown-preview-view.background .obsidian-banner { + top: -310px; + width: 100%; + height: 100%; + background-repeat: no-repeat; + background-size: cover; +} + +.is-live-preview.background .has-banner .obsidian-banner { + position: absolute!important; + width: 100%; + top: 0; + bottom: 0; + left: 0; + background-size: cover; + z-index: -1; +} +.is-live-preview.background .has-banner .cm-hmd-frontmatter { + display: none; +} +.is-live-preview.background .has-banner .obsidian-banner.cm6-banner { + opacity: 0.5; + height: 100%; +} + +:is(.markdown-preview-view,.markdown-rendered) img.banner-image.full-width{ + max-width: none; +} +/* ==修复新弹出窗口banner位置错位===================== */ +body.is-popout-window { + --banner-height: 300px; + --banner-internal-embed-height: 200px; + --banner-preview-embed-height: 120px; +} + + +/* ================================== */ +/* =======Tasks======= */ +/* ================================== */ +:is(.markdown-preview-view,.markdown-rendered) .tasks-backlink>.internal-link.internal-link-short-mode { + font-size: 0; +} +:is(.markdown-preview-view,.markdown-rendered) .tasks-backlink>.internal-link.internal-link-short-mode::before { + content: ""; + background-image: url("data:image/svg+xml,%3Csvg width='' height='' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M330.97 451.71l-120.70 120.70a170.67 170.67 0 0 0 235.22 247.21l6.14-5.89 120.70-120.66 60.33 60.33-120.70 120.70A256 256 0 1 1 149.93 512l120.70-120.66 60.33 60.33z m301.70-60.33a42.67 42.67 0 0 1 0 60.33l-181.03 181.03a42.67 42.67 0 0 1-60.33-60.33l181.03-181.03a42.67 42.67 0 0 1 60.33 0z m241.37-241.37a256 256 0 0 1 0 362.03l-120.70 120.70-60.33-60.33 120.70-120.70a170.67 170.67 0 0 0-235.22-247.21l-6.14 5.85-120.70 120.70-60.33-60.33L512 150.02a256 256 0 0 1 362.03 0z' fill='%230061b0'/%3E%3C/svg%3E"); + background-size: 16px 16px; + transform: translate(0, 2px); + background-repeat: no-repeat; + display: inline-block; + height: 16px; + width: 16px; +} + +a.tasks-edit { + background-color: var(--text-accent); + mask-image: url("data:image/svg+xml,%3Csvg width='' height='' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M247.47 851.91c-7.11 0-14.22-2.84-19.91-8.53-7.11-7.11-9.96-15.64-8.53-25.6l34.13-184.89c1.42-5.69 4.27-11.38 8.53-14.22l345.6-345.6c52.62-52.62 137.96-52.62 190.58 0 25.6 25.6 39.82 59.73 39.82 95.29s-14.22 69.69-39.82 95.29L453.69 809.24c-4.27 4.27-8.53 7.11-14.22 8.53l-184.89 34.13h-7.11z m186.31-62.58z m-125.16-137.96l-25.6 136.53 136.53-25.6 338.49-338.49c14.22-14.22 22.76-34.13 22.76-55.47s-8.53-39.82-22.76-55.47c-29.87-29.87-79.64-29.87-110.93 0L308.62 651.38z' fill='%230061b0'/%3E%3Cpath d='M739.56 510.58c-7.11 0-14.22-2.84-19.91-8.53L568.89 351.29c-11.38-11.38-11.38-28.44 0-39.82 11.38-11.38 28.44-11.38 39.82 0l150.76 150.76c11.38 11.38 11.38 28.44 0 39.82-4.27 5.69-12.8 8.53-19.91 8.53z' fill='%230061b0'/%3E%3Cpath d='M797.87 860.44H593.07c-15.64 0-28.44-12.8-28.44-28.44s12.8-28.44 28.44-28.44h204.8c15.64 0 28.44 12.8 28.44 28.44s-12.8 28.44-28.44 28.44z' fill='%230061b0'/%3E%3C/svg%3E"); + -webkit-mask-image: url("data:image/svg+xml,%3Csvg width='' height='' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M247.47 851.91c-7.11 0-14.22-2.84-19.91-8.53-7.11-7.11-9.96-15.64-8.53-25.6l34.13-184.89c1.42-5.69 4.27-11.38 8.53-14.22l345.6-345.6c52.62-52.62 137.96-52.62 190.58 0 25.6 25.6 39.82 59.73 39.82 95.29s-14.22 69.69-39.82 95.29L453.69 809.24c-4.27 4.27-8.53 7.11-14.22 8.53l-184.89 34.13h-7.11z m186.31-62.58z m-125.16-137.96l-25.6 136.53 136.53-25.6 338.49-338.49c14.22-14.22 22.76-34.13 22.76-55.47s-8.53-39.82-22.76-55.47c-29.87-29.87-79.64-29.87-110.93 0L308.62 651.38z' fill='%230061b0'/%3E%3Cpath d='M739.56 510.58c-7.11 0-14.22-2.84-19.91-8.53L568.89 351.29c-11.38-11.38-11.38-28.44 0-39.82 11.38-11.38 28.44-11.38 39.82 0l150.76 150.76c11.38 11.38 11.38 28.44 0 39.82-4.27 5.69-12.8 8.53-19.91 8.53z' fill='%230061b0'/%3E%3Cpath d='M797.87 860.44H593.07c-15.64 0-28.44-12.8-28.44-28.44s12.8-28.44 28.44-28.44h204.8c15.64 0 28.44 12.8 28.44 28.44s-12.8 28.44-28.44 28.44z' fill='%230061b0'/%3E%3C/svg%3E"); + display: inline-block; + transform: translate(0, -1px); + background-size: 25px 20px; + height: 20px; + width: 20px; + margin-left: -0.1em; + cursor: pointer; +} + +/* ================================== */ +/* ======= Hover editor======= */ +/* ================================== */ +body.theme-light .popover.hover-popover:not(.is-loaded) { + box-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); +} + +body .popover.hover-popover:not(.is-loaded) :is(.markdown-preview-view,.markdown-rendered), +.popover.hover-popover:not(.is-loaded) .markdown-source-view .cm-scroller { + padding: 5px 32px 0; +} + +body.theme-dark .popover.hover-popover:not(.is-loaded) { + box-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); +} + +/* ================================== */ +/* ======= custom cssclass ======= */ +/* ========fullwidth noyaml noscroll================ */ +/*主页预览宽度*/ +:is(.markdown-preview-view,.markdown-rendered).fullwidth.is-readable-line-width .markdown-preview-sizer, +.markdown-source-view.is-readable-line-width.fullwidth .CodeMirror, +.is-readable-line-width.fullwidth :is(.markdown-preview-section,.markdown-rendered), +.is-readable-line-width.fullwidth :is(.markdown-preview-section,.markdown-rendered) > div, +:is(.markdown-preview-view,.markdown-rendered).is-readable-line-width.fullwidth :is(.markdown-preview-section,.markdown-rendered) { + width: 100% !important; + max-width: 100% !important; + /* margin: 0 auto; */ +} + + +/*隐藏backlinks区域*/ +:is(.markdown-preview-view,.markdown-rendered).nobacklinks .embedded-backlinks { + display: none; +} +/*隐藏yaml区域*/ +:is(.markdown-preview-view,.markdown-rendered).noyaml div>.language-yaml { + display: none; +} +:is(.markdown-preview-view,.markdown-rendered).noyaml div>:is(.metadata-container,.frontmatter-container) { + display: none; +} +/*隐藏滚动条*/ +:is(.markdown-preview-view,.markdown-rendered).noscroll::-webkit-scrollbar { + display: none; +} +/*无序列表分栏(配合伪看板使用)*/ +.theme-dark .gridlist ul>li a { + color:var(--text-folder-file) !important; +} + +.gridlist ul ul { + display: grid; + grid-template-columns: repeat(2, minmax(10px, 1fr)); + gap: 0.5rem; +} +.gridlist ul>li:not(.task-list-item) { + padding:0.2em 1em 0.2em 0.8em; + margin: 0px!important; +} +.gridlist ul>li>p:not(.task-list-item) { + margin-top: 0.55em; + margin-bottom: 0.55em; +} +.gridlist ul>li strong::before { + content: ''; + background-image: url("data:image/svg+xml,%3Csvg t='1626092983490' class='icon' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='3709' width='200' height='200'%3E%3Cpath d='M444.88192 549.376h529.72544v263.5776a48.83456 48.83456 0 0 1-48.7936 48.88064H303.48288v-170.80832A141.53216 141.53216 0 0 1 444.88192 549.376z' fill='%23F4CA1C' p-id='3710'%3E%3C/path%3E%3Cpath d='M890.83904 196.80256h-269.85984a2.23744 2.23744 0 0 1-1.024-0.24064l-160.48128-80.384A82.176 82.176 0 0 0 422.81984 107.52H133.16096A82.11968 82.11968 0 0 0 51.2 189.60896v644.78208A82.11968 82.11968 0 0 0 133.16096 916.48h757.67808A82.11968 82.11968 0 0 0 972.8 834.39104V278.89152a82.11968 82.11968 0 0 0-81.96096-82.08896z m-757.67808-9.472h289.65888a2.24768 2.24768 0 0 1 1.024 0.24064l160.49664 80.384a82.304 82.304 0 0 0 36.65408 8.66816h269.85984a2.2784 2.2784 0 0 1 2.27328 2.27328v91.51488H130.88768V189.60896a2.2784 2.2784 0 0 1 2.27328-2.2784z m757.67808 649.33888H133.16096a2.2784 2.2784 0 0 1-2.27328-2.2784V450.22208h762.22464v384.16896a2.2784 2.2784 0 0 1-2.27328 2.2784z' fill='%23595BB3' p-id='3711'%3E%3C/path%3E%3C/svg%3E"); + background-size: 14px 14px; + background-repeat: no-repeat; + display: inline-block; + height: 13px; + width: 13px; + margin-right: 5px; + margin-left:-5px; +} + +.gridlist ul ul ul{ + display:flex; +} +.gridlist ul ul li:hover { + background: var(--background-secondary-translucent) !important; + border-color: var(--p-kanban-border-color) !important; + border-left: 1px solid var(--p-kanban-border-color) !important; +} + + +.gridlist ul li a[href$=".js"]::before { + font-family:var(--font-family-inline-code); + content: 'JS'; + color: var(--text-faint); + margin-right: 5px; + font-size:10px; +} +.gridlist ul li a[href$=".css"]::before { + font-family:var(--font-family-inline-code); + content: 'CSS'; + color: var(--text-faint); + margin-right: 5px; + font-size:10px; +} + +.gridlist ul li a[href$=".html"]::before { + font-family:var(--font-family-inline-code); + content: 'HTML'; + color: var(--text-faint); + margin-right: 5px; + font-size:10px; +} + +.gridlist ul li a[href$=".pdf"]::before { + font-family:var(--font-family-inline-code); + content: 'PDF'; + color: var(--text-faint); + margin-right: 5px; + font-size:10px; +} +.gridlist ul li a[href$=".mp3"]::before, +.gridlist ul li a[href$=".wav"]::before, +.gridlist ul li a[href$=".m4a"]::before, +.gridlist ul li a[href$=".ogg"]::before, +.gridlist ul li a[href$=".3gp"]::before, +.gridlist ul li a[href$=".flac"]::before { + content: ''; + background-size: 18px 18px; + background-repeat: no-repeat; + display: inline-block; + height: 18px; + width: 18px; + vertical-align: text-top; + margin-right: 5px; + background-image: url("data:image/svg+xml,%3Csvg t='1667450617533' class='icon' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='2116' width='32' height='32'%3E%3Cpath d='M512 900.8c214.4 0 388.9-174.4 388.9-388.9 0-54-11.1-105.4-31-152.1 10.1 106.6-34.1 271.1-172 382.9-143.8 116.6-375.7 80.7-477 26.6 71.2 80.6 175.3 131.5 291.1 131.5z' fill='%23FFD524' p-id='2117'%3E%3C/path%3E%3Cpath d='M512 64.2c-26.1 0-52.2 2.3-77.7 6.7-16 2.8-26.7 18.1-23.9 34.1 2.8 16 18.1 26.7 34.1 23.9 22.2-3.9 44.9-5.9 67.6-5.9 160.5 0 298.5 97.7 357.8 236.7 20 46.8 31 98.2 31 152.1 0 214.4-174.4 388.9-388.9 388.9-115.8 0-219.9-50.9-291.2-131.5-60.7-68.6-97.7-158.7-97.7-257.4 0-124.2 57.2-238 157.1-312.3 13-9.7 15.8-28.2 6.1-41.2-9.7-13-28.2-15.8-41.2-6.1C131.8 236.7 64.2 371.1 64.2 512c0 246.9 200.9 447.8 447.8 447.8S959.7 758.9 959.7 512 758.9 64.2 512 64.2z' fill='%23333333' p-id='2118'%3E%3C/path%3E%3Cpath d='M343.2 158.6c4 0 8-0.8 11.9-2.5 3.4-1.5 6.8-3 10.3-4.4 15-6.2 22.3-23.4 16.1-38.4-6.2-15-23.3-22.3-38.4-16.1-3.9 1.6-7.8 3.3-11.7 5-14.9 6.6-21.6 24-15 38.8 4.7 11 15.5 17.6 26.8 17.6zM394.6 787.4c66.2 0 120.9-50.5 127.4-115.1 0.4-2 0.7-4 0.7-6.1V313.6H663c-8 21.5-27.6 49.4-75.9 63.8-15.6 4.6-24.5 21-19.8 36.6 3.8 12.8 15.5 21.1 28.2 21.1 2.8 0 5.6-0.4 8.4-1.2C705.3 403.8 728.9 322 727.2 283c-0.7-15.8-13.6-28.2-29.4-28.2H493.3c-16.3 0-29.4 13.2-29.4 29.4v375.2c0 38.2-31.1 69.2-69.2 69.2s-69.2-31.1-69.2-69.2c0-38.2 31.1-69.2 69.2-69.2 16.3 0 29.4-13.2 29.4-29.4s-13.2-29.4-29.4-29.4c-70.6 0-128.1 57.5-128.1 128.1s57.4 127.9 128 127.9z' fill='%23333333' p-id='2119'%3E%3C/path%3E%3C/svg%3E"); +} + +.gridlist ul li a[href$=".jpg"]::before, +.gridlist ul li a[href$=".png"]::before, +.gridlist ul li a[href$=".svg"]::before, +.gridlist ul li a[href$=".gif"]::before, +.gridlist ul li a[href$=".jpeg"]::before, +.gridlist ul li a[href$=".bmp"]::before { + content: ''; + background-image: url("data:image/svg+xml,%3Csvg t='1626092464076' class='icon' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='3121' width='200' height='200'%3E%3Cpath d='M266.42944 804.352l123.3408-136.82688a37.93408 37.93408 0 0 1 53.39136-2.90304l81.6896 72.83712a37.92384 37.92384 0 0 0 56.43776-6.76864l99.92704-145.04448a37.91872 37.91872 0 0 1 58.15808-5.12l86.33856 87.31136 66.64704 72.65792-13.9264 60.18048-67.30752 25.46176-529.20832 11.5712z' fill='%23F4CA1C' p-id='3122'%3E%3C/path%3E%3Cpath d='M814.76096 148.48H209.23904A153.26208 153.26208 0 0 0 56.32 301.74208v415.40096A153.26208 153.26208 0 0 0 209.23904 870.4h605.52192A153.26208 153.26208 0 0 0 967.68 717.13792V301.74208A153.26208 153.26208 0 0 0 814.76096 148.48z m83.456 568.65792a83.62496 83.62496 0 0 1-83.456 83.62496H209.23904a83.62496 83.62496 0 0 1-83.456-83.62496V301.74208a83.62496 83.62496 0 0 1 83.456-83.63008h605.52192a83.62496 83.62496 0 0 1 83.456 83.61984v415.40096z m-137.728-298.55744a72.42752 72.42752 0 0 0-111.4112 9.87648l-99.712 145.46432a2.8672 2.8672 0 0 1-2.14528 1.29536 2.81088 2.81088 0 0 1-2.38592-0.75264L463.28832 501.41696a72.52992 72.52992 0 0 0-102.272 5.59104l-123.0848 137.216a34.77504 34.77504 0 1 0 51.67104 46.55616l123.0848-137.216a3.03104 3.03104 0 0 1 4.28544-0.2304l81.51552 73.04192a72.41728 72.41728 0 0 0 108.1088-13.02528l99.71712-145.4592a3.03104 3.03104 0 0 1 4.66432-0.41472l86.15936 87.552a34.78016 34.78016 0 1 0 49.47456-48.896z m-316.2368-33.32608a47.00672 47.00672 0 1 0-46.90432-47.00672 46.95552 46.95552 0 0 0 46.90432 47.00672z' fill='%23595BB3' p-id='3123'%3E%3C/path%3E%3C/svg%3E"); + background-size: 18px 16px; + background-repeat: no-repeat; + display: inline-block; + height: 18px; + width: 18px; + vertical-align: middle; + margin-right: 5px; +} + +.gridlist ul li a[href*=".excalidraw"]::before { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23595BB3' d='M18.404 2.998c-.757-.754-2.077-.751-2.828.005l-1.784 1.791L11.586 7H7a.998.998 0 0 0-.939.658l-4 11c-.133.365-.042.774.232 1.049l2 2a.997.997 0 0 0 1.049.232l11-4A.998.998 0 0 0 17 17v-4.586l2.207-2.207v-.001h.001L21 8.409c.378-.378.586-.881.585-1.415 0-.535-.209-1.038-.588-1.415l-2.593-2.581zm-3.111 8.295A.996.996 0 0 0 15 12v4.3l-9.249 3.363 4.671-4.671c.026.001.052.008.078.008A1.5 1.5 0 1 0 9 13.5c0 .026.007.052.008.078l-4.671 4.671L7.7 9H12c.266 0 .52-.105.707-.293L14.5 6.914 17.086 9.5l-1.793 1.793zm3.206-3.208-2.586-2.586 1.079-1.084 2.593 2.581-1.086 1.089z '%3E%3C/path%3E%3C/svg%3E"); + content: ''; + background-size: 14px 18px; + background-repeat: no-repeat; + display: inline-block; + height: 14px; + width: 14px; + margin-right: 5px; +} + +/*PDF*/ + +@media print { + code[class*='language-'], + pre[class*='language-'] { + word-wrap: break-word !important; + white-space: pre-wrap !important; + } + + th, + td { + white-space: pre-wrap !important; + /* word-break: break-word !important; */ + overflow-wrap: break-word !important; + } +/* Page breaks */ + + h2, h3, h4, h5, h6 { + page-break-after: avoid; + } + pre, blockquote { + page-break-inside: avoid; + } + + .print :not(font)>strong { + -webkit-print-color-adjust: exact; + color: var(--print-strong-color) !important; + } + + .print :not(font):not(strong)>em { + color: var(--print-em-color) !important; + } + + body.hr-for-pagination .markdown-rendered hr { + break-after: page; + visibility: hidden; + } + + body.hr-for-pagination.fancy-hr-number .markdown-rendered hr:after { + break-after: page; + visibility: visible; + } + + body.show-url-after-link a.external-link::after { + content: " (" attr(href) ") "; + } + + body.fancy-hr-icon .markdown-rendered hr { + border-image-source: linear-gradient(to right, var(--background-primary) 0%, var(--hr-color-icon-1) 30%, var(--hr-color-icon-2) 46%, transparent 46%, transparent 54%, var(--hr-color-icon-3) 54%, var(--hr-color-icon-4) 70%, var(--background-primary) 100%); + } + body.fancy-hr-no-icon .markdown-rendered hr { + border-image: linear-gradient(to right, var(--background-primary) 0%, var(--hr-color-1) 20%, var(--hr-color-2) 40%, var(--hr-color-3) 60%, var(--hr-color-4) 80%, var(--background-primary) 100%) 1; + } + + body.all-dark-pdf .print :is(.markdown-preview-view,.markdown-rendered) { + background-color: var(--background-primary) !important; + } + body.all-dark-pdf .print :is(.markdown-preview-view,.markdown-rendered) mark { + color: var(--text-highlight) !important; + } + body.all-dark-pdf .print .markdown-preview-view { + color: var(--text-normal) !important; + } + + .print .markdown-preview-view .callout.callout[data-callout="timeline"] >.callout-content { + display: grid !important; + } + .print .markdown-preview-view .callout.callout[data-callout="timeline"] .callout-content hr { + visibility: visible; + } + .print .markdown-preview-view .admonition-flex .admonition-content { + display: flex !important; + } + + body.text-indentation-two-em .print *:not(blockquote) > p { + text-indent: 2em; + } + body.text-indentation-two-em .print *:not(blockquote) > p>br { + content: ' '; + white-space: pre; + line-height: calc((var(--paragraph-spacing) + 0.3) * 1em); + display:unset; + } + body.text-indentation-two-em .print *:not(blockquote) > p>br::after { + content: '\A\9\9''; + } + body.justify-align .print *:not(blockquote) > p { + text-align: justify; + hyphens: auto; + } +} + +body.pdf-style-invert-color-light.theme-light, +body.pdf-style-invert-color-dark.theme-dark { + --pdf-background: var(--background-secondary); + --pdf-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1), 0 2px 8px transparent; + --pdf-thumbnail-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1), 0 2px 8px transparent; +} +body.pdf-style-invert-color-light.theme-light .pdf-viewer .canvasWrapper, +body.pdf-style-invert-color-dark.theme-dark .pdf-viewer .canvasWrapper, +body.pdf-style-invert-color.theme-light .pdf-thumbnail-view .thumbnailImage, +body.pdf-style-invert-color.theme-dark .pdf-thumbnail-view .thumbnailImage { + filter: invert(1) hue-rotate(180deg); +} + +body.pdf-style-green-bg-light.theme-light .pdf-viewer .textLayer, +body.pdf-style-green-bg-dark.theme-dark .pdf-viewer .textLayer { + background-color: #74c969; +} + +body.pdf-style-warm-bg-light.theme-light .pdf-viewer .textLayer, +body.pdf-style-warm-bg-dark.theme-dark .pdf-viewer .textLayer { + background-color: #f7b955; +} + +body.pdf-style-custom-bg.theme-dark { + --custom-bg-pdf-style: #; +} +body.pdf-style-custom-bg.theme-light { + --custom-bg-pdf-style: #; +} + +body.pdf-style-custom-bg .pdf-viewer .textLayer { + background-color: var(--custom-bg-pdf-style); +} + +/* ================================== */ +/* ======= Callout======= */ +/* ================================== */ +body.admonition-bg-color-same .callout { + background-color: rgba(var(--callout-color), 0.1); + border-width: var(--callout-border-width); +} +body.shade-callout-style .callout { + border:none; + box-shadow: inset 0 0 0 2px rgba(var(--callout-color), 0.25), 0px 0.5px 1px 0.5px rgba(0, 0, 0, 0.1) !important; +} +body.shade-callout-style .callout .callout-title { + padding: 6px; + background-color: rgba(var(--callout-color), 0.4); +} + +body.border-callout-style .callout { + --callout-radius: 2px; + border-left: solid 4px rgb(var(--callout-color)); +} + +body.border-callout-style .callout .callout-title { + padding: 6px; + background-color: rgba(var(--callout-color), 0.4); +} +body.border-callout-style .callout .callout-content { + background-color: rgba(var(--callout-color), 0.1); +} +.callout-title { + background-color: rgba(var(--callout-color), 0.15); +} +.callout { + padding: 0; + border-left: 4px solid rgba(var(--callout-color),0.15); + background-color:var(--admonition-bg-color); +} + +.callout-content { + padding: 5px 15px; +} +.is-live-preview .admonition-content>* br { + display: unset; +} +body.admonition-bg-color-same .callout-title { + color: rgb(var(--callout-color)); + background-color:unset; +} +.callout-title { + padding: 8px 0 8px 12px; + color: unset; +} +.admonition-title .admonition-title-icon { + color: rgb(var(--callout-color)); +} + +.callout .callout-title-inner>img:not([class*="emoji"]) { + border-radius: 1em !important; + margin: auto; + display: block; +} + +.callout-title-inner.admonition-title-content svg { + height: 1em; + align-self: center; + width: 1em; +} + +.callout-icon svg { + height: 1em; +} + +.markdown-source-view.is-live-preview .admonition-content .callout-content :is(h1,h2,h3,h4,h5,h6,p) { + margin: 0; +} + +.callout .callout-content p img { + display: block; +} + +.is-live-preview .callout:not(.admonition) .callout-content { + padding-top: 0; + padding-bottom: 0; +} +.callout-content { + padding-left: 10px; + padding-right: 10px; +} +.callout img[alt*=circle] { + border-radius: 35px; + width: 70px; + height: 70px; +} +/* ===编辑代码块按钮调整============ */ +.markdown-source-view.mod-cm6 .cm-embed-block { + border: 0; + +} +.markdown-source-view.mod-cm6 .cm-embed-block:hover { + box-shadow: 0 3px 8px 0 rgba(var(--mono-rgb-100), .25); + transition: all .2s ease-in-out; +} + +.markdown-source-view.mod-cm6 .edit-block-button { + padding: 0; + top: 0; + border-radius: var(--radius-s); + right: 10px; + opacity: 0.3; +} +.markdown-source-view.mod-cm6 .edit-block-button::before { + width: 25px; + font-size: 11px; + text-align: center; + content: ''; + margin-left:1em; +} +.markdown-source-view.mod-cm6 .edit-block-button>svg { + display: none; +} + +/*cards 视图*/ +:root{ + --cards-width: 138px; +} + +@media (max-width: 450px) { + :root{ + --cards-width: 112.64px; + } +} + +@media (max-width: 375px) { + :root{ + --cards-width: 102.4px; + } +} + +@media (max-width: 350px) { + :root{ + --cards-width: 87.04px; + } +} +.callout.callout[data-callout*=cards] .callout-content { + padding: 0; +} +.callout.callout[data-callout*=cards] progress { + position: absolute; + width: var(--cards-width); + margin-top: -10px; + margin-left: calc(var(--cards-width) /2 * -1); + overflow: hidden; + height: 3px; + background: #f0ec05; +} +.callout.callout[data-callout*=cards] progress.yellow::-moz-progress-bar { + background: #e78f0c; +} +.callout.callout[data-callout*=cards] progress.yellow::-webkit-progress-value { + border-radius: 1em; + background: #e78f0c; +} + +.callout.callout[data-callout*=cards] progress.hot::-moz-progress-bar { + background: #fa7131dc; +} +.callout.callout[data-callout*=cards] progress.hot::-webkit-progress-value { + border-radius: 1em; + background: #fa7131dc; +} + + +.callout.callout[data-callout*=cards] table.dataview tbody { + display: flex; + flex-flow: wrap; + margin-top: 20px; + margin-left: 0.5em; + width: 105%; +} + +@media (max-width:1120px) { + .callout.callout[data-callout*=cards] table.dataview tbody { + margin-left: -40px; + padding: 0 40px + } +} + +@media (max-width:960px) { + .callout.callout[data-callout*=cards] table.dataview tbody { + margin-left: -30px; + padding: 0 30px + } +} + +@media (max-width:460px) { + .callout.callout[data-callout*=cards] table.dataview tbody { + padding: 0px; + margin-left: -20px; + } +} + +.callout.callout[data-callout*=cards] table.dataview>tbody>tr { + display: block; + width:var(--cards-width); + height: auto; + margin-left: 1.2em; + margin-bottom: 44px; + background-color: transparent; +} + +@media (max-width:1120px) { + .callout.callout[data-callout*=cards] table.dataview>tbody>tr { + margin-left: 40px; + } +} + +@media (max-width:960px) { + .callout.callout[data-callout*=cards] table.dataview>tbody>tr { + margin-left: 30px; + } +} + +@media (max-width:460px) { + .callout.callout[data-callout*=cards] table.dataview>tbody>tr { + margin-left: 20px; + margin-bottom: 20px; + } +} + +.callout.callout[data-callout*=cards] table.dataview tbody>tr>td:first-child, +.markdown-source-view.mod-cm6.callout.callout[data-callout*=cards] .dataview.table-view-table>tbody>tr>td:first-child { + width: 100%; + display: block; + box-shadow: 0 2px 16px rgba(0, 0, 0, .2); + position: relative; + padding: 0; +} + +.callout.callout[data-callout*=cards] table.dataview tbody>tr>td img { + vertical-align: top; + width: 100%; + height: calc(var(--cards-width) / 0.7 ); + background-color:var(--background-secondary); + -o-object-fit: cover; + object-fit: cover; +} +.callout.callout[data-callout*=cards] table.dataview tbody>tr>td:before { + display: none; +} +.callout.callout[data-callout*=cards] table.dataview tbody>tr>td:first-child:after { + content: ""; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + background-image: linear-gradient(90deg, hsla(0, 0%, 63.1%, .25), rgba(21, 21, 20, .1) 1%, hsla(0, 0%, 100%, .15) 4%, hsla(0, 0%, 58%, .1) 8%, hsla(0, 0%, 89%, 0) 57%, rgba(223, 218, 218, .03) 91%, rgba(223, 218, 218, .05) 98%, hsla(0, 0%, 100%, .1)); + box-shadow: inset 0 0 0 0 rgba(0, 0, 0, .1); +} +.callout.callout[data-callout*=cards] table.dataview tbody>tr>td:not(:first-child), +.markdown-source-view.mod-cm6.callout.callout[data-callout*=cards] .dataview.table-view-table>tbody>tr>td:not(:first-child) { + text-align: center; + padding: 0; + margin-top: 4px; + font-size: 15px; + color: var(--text-muted); + line-height: 18px; + overflow: hidden; + display: -webkit-box; + display: -moz-box; + -webkit-line-clamp: 2; + -moz-line-clamp: 2; + line-clamp: 2; + -webkit-box-orient: vertical; + -webkit-text-size-adjust: none; + box-orient: vertical; + height: auto; + font-size: 13px; + line-height: 1.1; + white-space: nowrap; + text-overflow: ellipsis; +} +.callout.callout[data-callout*=cards] table.dataview tbody>tr>td>button { + font-size: 12px; + background-color: transparent; + padding: 0; +} +.callout.callout[data-callout*=cards] table.dataview tbody>tr>td:nth-child(2) { + margin-top: 10px; +} +.callout.callout[data-callout*=cards] table.dataview tbody>tr>td:nth-child(3) { + -webkit-text-stroke: 0.25px ; +} +/*------------*/ + +.callout.callout[data-callout*=cards] table.dataview thead { + user-select: none; + width: 160px; + display: block; + float: right; + position: relative; + text-align: right; + padding-bottom: 4px +} +.callout.callout[data-callout*=cards] table.dataview thead:before { + content: ''; + background-repeat: no-repeat; + cursor: var(--cursor); + text-align: right; + padding: 4px 10px; + margin-bottom: 2px; + border-radius: 5px; + font-weight: 500; + font-size: var(--font-adaptive-small); +} +.callout.callout[data-callout*=cards] table.dataview thead:before { + opacity: .25; + background-position: center center; + background-size: 18px; + background-image: url('data:image/svg+xml;utf8,'); +} +.theme-light .callout.callout[data-callout*=cards] table.dataview thead:before { + background-image: url('data:image/svg+xml;utf8,'); +} +.callout.callout[data-callout*=cards] table.dataview thead:hover:before { + opacity: .5; +} +.callout.callout[data-callout*=cards] table.dataview thead>tr { + position: absolute; + display: none; + z-index: 9; + border: 1px solid var(--background-modifier-border); + background-color: var(--background-secondary); + box-shadow: 0 2px 8px var(--background-modifier-box-shadow); + padding: 6px; + border-radius: 6px; + flex-direction: column; + margin: 0; + width: 100%; +} +.callout.callout[data-callout*=cards] table.dataview thead:hover>tr { + display: flex; +} +.callout.callout[data-callout*=cards] table.dataview thead>tr>th { + display: block; + background-color: var(--background-primary); + padding: 3px 30px 3px 6px!important; + border-radius: 5px; + width: 100%; + font-weight: 400; + color: var(--text-muted); + border: none; + font-size: var(--font-adaptive-small); +} +.callout.callout[data-callout*=cards] table.dataview thead>tr>th[sortable-style=sortable-asc], +.callout.callout[data-callout*=cards] table.dataview thead>tr>th[sortable-style=sortable-desc] { + color: var(--text-normal); +} +.callout.callout[data-callout*=cards] table.dataview thead>tr>th:hover { + color: var(--text-normal); + background-color: var(--background-secondary); +} + +/*全透明callout*/ +.callout.callout[data-callout*=blank] { + box-shadow: none; + max-width: 100%; + background: transparent; + border: none; + background-color: transparent !important; + box-shadow: none !important; + margin: 0; +} + +.callout.callout[data-callout*=blank].is-collapsed .callout-fold { + border: none; + padding: 5px 10px; +} +.callout.callout[data-callout*=blank] .callout-title, +.callout.callout[data-callout*=blank] .callout-title :is(.callout-icon, .callout-title-inner) { + display: none; +} +.callout.callout[data-callout*=blank] .callout-content { + overflow: visible; + margin: 0; + padding: 0; + border: none; +} + +/* ===段落自动缩进============ */ +/*支持两种写法 + > [!note|indent] + > [!note indent] + */ +.callout.callout:is([data-callout-metadata*="indent"], +[data-callout*=indent]) .callout-content p br { + content: ''; + white-space: pre; + line-height: calc((var(--paragraph-spacing) + 0.3) * 1em); + display: unset; +} +.callout.callout:is([data-callout-metadata*="indent"], +[data-callout*=indent]) .callout-content>p { + text-indent: 2em; +} +.callout.callout:is([data-callout-metadata*="indent"], +[data-callout*=indent]) .callout-content blockquote>p { + text-indent: 2em; +} + +.callout.callout:is([data-callout-metadata*="indent"], +[data-callout*=indent]) .callout-content p br::after { + content: '\A\9\9'; +} + +/* ===段落两端对齐============ */ +/*支持两种写法 + > [!note|justify] + > [!note justify] + */ +.callout.callout:is([data-callout-metadata*="justify"], +[data-callout*=justify]) .callout-content>p { + text-align: justify; + hyphens: auto; + -webkit-hyphens: auto; +} +/* ===隐藏图标============ */ +.callout.callout:is([data-callout-metadata^="noicon"], +[data-callout*=noicon]) .callout-icon { + display: none; +} + +/* ===隐藏边框============ */ +.callout.callout:is([data-callout-metadata*="noborder"], +[data-callout*=noborder]) { + border-left: none; + background-color: transparent; + box-shadow: none; +} +.callout.callout:is([data-callout-metadata*="noborder"], +[data-callout*=noborder]) .callout-content { + border-left: none; + background-color: transparent; + box-shadow: none; + border: none; +} + +/* ===banner============ */ +.is-live-preview .admonition-flex .callout.callout[data-callout-metadata*="banner"]:nth-child(2) { + margin-top: -1.5em; +} + +.callout.callout[data-callout-metadata*="banner"] { + border-left: 0; + background-color: transparent; + box-shadow: none !important; +} +.callout.callout[data-callout-metadata*="banner"] .callout-content{ + overflow: visible; +} +.callout.callout[data-callout-metadata*="banner"] .callout-title { + background-color: transparent; + display: inline; +} +/* nested callout note for culumns | image used as tittle + centered */ +.callout.callout[data-callout-metadata*="banner"] .callout-title img { + border-radius: 1em; + margin: auto; + display: block; +} +.callout.callout[data-callout-metadata*="banner"] .callout-fold { + display: none; +} +.callout.callout[data-callout-metadata*="banner"] .callout-icon { + display: none; +} +.callout.callout[data-callout-metadata*="banner"] .callout-title h3 { + text-align: center; + line-height: 2; +} +.callout.callout[data-callout-metadata*="banner"] .callout-title h3::before { + display: none; +} +/* ===隐藏标题============ */ +.callout.callout:is([data-callout-metadata*="notitle"], +[data-callout*=notitle]) .callout-title { + display:none; +} +/* ===支持 right left center 语法============ */ +/*支持两种写法 + > [!note|right] + > [!note right] + */ +.callout.callout:is([data-callout-metadata*="left"], +[data-callout*=left]) { + float: left !important; + margin: unset; +} +.callout.callout:is([data-callout-metadata*="right"], +[data-callout*=right]) { + float: right !important; + margin: unset; +} + +.callout.callout:is([data-callout-metadata*="center"], +[data-callout*=center]) { + display: block; + margin: auto; + float: unset ; + text-align:center; +} +/* ===块内元素不换行============ */ +.callout.callout:is([data-callout-metadata*='nowrap'], +[data-callout*='nowrap']) { + max-width: unset !important; + white-space: nowrap; + overflow: hidden; +} +.callout.callout:is([data-callout-metadata*='nowrap'], +[data-callout*='nowrap']) thead > tr > th, +.callout.callout:is([data-callout-metadata*='nowrap'], +[data-callout*='nowrap']) tbody > tr > td { + white-space: nowrap; +} +.callout.callout:is([data-callout-metadata*='nowrap'], +[data-callout*='nowrap']) .callout-content { + overflow-x: auto !important; +} +.callout.callout:is([data-callout-metadata*='nowrap'], +[data-callout*='nowrap']) .callout-content p { + display: flex; + align-items: center; + margin-block-start: 0; + margin-block-end: 0; +} +.callout.callout:is([data-callout-metadata*='nowrap'], +[data-callout*='nowrap']) .callout-content img { + max-width: unset !important; + display: table-cell; + vertical-align: middle; + padding: 1px; + max-height: 30vh; +} + +/* ===块内元素网格布局============ */ +.callout.callout:is([data-callout-metadata*='grid'], +[data-callout*='grid']) { + max-width: unset !important; + white-space: nowrap; + overflow: hidden; +} +.callout.callout:is([data-callout-metadata*='grid'], +[data-callout*='grid']) .callout-content { + overflow-x: auto!important; +} +.callout.callout:is([data-callout-metadata*='grid'], +[data-callout*='grid']) .callout-content p { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(0, auto)); + grid-gap: 2px; +} +.callout.callout:is([data-callout-metadata*='grid'], +[data-callout*='grid']) .callout-content ul { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(160px, auto)); + grid-gap: 0 10px; +} +.callout.callout:is([data-callout-metadata*='grid'], +[data-callout*='grid']) .callout-content ul li { + WHITE-SPACE: normal; + padding-left: 1em; + text-indent: -1em; +} +.callout.callout:is([data-callout-metadata*='grid'], +[data-callout*='grid']) .callout-content ul li::before { + content: ' ' !important; +} +.callout.callout:is([data-callout-metadata*='grid'], +[data-callout*='grid']) .callout-content img { + display: flex; + flex: 1; + align-self: stretch; + object-fit: cover; + margin: unset !important; +} + + +/* ===百分比宽度============ */ +/*支持两种写法 + > [!note|30%] + > [!note 30%] +*/ +.callout.callout:is([data-callout-metadata*='100%'], +[data-callout*='100%']) { + width: 100%; +} +.callout.callout:is([data-callout-metadata*='95%'], +[data-callout*='95%']) { + width: 95%; +} +.callout.callout:is([data-callout-metadata*='90%'], +[data-callout*='90%']) { + width: 90%; +} +.callout.callout:is([data-callout-metadata*='85%'], +[data-callout*='85%']) { + width: 85%; +} +.callout.callout:is([data-callout-metadata*='80%'], +[data-callout*='80%']) { + width: 80%; +} +.callout.callout:is([data-callout-metadata*='75%'], +[data-callout*='75%']) { + width: 75%; +} +.callout.callout:is([data-callout-metadata*='70%'], +[data-callout*='70%']) { + width: 70%; +} +.callout.callout:is([data-callout-metadata*='65%'], +[data-callout*='65%']) { + width: 65%; +} +.callout.callout:is([data-callout-metadata*='60%'], +[data-callout*='60%']) { + width: 60%; +} +.callout.callout:is([data-callout-metadata*='55%'], +[data-callout*='55%']) { + width: 55%; +} +.callout.callout:is([data-callout-metadata*='50%'], +[data-callout*='50%']) { + width: 50%; +} +.callout.callout:is([data-callout-metadata*='45%'], +[data-callout*='45%']) { + width: 45%; +} +.callout.callout:is([data-callout-metadata*='40%'], +[data-callout*='40%']) { + width: 40%; +} +.callout.callout:is([data-callout-metadata*='35%'], +[data-callout*='35%']) { + width: 35%; +} +.callout.callout:is([data-callout-metadata*='30%'], +[data-callout*='30%']) { + width: 30%; +} +.callout.callout:is([data-callout-metadata*='25%'], +[data-callout*='25%']) { + width: 25%; +} +.callout.callout:is([data-callout-metadata*='20%'], +[data-callout*='20%']) { + width: 20%; +} +.callout.callout:is([data-callout-metadata*='15%'], +[data-callout*='15%']) { + width: 15%; +} +.callout.callout:is([data-callout-metadata*='10%'], +[data-callout*='10%']) { + width: 10%; +} + + +/* callout模糊文字效果*/ +.callout.callout[data-callout=cloze] { + border-left-width: 0; + filter: blur(4px); +} + +.callout.callout[data-callout=cloze]:hover { + filter: none; +} + +.callout.callout[data-callout=cloze] .callout-title { + display: none; +} + +/* callout伪看板效果*/ +.callout.callout[data-callout*="kanban"] ul { + display: flex; + flex-direction: row; + border: 0px solid var(--p-kanban-border-color); + padding: 0; + border-radius: var(--radius-m); + flex-wrap: wrap; +} +.callout.callout[data-callout*="kanban"] li .list-bullet{ + display: none; +} + +.callout.callout[data-callout*="kanban"] ul>li { + flex: 1 1 20%; + padding: 0.1em 1em 0.1em 0.8em; + margin: 0 0.3em 0.3em 0 !important; + list-style: none; + border: 1px solid var(--p-kanban-border-color); + border-left: 1px solid var(--p-kanban-border-color) !important; + border-radius: var(--radius-s); + word-wrap: break-word; + word-break: break-word; +} + +.callout.callout[data-callout*="kanban"] ul li.task-list-item .task-list-item-checkbox { + margin-left: auto; +} + + +.callout.callout[data-callout*="kanban"] ul .list-collapse-indicator.collapse-indicator.collapse-icon::before { + color: var(--text-accent); + transition: transform 10ms linear 0s; +} + +body.colorful-p-kanban .callout.callout[data-callout*="kanban"] ul>li:nth-of-type(8n+1) { + background-color: var(--p-kanban-color-1); +} +body.colorful-p-kanban .callout.callout[data-callout*="kanban"] ul>li:nth-of-type(8n+2) { + background-color: var(--p-kanban-color-2); +} +body.colorful-p-kanban .callout.callout[data-callout*="kanban"] ul>li:nth-of-type(8n+3) { + background-color: var(--p-kanban-color-3); +} +body.colorful-p-kanban .callout.callout[data-callout*="kanban"] ul>li:nth-of-type(8n+4) { + background-color: var(--p-kanban-color-4); +} +body.colorful-p-kanban .callout.callout[data-callout*="kanban"] ul>li:nth-of-type(8n+5) { + background-color: var(--p-kanban-color-5); +} +body.colorful-p-kanban .callout.callout[data-callout*="kanban"] ul>li:nth-of-type(8n+6) { + background-color: var(--p-kanban-color-6); +} +body.colorful-p-kanban .callout.callout[data-callout*="kanban"] ul>li:nth-of-type(8n+7) { + background-color: var(--p-kanban-color-7); +} +body.colorful-p-kanban .callout.callout[data-callout*="kanban"] ul>li:nth-of-type(8n) { + background-color: var(--p-kanban-color-8); +} + +.callout.callout[data-callout*="kanban"] ul>li:nth-of-type(n) { + background-color: var(--p-kanban-color-simple); + padding-left: 1em; +} +.callout.callout[data-callout*="kanban"] .callout-content>ul:first-child>li:nth-of-type(8n+1) { + border-top: 6px solid var(--p-kanban-color-1) !important; +} +.callout.callout[data-callout*="kanban"] .callout-content>ul:first-child>li:nth-of-type(8n+2) { + border-top: 6px solid var(--p-kanban-color-2) !important; +} +.callout.callout[data-callout*="kanban"] .callout-content>ul:first-child>li:nth-of-type(8n+3) { + border-top: 6px solid var(--p-kanban-color-3) !important; +} +.callout.callout[data-callout*="kanban"] .callout-content>ul:first-child>li:nth-of-type(8n+4) { + border-top: 6px solid var(--p-kanban-color-4) !important; +} +.callout.callout[data-callout*="kanban"] .callout-content>ul:first-child>li:nth-of-type(8n+5) { + border-top: 6px solid var(--p-kanban-color-5) !important; +} +.callout.callout[data-callout*="kanban"] .callout-content>ul:first-child>li:nth-of-type(8n+6) { + border-top: 6px solid var(--p-kanban-color-6) !important; +} +.callout.callout[data-callout*="kanban"] .callout-content>ul:first-child>li:nth-of-type(8n+7) { + border-top: 6px solid var(--p-kanban-color-7) !important; +} +.callout.callout[data-callout*="kanban"] .callout-content>ul:first-child>li:nth-of-type(8n) { + border-top: 6px solid var(--p-kanban-color-8) !important; +} +body.simple-p-kanban .callout.callout[data-callout*="kanban"] ul:first-child>li:nth-of-type(n) { + border-top: none !important; +} + +body:not(.remove-shadow-p-kanban) .callout.callout[data-callout*="kanban"] ul>li:hover { + transition: box-shadow .2s cubic-bezier(.4, 0, 1, 1); + box-shadow: 0 3px 5px 0 var(--p-kanban-color-shadow), 0 3px 1px -3px var(--p-kanban-color-shadow), 2px 3px 3px 0 var(--p-kanban-color-shadow); +} + +.callout.callout[data-callout*="kanban"] ul ul { + display: flex; + flex-direction: column; + justify-content: center; + padding: 0rem; + margin-top: 0.5rem; + border-radius: 0; + border: 0; + background: none; +} + +.callout.callout[data-callout*="kanban"] ul ul li:not(.task-list-item) { + width: 100%; + display: block; + background-color: var(--p-kanban-card-color-1) !important; +} + +body.remove-shadow-p-kanban .callout.callout[data-callout*="kanban"] ul ul li:hover { + background: var(--p-kanban-card-color-2) !important; + border-color: var(--p-kanban-border-color) !important; + border-left: 1px solid var(--p-kanban-border-color) !important; +} + +body.remove-shadow-p-kanban.theme-dark .callout.callout[data-callout*="kanban"] ul ul li:hover { + border-color: #696969e1 !important; + border-left: 1px solid #696969e1 !important; +} + +.callout.callout[data-callout*="kanban"] ul ul li .task-list-item-checkbox { + margin-left: 1.5rem !important; +} + +.callout.callout[data-callout*="kanban"] ul ul ul { + margin-right: 0; +} + +.callout.callout[data-callout*="kanban"] ul ul::before { + border-left: 0; + border:0; +} + +:is(.markdown-preview-view,.markdown-rendered).is-readable-line-width.callout.callout[data-callout*="kanban"] .markdown-preview-sizer>div>ul { + max-width: 100%; +} + +.callout.callout[data-callout*="kanban"] :is(ol,ul).contains-task-list :is(ol,ul) { + position: initial; +} + +.callout.callout[data-callout*="kanban"] :is(ol,ul).contains-task-list :is(ol,ul)::before { + all: initial; +} + +.callout.callout[data-callout*="kanban"] ul > li.task-list-item { + flex: 1 1 20%; + padding: 0.1em 1em; + list-style: none; + border: 1px solid var(--p-kanban-border-color); + border-left: 1px solid var(--p-kanban-border-color) !important; + border-radius: var(--radius-s); + word-wrap: break-word; + word-break: break-word; + text-indent: 0.01em; +} + +.callout.callout[data-callout*="kanban"] ul ul li.task-list-item { + width: 100%; + display: block; + padding-left: 2em; + text-indent: -3em; + background-color: var(--p-kanban-card-color-1) !important; +} + +.callout.callout[data-callout*="kanban"] ul ul li.task-list-item .list-collapse-indicator.collapse-indicator.collapse-icon { + text-indent: -1em; +} + +body:not(.default-icons) .callout.callout[data-callout*="kanban"] li.task-list-item .list-collapse-indicator.collapse-indicator.collapse-icon::before { + margin-left: -0.2em; +} + +body:not(.default-icons) .callout.callout[data-callout*="kanban"] li.task-list-item .task-list-item.is-collapsed .list-collapse-indicator.collapse-indicator.collapse-icon::before { + transform: translateX(-0.9em) translateY(-1em) rotate(-90deg); +} + +body.colorful-p-kanban .callout.callout[data-callout*="kanban"] .task-list-item-checkbox { + border-color: var(--text-normal) !important; +} + +/*callout hibox*/ +.callout.callout[data-callout*="hibox"] { + background-color: transparent !important; + box-shadow: none !important; +} + +.callout.callout[data-callout*="hibox"] .callout-content *, +.callout.callout[data-callout*="hibox"] .callout-content *::before, +.callout.callout[data-callout*="hibox"] .callout-content *::marker { + visibility: hidden; +} + +.callout.callout[data-callout*="hibox"] .callout-content { + position: relative; + height: auto; + overflow: hidden; + background: radial-gradient(circle at 0px 0px, var(--background-modifier-box-shadow), 0, var(--background-modifier-box-shadow), var(--hibox), transparent var(--hibox), transparent 0); + transition: --hibox 0.6s linear; +} + +.callout.callout[data-callout*="hibox"] .callout-content:hover { + --hibox: 1500px; + box-shadow: 0 0.2rem 0.5rem var(--background-modifier-box-shadow) !important; +} + +.callout.callout[data-callout*="hibox"] .callout-content:hover *, +.callout.callout[data-callout*="hibox"] .callout-content:hover *::marker, +.callout.callout[data-callout*="hibox"] .callout-content:hover *::before { + border-color: inherit; + visibility: visible; +} + +.callout.callout[data-callout*="hibox"] .callout-content:hover ol:not(.contains-task-list)>li:not(.task-list-item) { + border-color: var(--list-ol-block-color) !important; +} + +.callout.callout[data-callout*="hibox"] .callout-content:hover ul>li:not(.task-list-item) { + border-color: var(--list-ul-block-color) !important; +} + +.callout.callout[data-callout*="hibox"] .callout-content:hover blockquote { + border-color: var(--theme-color) !important; + background-color: var(--background-blockquote) !important; +} + +.callout.callout[data-callout*="hibox"] .callout-content:hover { + border-color: var(--text-normal) !important; +} + +/* callout infobox效果*/ +/*Infobox from https://github.com/SlRvb/Obsidian--ITS-Theme/blob/main/S%20-%20Callouts.css*/ +:is(.is-mobile, .is-live-preview) .callout[data-callout*=infobox] { + float: unset !important; + max-width: 100%; + margin: 0 !important; +} + +.callout.callout[data-callout*=infobox] { + --callout-color: var(--interactive-accent-rgb); + background: transparent; + border: 0; + box-shadow: none !important; + margin: 0; + margin-left: 8px; + align-self: center; + float: right; +} +.callout.callout[data-callout*=infobox] .callout-title { + background-color: transparent; + padding: 0; + justify-content: center; +} +.callout.callout[data-callout*=infobox].is-collapsed .callout-fold { + padding: 3px 10px; +} +.callout.callout[data-callout*=infobox]:not(:hover):not(.is-collapsible) .callout-title, .callout.callout[data-callout*=infobox]:not(.is-collapsible) .callout-title :is(.callout-icon, .callout-fold,.callout-title-inner) { + display: none; +} +.callout.callout[data-callout*=infobox] .callout-content { + padding: 1px; + margin: 0; + border-radius: var(--radius, var(--co-radius)); +} +.callout.callout[data-callout*=infobox] table { + width: 100%; +} +.callout.callout[data-callout*=infobox] :is(p, table) { + margin-block-start: 0; + margin-block-end: 0; + margin: 0; +} +.callout.callout[data-callout*=infobox] :is(h1, h2, h3, h4, h5, h6) { + text-align: center; + margin: 0; + padding: 2px; + color: var(--text-normal); +} +.callout.callout[data-callout*=infobox] p, +.callout.callout[data-callout*=infobox] .internal-embed, +.callout.callout[data-callout*=infobox] img { + margin: auto; + padding: auto; + text-align: center; +} + +/******callout bookinfo*****/ +.callout.callout[data-callout*="bookinfo"] { + --callout-color: 64, 201, 75; + --callout-icon: ''; + overflow: unset; + border: 0; + width: auto; + padding: 0; +} + +.callout.callout[data-callout*=bookinfo] .callout-title { + text-align: center; + display: flex; + justify-content: space-between; +} + +.callout.callout[data-callout*=bookinfo] .callout-content { + display: flex; + justify-content: space-between; +} + +.callout.callout[data-callout*=bookinfo] .callout-content table { + width: 68%; + margin-left: 2%; + word-break: normal; +} +.callout.callout[data-callout*=bookinfo] .callout-content table tr th { + padding-right: 5px;; +} +.callout.callout[data-callout*=bookinfo] .callout-content td:nth-child(2) { + display: table-cell; + overflow: hidden; +} +@media screen and (max-width: 768px) { + .callout.callout[data-callout*=bookinfo] .callout-content table { + width: 100%; + } + .callout.callout[data-callout*=bookinfo] .callout-content { + display: grid; + } +} +/******callout timeline*****/ +.callout.callout[data-callout="timeline"] { + --callout-color: 31, 172, 139; + --callout-icon: ''; + border-left: none; + background-color: transparent; +} + +.callout.callout[data-callout="timeline"] >.callout-content { + border-left:none; + display: -ms-grid; + display: grid; + -ms-grid-columns: auto auto 1fr; + grid-template-columns: 0.3fr auto 1fr; + -webkit-column-gap: 1.5rem; + column-gap: 1.5rem; + row-gap: 0.25rem; + margin: 2.3rem 1rem 0 0; + padding: 0; +} +.callout.callout[data-callout="timeline"] .callout-content hr::before { + display: none; +} +.callout.callout[data-callout="timeline"] .callout-content hr { + height: 100%; + width: 0.5rem; + -ms-grid-column: 2; + -ms-grid-column-span: 1; + grid-column: 2 / span 1; + -ms-grid-row: 1; + grid-row-start: 1; + background-color: var(--text-normal); + opacity: 0.1; + grid-row-end: 9; + margin:auto; + border: none; + overflow: hidden; + border-radius: 10px; +} +.callout.callout[data-callout="timeline"] .callout-content blockquote { + color: var(--text-on-accent); + display: block; + -ms-grid-column: 1; + -ms-grid-column-span: 1; + grid-column: 1 / span 1; + position: relative; + -ms-flex-item-align: start; + -ms-grid-row-align: start; + align-self: start; + text-align: left; + box-shadow: none; + margin: 0; + border: none; + padding: 0; + background-color: var(--interactive-accent); +} +.callout.callout[data-callout="timeline"] .callout-content blockquote p::before { + display: none; +} +.callout.callout[data-callout="timeline"] .callout-content blockquote, +.callout.callout[data-callout="timeline"] .callout-content blockquote + *:not(.callout), +.callout.callout[data-callout="timeline"] .callout-content hr+ *:not(.callout) { + padding-top: 0.2em; + padding-bottom: 0.2em; +} +.callout.callout[data-callout="timeline"] .callout-content blockquote .list-bullet::after{ + color: var(--text-on-accent); + left:0; +} +.callout.callout[data-callout="timeline"] .callout-content blockquote p { + display: block; + color: var(--text-on-accent); + background-color: var(--interactive-accent); + font-style: normal; + border-radius: 5px; +} +.callout.callout[data-callout="timeline"] .callout-content>*:not(blockquote):not(hr) { + position: relative; + -ms-grid-column: 3; + -ms-grid-column-span: 1; + grid-column: 3 / span 1; + margin-block-start: 0; + margin-block-end: 0; +} +.callout.callout[data-callout="timeline"] table { + font-size: 13px; +} + +/******callout icon*****/ +.show-inline-title .callout.callout:is([data-callout-metadata^='icon'], +.show-inline-title [data-callout='icon']) { + margin-top: -7em; +} +.callout.callout:is([data-callout-metadata^='icon'], +[data-callout='icon']) { + flex: none !important; + border-left: 0; + background-color: transparent; + box-shadow: none; + float: left; + margin-top: -4em; + margin-bottom: 0; +} +.is-live-preview .callout.callout:is([data-callout-metadata^='icon'], +[data-callout='icon']) { + margin-top: -1.6em; +} +.callout.callout:is([data-callout-metadata^='icon'], +[data-callout='icon']) .callout-title { + display: none; +} +.callout.callout:is([data-callout-metadata^='icon'], +[data-callout='icon']) .callout { + overflow: visible; + margin: 0; +} +.callout.callout:is([data-callout-metadata^='icon'], +[data-callout='icon']) > .callout-content { + padding: 0; +} +.callout.callout:is([data-callout-metadata^='icon'], +[data-callout='icon']) > .callout-content>svg { + height: calc(1em + 12px); + padding: 6px; + border-radius: 4px; + pointer-events: initial; + transition: ease .2s background; + font-size: 4em; + margin-bottom: 0px; +} + +/***Sticky notes 便签效果**/ +.callout[data-callout="stickies"] { + box-shadow:none; + border-left:0px; + overflow: unset; +} +.callout[data-callout="stickies"][data-callout-metadata*="left"] { + width: max(180px, 30%); +} + +.callout[data-callout="stickies"][data-callout-metadata*="left"]>.callout-content { + max-width: 100%; +} +.callout[data-callout="stickies"] >.callout-title { + display: none; +} + +.callout[data-callout="stickies"] >.callout-content { + overflow:visible; + text-align: center; + transition: width 2s; + padding: 5px; + margin: 18px; + position: relative; + float: right; + right: -10px; + width: max(180px, 30%); + max-width: 50%; + background-color: var(--stickies-color-1); + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(2deg); + transition: all 2s ease; + z-index: 1; + padding-top: 10px; + padding-bottom: 10px; + border-radius: 0px; + color: black; +} +.callout[data-callout="stickies"] >.callout-content::after { + content: ""; + left: -5%; + top: -10px; + height: 40px; + width: 15px; + border-radius: var(--radius-l); + border: 3px solid #979797; + display: inline-block; + position: absolute; + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(-11deg); + z-index: 11; +} +.callout[data-callout="stickies"] >.callout-content::before { + width: 11px; + height: 20px; + content: ""; + display: inline-block; + position: absolute; + left: -3.5%; + top: -2px; + border-radius: var(--radius-l); + border: 3px solid #979797; + border-bottom: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + z-index: 10; + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(-11deg); +} + +.callout[data-callout="stickies2"] { + box-shadow: none; + border-left: none; +} +.callout[data-callout="stickies2"] >.callout-title { + display: none; +} + +.callout[data-callout="stickies2"] >.callout-content { + overflow:visible; + position: relative; + float: left; + box-shadow: 0 10px 10px 2px #9191912d; + width: max(180px, 30%); + max-width: 50%; + background-color: var(--stickies-color-2); + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(-2deg); + transition: all 2s ease; + z-index: 1; + padding: 20px; + margin: 10px; + color: black; +} +.callout[data-callout="stickies2"] >.callout-content::after { + content: ""; + display: block; + height: 32px; + width: 2px; + position: absolute; + left: 50%; + top: -10px; + z-index: 1; + border-radius: 50%; + display: inline-block; + height: 15px; + width: 15px; + border: 1px; + box-shadow: inset -10px -10px 10px #f0b7a4, inset 3px 3px 5px; +} +.callout[data-callout="stickies2"][data-callout-metadata*="right"] { + width: max(180px, 30%); +} +.callout[data-callout="stickies2"][data-callout-metadata*="right"] >.callout-content { + float:right; + max-width: 100%; +} + +.callout[data-callout="stickies3"] { + background-color: transparent ; + box-shadow:none; + border-left:0px; + margin: 20px auto 0 auto !important; +} +.callout[data-callout="stickies3"] >.callout-title { + display: none; +} + +.callout[data-callout="stickies3"] >.callout-content { + overflow:visible; + width: max(180px, 30%); + max-width: 235px; + min-height: 235px; + padding-top: 2.5em; + font-family: Arial; + margin-top: 20px; + margin-right: 25px; + position: relative; + vertical-align: top; + display: inline-block; + background: #F7E999; + text-align: center; + box-shadow: 0 4px 5px rgba(0, 0, 0, 0.2); + color: black; + font-family: var(--font-family-vault); +} +div.is-live-preview .callout[data-callout="stickies3"] >.callout-content { + padding: 20px 15px 10px 15px; +} +.markdown-preview-view .callout[data-callout="stickies3"] >.callout-content p { + margin-block-start: 0.5em; + margin-block-end: 0.5em; +} +div.callout[data-callout="stickies3"] >.callout-content ul { + text-align: left; + margin-left: auto; +} +.callout[data-callout="stickies3"] >.callout-content::before { + display: block; + content: ""; + background: rgba(227, 200, 114, 0.4); + width: 56%; + height: 28px; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); + border-radius: 6px/18px 0; + position: absolute; + top: -13px; + left: 20%; + -webkit-transform: rotate(-2deg); + -moz-transform: rotate(-2deg); + -o-transform: rotate(-2deg); + -ms-transform: rotate(-2deg); + transform: rotate(-2deg); +} +.callout[data-callout="stickies3"] >.callout-content a { + color: #6b824f; + -webkit-transition: all 0.4s ease; + -moz-transition: all 0.4s ease; + -o-transition: all 0.4s ease; + -ms-transition: all 0.4s ease; + transition: all 0.4s ease; +} +.callout[data-callout="stickies3"] >.callout-content a:hover { + color: #D83A25; + background: transparent; +} +.callout[data-callout="stickies3"] >.callout-content a::before { + content: ""; +} + +.markdown-preview-view .callout[data-callout="stickies3"] >.callout-content span { + font-size: smaller; +} + +.markdown-preview-view .callout[data-callout="stickies3"] >.callout-content img { + max-height: 205px; + margin-top: -2.5em; +} +.markdown-preview-view .callout[data-callout="stickies3"] >.callout-content { + font-size: smaller; +} +.theme-dark .markdown-preview-view .callout[data-callout="stickies3"] >.callout-content blockquote { + color: var(--interactive-normal); +} +.theme-dark .markdown-preview-view .callout[data-callout="stickies3"] >.callout-content em { + color: var(--interactive-accent); + -webkit-text-fill-color: unset; +} +.theme-dark .markdown-preview-view .callout[data-callout="stickies3"] >.callout-content strong { + color: var(--interactive-accent)!important; +} +.markdown-preview-view .callout[data-callout="stickies3"] >.callout-content .block-language-dataviewjs p { + max-height: 195px; +} + +.callout:is([data-callout-metadata*='yellow']) .callout-content{ + background: #F7E999; + -webkit-transform: rotate(2deg); + -moz-transform: rotate(2deg); + -o-transform: rotate(2deg); + -ms-transform: rotate(2deg); + transform: rotate(2deg); +} + +.callout:is([data-callout-metadata*='blue']) .callout-content { + background: #b9dcf4; + -webkit-transform: rotate(-2deg); + -moz-transform: rotate(-2deg); + -o-transform: rotate(-2deg); + -ms-transform: rotate(-2deg); + transform: rotate(-2deg); +} + +.callout:is([data-callout-metadata*='pink']) .callout-content { + background: #FFBDA3; + -webkit-transform: rotate(1deg); + -moz-transform: rotate(1deg); + -o-transform: rotate(1deg); + -ms-transform: rotate(1deg); + transform: rotate(1deg); +} + +.callout:is([data-callout-metadata*='green']) .callout-content { + background: #CAF4B9; + -webkit-transform: rotate(-1deg); + -moz-transform: rotate(-1deg); + -o-transform: rotate(-1deg); + -ms-transform: rotate(-1deg); + transform: rotate(-1deg); +} +/*禁用点击超链接跳转 需要跳转 按ctrl+超链接即可*/ +body.link-click .is-live-preview .cm-s-obsidian span.cm-link { + pointer-events: none; +} + +/*禁用实时预览点击标签跳转 需要跳转 点击#号即可*/ +body.tag-click .cm-line span.cm-hashtag:not(.cm-formatting) { + pointer-events: none; +} +/*ob关闭按钮顺序调整*/ +body.reversal-titlebar .titlebar-button-container.mod-right { + direction: rtl; +} +body.is-hidden-frameless:not(.is-fullscreen).is-focused .titlebar-button-container.mod-right { + background-color:transparent; +} + + +/* funny LP headers animation 开启标题动画 === +from discord @sailKite https://cdn.discordapp.com/attachments/702656734631821413/1007258862606352424/FunnyHeaderAnimLP.css +*/ +body.funny-header-anim .is-live-preview .cm-line > :is(.cm-header, .cm-widgetBuffer) + .cm-header, +body.funny-header-anim.clutter-free-headings .cm-line > :is(.cm-header, .cm-widgetBuffer) + .cm-header { + display: inline-block; +} +body.funny-header-anim .is-live-preview .cm-line:not(.cm-active) :is(.cm-header, .cm-widgetBuffer) + .cm-header, +body.funny-header-anim.clutter-free-headings .cm-line:not(.cm-active) :is(.cm-header, .cm-widgetBuffer) + .cm-header, +body.funny-header-anim .is-live-preview .cm-line:not(.cm-active) :is(.cm-header, .cm-widgetBuffer) + .cm-header ~ *, +body.funny-header-anim.clutter-free-headings .cm-line:not(.cm-active) :is(.cm-header, .cm-widgetBuffer) + .cm-header ~ * { + transform: translateX(0ch); + transition: transform 333ms; +} +body.funny-header-anim .is-live-preview .cm-active :is(.cm-header, .cm-widgetBuffer) + .cm-header, +body.funny-header-anim.clutter-free-headings :is(.cm-header, .cm-widgetBuffer) + .cm-header , +body.funny-header-anim .is-live-preview .cm-active :is(.cm-header, .cm-widgetBuffer) + .cm-header ~ *, +body.funny-header-anim.clutter-free-headings :is(.cm-header, .cm-widgetBuffer) + .cm-header ~ *{ + transition: transform 333ms; + transform: translateX(30px); +} +body.funny-header-anim .is-live-preview .cm-active :is(.cm-header) +.cm-widgetBuffer + .cm-html-embed, +body.funny-header-anim.clutter-free-headings .cm-active :is(.cm-header) + .cm-widgetBuffer + .cm-html-embed { + transition: margin-left 500ms; + margin-left: 30px; +} +body.funny-header-anim .is-live-preview .cm-active :is(.cm-header, .cm-widgetBuffer) + .cm-bracket, +body.funny-header-anim.clutter-free-headings .cm-active :is(.cm-header, .cm-widgetBuffer) + .cm-bracket { + transition: margin-left 333ms; + margin-left: 30px; +} +body.funny-header-anim .is-live-preview .cm-line:not(.cm-active) .cm-header:first-of-type, +body.funny-header-anim.clutter-free-headings .cm-line:not(.cm-active) .cm-header:first-of-type { + display: none; + opacity: 0; +} + +body.funny-header-anim .is-live-preview .cm-active .cm-formatting-header + .cm-header, +body.funny-header-anim.clutter-free-headings .cm-active .cm-formatting-header + .cm-header{ + margin-left: -30px; +} + +body.funny-header-anim .is-live-preview .cm-active .cm-header:first-of-type, +body.funny-header-anim.clutter-free-headings .cm-active .cm-header:first-of-type { + transform: translateX(0ch); + animation: opac 333ms; +} + +@keyframes opac { + from {opacity: 0;} + to {opacity: 1;} +} + +/* head-tag-style*/ +body.head-tag-style :is(.cm-header) +.cm-widgetBuffer + .cm-html-embed>sup { + background-color: var(--text-accent-hover); + color: #fff; + vertical-align: top; + border-radius: 3px; + padding: 1px 6px; + font-size: 12px; + line-height: calc(var(--paragraph-spacing) + 0.7); + margin-left: 0.5em; + letter-spacing: .1em; + font-family: var(--font-default); +} +body.head-tag-style :is(.cm-header) +.cm-widgetBuffer + .cm-html-embed>sub { + background-color: var( --simple-orange); + color: #fff; + vertical-align: top; + border-radius: 3px; + padding: 1px 6px; + font-size: 12px; + line-height: calc(var(--paragraph-spacing) + 0.7); + margin-left: 0.5em; + letter-spacing: .1em; + font-family: var(--font-default); +} + +body.head-tag-style :is(.markdown-preview-view,.markdown-rendered) :is(h1,h2,h3,h4,h5,h6) sup { + background-color: var(--text-accent-hover); + color: #fff; + vertical-align: top; + border-radius: 3px; + padding: 1px 6px; + font-size: 12px; + margin-left: 0.5em; + letter-spacing: .1em; + margin-top: -0.2em; + line-height: calc(var(--line-height-main) - 0.7); +} + +body.head-tag-style :is(.markdown-preview-view,.markdown-rendered) :is(h1,h2,h3,h4,h5,h6) sub { + background-color: var( --simple-orange); + color: #fff; + vertical-align: top; + border-radius: 3px; + padding: 1px 6px; + font-size: 12px; + margin-left: 0.5em; + letter-spacing: .1em; + margin-top: -0.2em; + line-height: calc(var(--line-height-main) - 0.7); +} +body.head-tag-style :is(.markdown-preview-view,.markdown-rendered) :is(h1,h2,h3,h4,h5,h6) :is(sub,sup)>.tag:not(.token) { + padding: 0; + background-color: transparent; +} + +body.head-tag-style .cm-s-obsidian .cm-header ~ span.cm-hashtag { + font-size: calc(var(--font-size-tag) - 0.3em)!important; + vertical-align: top; +} +body.head-tag-style .cm-s-obsidian .cm-formatting.cm-formatting-hashtag.cm-hashtag.cm-hashtag-begin.cm-header, +body.head-tag-style .cm-s-obsidian .cm-hashtag.cm-header { + vertical-align: top; +} + + +body:not(.tag-default) .cm-s-obsidian .cm-header ~ span.cm-hashtag { + font-size: calc(var(--font-size-tag) - 0.3em)!important; +} + + +body.head-tag-style :is(.markdown-preview-view,.markdown-rendered) :is(h1,h2,h3,h4,h5,h6) >.tag:not(.token) { + font-size: calc(var(--font-size-tag) - 0.3em); + vertical-align: top; +} + +/* +.cm-s-obsidian .cm-formatting.cm-formatting-hashtag.cm-hashtag.cm-hashtag-begin.cm-header, +.cm-s-obsidian .cm-hashtag.cm-header { + font-size: calc(var(--font-size-tag) - 0.3em) !important; + vertical-align: middle; + margin-top: -0.3em; +} +*/ + +body.head-tag-style .cm-s-obsidian .cm-formatting.cm-formatting-hashtag.cm-hashtag.cm-hashtag-begin.cm-header, +body.head-tag-style .cm-s-obsidian .cm-hashtag.cm-header { + vertical-align: top; +} + +:is(.markdown-preview-view,.markdown-rendered) :is(h1,h2,h3,h4,h5,h6) >.tag:not(.token) { + font-size: calc(var(--font-size-tag) - 0.2em); + vertical-align: middle; +} + +/****** 网络图片标题样式********/ +[data-dv-key="img-caption"] + span.dataview>span { + margin: 0.5rem 0; + display: block; + caption-side: bottom; + text-align: center; + font-size: 0.85rem; +} +.dataview.inline-field-key[data-dv-key="img-caption"] + .dataview.inline-field-value { + background-color:unset; + border-radius: 0px; + padding: 0; + font-family: var(--font-text); +} + +.dataview.inline-field-key[data-dv-key="img-caption"] { + display:none; + background-color:unset; + font-size: 0px; + padding: 0; + border-radius: 0px; +} + +.dataview.inline-field-key[data-dv-key="img-caption"] { + display:none; + background-color:unset; + font-size: 0px; + padding: 0; + border-radius: 0px; +} + + +body:not(.remove-selectionbackground) .markdown-source-view.mod-cm6 .cm-editor .cm-selectionBackground { + background: transparent; +} + +.clickable-icon.is-active, +.clickable-icon.has-active-menu, +.clickable-icon:active, +.clickable-icon:hover { + background-color: var(--theme-color-translucent-015); +} + +.workspace.is-left-sidedock-open .workspace-ribbon.side-dock-ribbon.mod-left .sidebar-toggle-button .clickable-icon, +.workspace-split.mod-horizontal .sidebar-toggle-button .clickable-icon, +.workspace.is-right-sidedock-open .sidebar-toggle-button.mod-right .clickable-icon { + color: var(--theme-color); +} + +.workspace-tabs .view-header { + margin: 0; + padding: 0 var(--size-4-2); +} + +.workspace-split.mod-root .workspace-tab-header.is-active { + z-index: var(--layer-popover); + color: var(--text-normal); + /*box-shadow: var(--window-shadow);*/ +} +.is-mobile .workspace-split.mod-root .workspace-tab-header.is-active.mod-active { + z-index: 29; +} +.is-focused .workspace-tab-header { + color: var(--text-muted); +} + + +/* +.workspace-tabs.mod-stacked .view-header, +.is-focused .workspace .mod-root .workspace-tabs.mod-stacked .workspace-leaf.mod-active .view-header { + background-color: var(--color-base-10); +}*/ +.workspace-split.mod-root .workspace-tabs.mod-stacked .view-content { + backdrop-filter: blur(var(--stack-tabs-background-blur-depth)); +} +.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header { + background-color: var(--background-primary); + border-right: 1px solid var(--page-border-bottom); + box-shadow: -1px 0 10px 0 var(--tab-stacked-shadow); + backdrop-filter: blur(6px); +} +.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header:first-child { + border-left: 1px solid var(--page-border-bottom); +} + +.titlebar-button:hover { + background-color: unset; +} + +/* body:not(.default-list-marker) .list-bullet::before { + display: none; +} */ + +body:not(.default-list-marker) .markdown-rendered .list-bullet::after { + content: '\2022'; + font-size: var(--list-ul-marker-size); + font-family: Inter; + width: unset; + height: unset; + border: none; + background: transparent; + color: var(--list-ul-marker-color); + margin-left: 0.13em; + /* margin-top: calc(0.466em * var(--line-height-list) - 0.286em); */ + line-height: 0.55; + transition: all 0.15s ease; +} + +body:not(.default-list-marker) .list-bullet::after { + content: '\2022'; + font-size: var(--list-ul-marker-size); + font-family: Inter; + width: unset; + border: none; + background: transparent; + color: var(--list-ul-marker-color); +/* margin-left: -0.03em; + margin-top: -0.15em; */ + display: flex; + justify-content: center; + flex-direction: column; + height: 43%; + transition: all 0.15s ease; +} + +body.custom-unordered-list .markdown-rendered .has-list-bullet .has-list-bullet .has-list-bullet .has-list-bullet .list-bullet::after, +body.custom-unordered-list .markdown-rendered .list-bullet::after { + content: var(--list-ul-marker-4); + font-size: var(--list-ul-marker-size-4); + color: var(--list-ul-marker-color-4,var(--list-marker-color)); +} + +body.custom-unordered-list .markdown-source-view.mod-cm6 .list-bullet::after { + content: var(--list-ul-marker-4); + font-size: var(--list-ul-marker-size-4); + color: var(--list-ul-marker-color-4,var(--list-marker-color)); +} + +body.custom-unordered-list .has-list-bullet .list-bullet::after, +body.custom-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-1.cm-line div.cm-fold-indicator ~ span.cm-formatting .list-bullet::after, +body.custom-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-1.cm-line>span.cm-formatting:first-of-type .list-bullet::after { + content: var(--list-ul-marker-1); + font-size: var(--list-ul-marker-size-1); + color: var(--list-ul-marker-color-1,var(--list-marker-color)); +} + +body.custom-unordered-list .has-list-bullet .has-list-bullet .list-bullet::after, +body.custom-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-2.cm-line div.cm-fold-indicator ~ span.cm-formatting .list-bullet::after, +body.custom-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-2.cm-line span.cm-hmd-list-indent ~ span.cm-formatting .list-bullet::after { + content: var(--list-ul-marker-2); + font-size: var(--list-ul-marker-size-2); + color: var(--list-ul-marker-color-2,var(--list-marker-color)); +} +body.custom-unordered-list .has-list-bullet .has-list-bullet .has-list-bullet .list-bullet::after, +body.custom-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-3.cm-line div.cm-fold-indicator ~ span.cm-formatting .list-bullet::after, +body.custom-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-3.cm-line span.cm-hmd-list-indent ~ span.cm-formatting .list-bullet::after { + content: var(--list-ul-marker-3); + font-size: var(--list-ul-marker-size-3); + color: var(--list-ul-marker-color-3,var(--list-marker-color)); +} + + +.markdown-source-view.mod-cm6 .cm-indent::before { + margin-left: var(--bt-list-indentation-margin-left-editing, 0px); +} +.markdown-rendered.show-indentation-guide li > ul::before, +.markdown-rendered.show-indentation-guide li > ol::before { + margin-left: var(--bt-list-indentation-margin-left-reading, 0); +} + +.is-focused .mod-active .workspace-tab-header.is-active +.workspace-tab-header-inner-icon { + color: var(--theme-color); +} + +body:not(.default-list-marker) .list-collapse-indicator:hover ~ .list-bullet:after, +body:not(.default-list-marker) .cm-fold-indicator:hover ~ .list-bullet:after, +body:not(.default-list-marker) .list-collapse-indicator:hover ~ .cm-formatting-list .list-bullet:after, +body:not(.default-list-marker) .cm-fold-indicator:hover ~ .cm-formatting-list .list-bullet:after { + box-shadow: -0.02em 0.058em 0 2px var(--background-modifier-hover); + background-color: var(--background-modifier-hover); +} + +body:not(.default-list-marker) li.is-collapsed .list-collapse-indicator:hover ~ .list-bullet:after, +body:not(.default-list-marker) li.is-collapsed .cm-fold-indicator:hover ~ .list-bullet:after, +body:not(.default-list-marker) .list-collapse-indicator:hover.is-collapsed ~ .list-bullet:after, +body:not(.default-list-marker) .cm-fold-indicator:hover.is-collapsed ~ .list-bullet:after, +body:not(.default-list-marker) li.is-collapsed .list-collapse-indicator:hover ~ .cm-formatting-list .list-bullet:after, +body:not(.default-list-marker) li.is-collapsed .cm-fold-indicator:hover ~ .cm-formatting-list .list-bullet:after, +body:not(.default-list-marker) .list-collapse-indicator:hover.is-collapsed ~ .cm-formatting-list .list-bullet:after, +body:not(.default-list-marker) .cm-fold-indicator:hover.is-collapsed ~ .cm-formatting-list .list-bullet:after, + +body:not(.default-list-marker) li.is-collapsed .list-bullet:after, +body:not(.default-list-marker) .is-collapsed ~ .cm-formatting-list .list-bullet:after, +body:not(.default-list-marker) .markdown-rendered .has-list-bullet .has-list-bullet .has-list-bullet .has-list-bullet .is-collapsed .list-bullet::after { + color: var(--list-marker-color-collapsed); + box-shadow: -0.02em 0.058em 0 2px var(--background-modifier-active-hover); + background-color: var(--background-modifier-active-hover); +} + + +body.colorful-unordered-list ul > li::marker { + color: var(--list-colorful-marker); +} +body.colorful-unordered-list :is(ul, ol) ul li::marker { + color: hsl(calc(var(--accent-h) + 60),var(--accent-s),var(--accent-l)); +} +body.colorful-ordered-list :is(ul, ol) :is(ul, ol) ul li::marker { + color: hsl(calc(var(--accent-h) + 120),var(--accent-s),calc(var(--accent-l) * 0.95)); +} +body.colorful-ordered-list :is(ul, ol) :is(ul, ol) :is(ul, ol) ul li::marker { + color: hsl(calc(var(--accent-h) + 180),var(--accent-s),calc(var(--accent-l) * 0.95)); +} +body.colorful-ordered-list :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) ul li::marker { + color: hsl(calc(var(--accent-h) + 240),var(--accent-s),calc(var(--accent-l) * 0.95)); +} +body.colorful-ordered-list :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) ul li::marker { + color: hsl(calc(var(--accent-h) + 300),var(--accent-s),calc(var(--accent-l) * 0.95)); +} +body.colorful-ordered-list :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) ul li::marker { + color: hsl(calc(var(--accent-h) + 0), var(--accent-s), calc(var(--accent-l) * 0.95)); +} + +body.colorful-unordered-list .markdown-source-view.mod-cm6 .list-bullet::after { + content: var(--list-ul-colorful-marker-content); +} + +body.colorful-unordered-list .has-list-bullet .list-bullet::after, +body.colorful-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-1.cm-line div.cm-fold-indicator ~ span.cm-formatting .list-bullet::after, +body.colorful-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-1.cm-line>span.cm-formatting:first-of-type .list-bullet::after { + color: var(--list-colorful-marker); +} + + +body.colorful-unordered-list .has-list-bullet .has-list-bullet .list-bullet::after, +body.colorful-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-2.cm-line div.cm-fold-indicator ~ span.cm-formatting .list-bullet::after, +body.colorful-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-2.cm-line span.cm-hmd-list-indent ~ span.cm-formatting .list-bullet::after { + color: var(--list-colorful-marker); + filter: hue-rotate(60deg); +} +body.colorful-unordered-list .has-list-bullet .has-list-bullet .has-list-bullet .list-bullet::after, +body.colorful-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-3.cm-line div.cm-fold-indicator ~ span.cm-formatting .list-bullet::after, +body.colorful-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-3.cm-line span.cm-hmd-list-indent ~ span.cm-formatting .list-bullet::after { + color: var(--list-colorful-marker); + filter: hue-rotate(120deg); +} +body.colorful-unordered-list .has-list-bullet .has-list-bullet .has-list-bullet .has-list-bullet .list-bullet::after, +body.colorful-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-4.cm-line div.cm-fold-indicator ~ span.cm-formatting .list-bullet::after, +body.colorful-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-4.cm-line span.cm-hmd-list-indent ~ span.cm-formatting .list-bullet::after { + color: var(--list-colorful-marker); + filter: hue-rotate(180deg); +} +body.colorful-unordered-list .has-list-bullet .has-list-bullet .has-list-bullet .has-list-bullet .has-list-bullet .list-bullet::after, +body.colorful-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-5.cm-line div.cm-fold-indicator ~ span.cm-formatting .list-bullet::after, +body.colorful-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-5.cm-line span.cm-hmd-list-indent ~ span.cm-formatting .list-bullet::after { + color: var(--list-colorful-marker); + filter: hue-rotate(240deg); +} +body.colorful-unordered-list .has-list-bullet .has-list-bullet .has-list-bullet .has-list-bullet .has-list-bullet .has-list-bullet .list-bullet::after, +body.colorful-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-6.cm-line div.cm-fold-indicator ~ span.cm-formatting .list-bullet::after, +body.colorful-unordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-6.cm-line span.cm-hmd-list-indent ~ span.cm-formatting .list-bullet::after { + color: var(--list-colorful-marker); + filter: hue-rotate(300deg); +} + + +body.colorful-unordered-list li.is-collapsed .list-collapse-indicator:hover ~ .list-bullet:after, +body.colorful-unordered-list li.is-collapsed .cm-fold-indicator:hover ~ .list-bullet:after, +body.colorful-unordered-list .list-collapse-indicator:hover.is-collapsed ~ .list-bullet:after, +body.colorful-unordered-list .cm-fold-indicator:hover.is-collapsed ~ .list-bullet:after, +body.colorful-unordered-list li.is-collapsed .list-collapse-indicator:hover ~ .cm-formatting-list .list-bullet:after, +body.colorful-unordered-list li.is-collapsed .cm-fold-indicator:hover ~ .cm-formatting-list .list-bullet:after, +body.colorful-unordered-list .list-collapse-indicator:hover.is-collapsed ~ .cm-formatting-list .list-bullet:after, +body.colorful-unordered-list .cm-fold-indicator:hover.is-collapsed ~ .cm-formatting-list .list-bullet:after, + +body.colorful-unordered-list li.is-collapsed .list-bullet:after, +body.colorful-unordered-list .is-collapsed ~ .cm-formatting-list .list-bullet:after, +body.colorful-unordered-list .markdown-rendered .has-list-bullet .has-list-bullet .has-list-bullet .has-list-bullet .is-collapsed .list-bullet::after { + color: var(--list-marker-color-collapsed); + box-shadow: -0.02em 0.058em 0 2px var(--background-modifier-active-hover); + background-color: var(--background-modifier-active-hover); +} + + +/*ordered-list-style-1*/ +body.ordered-list-style-1 ol, +body.ordered-list-style-1 ol ol, +body.ordered-list-style-1 ol ol ol, +body.ordered-list-style-1 ol ul ol, +body.ordered-list-style-1 ol ol ol ol, +body.ordered-list-style-1 ol ol ul ol, +body.ordered-list-style-1 ol ul ol ol { + list-style: none; +} + +body.ordered-list-style-1 ol { + counter-reset: niceBT; +} + +body.ordered-list-style-1 ol>li { + counter-increment: niceBT; +} + +body.ordered-list-style-1 .markdown-rendered.show-indentation-guide li > ul::before { + left: -18px; +} +body.ordered-list-style-1 .markdown-rendered.show-indentation-guide li > ol::before { + left: -11px; +} + +body.ordered-list-style-1 ol>li::before { + content: counters(niceBT, '.') '. '; + font-weight: bold; + font-family: Inter; + color: var(--list-ol-number-color); + display: inline-block; + white-space: pre; + margin-left: -0.7em; +} +body.ordered-list-style-1 ul>li:not(.task-list-item)>p { + display: inline; +} +body.ordered-list-style-1 ul>li:not(.task-list-item) { + list-style-position: inside; + padding-left: 0.25em; +} + +body.ordered-list-style-1 ol.contains-task-list>li.task-list-item { + margin-left: -1.2em; +} + +body.list-bracket-style .markdown-rendered.show-indentation-guide li:not(.task-list-item) > :is(ol,ul)::before{ + border: none; +} + +body.list-bracket-style :is(.markdown-preview-view,.markdown-rendered) ul>li:not(.task-list-item)::marker { + font-size: 0.9em; +} + + +body.list-bracket-style :is(.markdown-preview-view,.markdown-rendered):not(.kanban) li:not(.task-list-item) { + padding-left: 0.3rem; +} + +body.list-bracket-style :is(.markdown-preview-view,.markdown-rendered):not(.kanban) ul>li:not(.task-list-item) { + border-radius: var(--radius-s); + word-wrap: break-word; + word-break: break-word; + transition: all 300ms ease-in-out; + border-left: 0.125em solid var(--list-ul-block-color); +} + +body.list-bracket-style :is(.markdown-preview-view,.markdown-rendered):not(.kanban) ul>li:not(.task-list-item):hover { + border-color: var(--list-ul-hover); +} + + + +body.list-bracket-style :is(.markdown-preview-view,.markdown-rendered) ol:not(.contains-task-list)>li:not(.task-list-item) { + border-left: 0.125em solid var(--list-ol-block-color); + border-radius: var(--radius-s); + padding-left: 0.3rem; + border-radius: var(--radius-s); + transition: all 300ms ease-in-out; +} + +body.list-bracket-style ol.contains-task-list ol li:not(.task-list-item) { + border-left: none !important; + padding-left: 0.25em; +} + +body.list-bracket-style :is(.markdown-preview-view,.markdown-rendered) ol:not(.contains-task-list)>li:not(.task-list-item):hover { + border-color: var(--list-ol-hover); +} + + +body.list-bracket-style-two :is(.markdown-preview-view,.markdown-rendered):not(.kanban) :is(ul,ol)>li:not(.task-list-item) { + border-radius: var(--radius-s); + word-wrap: break-word; + word-break: break-word; + transition: all 300ms ease-in-out; + border-left: 0.125em solid var(--list-ul-block-color); +} + +body.list-bracket-style-two :is(.markdown-preview-view,.markdown-rendered):not(.kanban) ol>li:not(.task-list-item) { + border-left: 0.125em solid var(--list-ol-block-color); +} + +body.list-bracket-style-two .markdown-rendered.show-indentation-guide li:not(.task-list-item) > ul::before, +body.list-bracket-style-two .markdown-rendered.show-indentation-guide li:not(.task-list-item) > ol::before { + border: none; +} + +/*list-bracket-style-two*/ +body.list-bracket-style-two ol, +body.list-bracket-style-two ol ol, +body.list-bracket-style-two ol ol ol, +body.list-bracket-style-two ol ul ol, +body.list-bracket-style-two ol ol ol ol, +body.list-bracket-style-two ol ol ul ol, +body.list-bracket-style-two ol ul ol ol { + list-style: none; +} + +body.list-bracket-style-two ol { + counter-reset: niceBT; +} + +body.list-bracket-style-two ol>li { + counter-increment: niceBT; +} + +body.list-bracket-style-two ol>li::before { + content: counters(niceBT, '.') '. '; + font-weight: bold; + font-family: Monaco; + font-size: 0.8em; + color: var(--list-ol-number-color); + display: inline-block; + white-space: pre; +} + +body.list-bracket-style-two ul>li:not(.task-list-item) { + padding-left: 1.1em; +} +body.list-bracket-style-two ol>li:not(.task-list-item) { + padding-left: 0.4em; +} + +body.list-bracket-style-two .markdown-rendered .list-bullet { + left: 0.6em; +} + +body.list-bracket-style-three :is(.markdown-preview-view,.markdown-rendered):not(.kanban) :is(ul,ol):has(:is(ol,ul))>li:has(:is(ol,ul)):not(.task-list-item) { + border-radius: var(--radius-s); + word-wrap: break-word; + word-break: break-word; + transition: all 300ms ease-in-out; + border-left: 0.125em solid var(--list-ul-block-color); +} +body.list-bracket-style-three :is(.markdown-preview-view,.markdown-rendered):not(.kanban) ol:has(:is(ol,ul))>li:has(:is(ol,ul)):not(.task-list-item) { + border-left: 0.125em solid var(--list-ol-block-color); +} + +body.list-bracket-style-three :is(.markdown-preview-view,.markdown-rendered):not(.kanban) :is(ul,ol):has(:is(ol,ul))>li:has(:is(ol,ul)):not(.task-list-item) { + padding-left: 0.3em; +} + +body.list-bracket-style-three .markdown-rendered.show-indentation-guide li:not(.task-list-item) > ul::before, +body.list-bracket-style-three .markdown-rendered.show-indentation-guide li:not(.task-list-item) > ol::before { + border: none; +} +body.list-bracket-style-three :is(.markdown-preview-view,.markdown-rendered):not(.kanban) li:not(.task-list-item) { + padding-left: 0.45rem; +} + + +/*list-vertical-line-one*/ +body.list-vertical-line-one ol, +body.list-vertical-line-one ol ol, +body.list-vertical-line-one ol ol ol, +body.list-vertical-line-one ol ul ol, +body.list-vertical-line-one ol ol ol ol, +body.list-vertical-line-one ol ol ul ol, +body.list-vertical-line-one ol ul ol ol { + list-style: none; +} + +body.list-vertical-line-one ol { + counter-reset: niceBTT; +} + +body.list-vertical-line-one ol>li { + counter-increment: niceBTT; +} + +body.list-vertical-line-one ol>li::before { + content: counters(niceBTT, '.') '. '; + font-weight: bold; + color: var(--list-ol-number-color); + margin-left: -1.3em; + font-family: Monaco; + font-size: 0.9em; +} + +body.list-vertical-line-one :is(ol,ul) :is(ol,ul) { + position: relative; +} + +:is(body.list-vertical-line-one,body.list-vertical-line-one, body.list-vertical-line-one) :is(.markdown-preview-view,.markdown-rendered) ul ol:not(.contains-task-list)>li:not(.task-list-item), +:is(body.list-vertical-line-one,body.list-vertical-line-one, body.list-vertical-line-one) :is(.markdown-preview-view,.markdown-rendered) ul ol:not(.contains-task-list)+ul>li:not(.task-list-item), +:is(body.list-vertical-line-one,body.list-vertical-line-one, body.list-vertical-line-one) :is(.markdown-preview-view,.markdown-rendered):not(.kanban) ol ul>li:not(.task-list-item), +:is(body.list-vertical-line-one,body.list-vertical-line-one, body.list-vertical-line-one) :is(.markdown-preview-view,.markdown-rendered):not(.kanban) ol ul+ol>li:not(.task-list-item) { + margin-top: calc(var(--margin-list) * -0.25em); + padding-top: calc(var(--margin-list) * 0.25em); +} + + +body.colorful-ordered-list ol li::marker, +body.colorful-ordered-list ol li::before, +body.colorful-ordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-1.cm-line div.cm-fold-indicator ~ span.cm-formatting.cm-formatting-list-ol, +body.colorful-ordered-list .cm-formatting.cm-formatting-list.cm-formatting-list-ol, +body.colorful-ordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-1.cm-line span.cm-hmd-list-indent ~ span.cm-formatting.cm-formatting-list-ol { + color: var(--list-colorful-marker); +} + +body.colorful-ordered-list :is(ul, ol) ol li::marker { + color: hsl(calc(var(--accent-h) + 60),var(--accent-s),var(--accent-l)); +} +body.colorful-ordered-list :is(ul, ol) ol li::before, +body.colorful-ordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-2.cm-line div.cm-fold-indicator ~ span.cm-formatting.cm-formatting-list-ol, +body.colorful-ordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-2.cm-line span.cm-hmd-list-indent ~ span.cm-formatting.cm-formatting-list-ol { + color: var(--list-colorful-marker); + filter: hue-rotate(60deg); +} + +body.colorful-ordered-list :is(ul, ol) :is(ul, ol) ol li::marker { + color: hsl(calc(var(--accent-h) + 120),var(--accent-s),calc(var(--accent-l) * 0.95)); +} +body.colorful-ordered-list :is(ul, ol) :is(ul, ol) ol li::before, +body.colorful-ordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-3.cm-line div.cm-fold-indicator ~ span.cm-formatting.cm-formatting-list-ol, +body.colorful-ordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-3.cm-line span.cm-hmd-list-indent ~ span.cm-formatting.cm-formatting-list-ol { + color: var(--list-colorful-marker); + filter: hue-rotate(120deg); +} + +body.colorful-ordered-list :is(ul, ol) :is(ul, ol) :is(ul, ol) ol li::marker { + color: hsl(calc(var(--accent-h) + 180),var(--accent-s),calc(var(--accent-l) * 0.95)); +} +body.colorful-ordered-list :is(ul, ol) :is(ul, ol) :is(ul, ol) ol li::before, +body.colorful-ordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-4.cm-line div.cm-fold-indicator ~ span.cm-formatting.cm-formatting-list-ol, +body.colorful-ordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-4.cm-line span.cm-hmd-list-indent ~ span.cm-formatting.cm-formatting-list-ol { + color: var(--list-colorful-marker); + filter: hue-rotate(180deg); +} + +body.colorful-ordered-list :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) ol li::marker { + color: hsl(calc(var(--accent-h) + 240),var(--accent-s),calc(var(--accent-l) * 0.95)); +} +body.colorful-ordered-list :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) ol li::before, +body.colorful-ordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-5.cm-line div.cm-fold-indicator ~ span.cm-formatting.cm-formatting-list-ol, +body.colorful-ordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-5.cm-line span.cm-hmd-list-indent ~ span.cm-formatting.cm-formatting-list-ol { + color: var(--list-colorful-marker); + filter: hue-rotate(240deg); +} + +body.colorful-ordered-list :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) ol li::marker { + color: hsl(calc(var(--accent-h) + 300),var(--accent-s),calc(var(--accent-l) * 0.95)); +} + +body.colorful-ordered-list :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) ol li::before, +body.colorful-ordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-6.cm-line div.cm-fold-indicator ~ span.cm-formatting.cm-formatting-list-ol, +body.colorful-ordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-6.cm-line span.cm-hmd-list-indent ~ span.cm-formatting.cm-formatting-list-ol { + color: var(--list-colorful-marker); + filter: hue-rotate(300deg); +} + +body.colorful-ordered-list :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) ol li::marker { + color: hsl(calc(var(--accent-h) + 0), var(--accent-s), calc(var(--accent-l) * 0.95)); +} + +body.colorful-ordered-list :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) :is(ul, ol) ol li::before, +body.colorful-ordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-7.cm-line div.cm-fold-indicator ~ span.cm-formatting.cm-formatting-list-ol, +body.colorful-ordered-list .markdown-source-view.mod-cm6 .HyperMD-list-line.HyperMD-list-line-7.cm-line span.cm-hmd-list-indent ~ span.cm-formatting.cm-formatting-list-ol { + color: var(--list-colorful-marker); + filter: hue-rotate(0deg); +} + + +@property --colorA { + syntax: ''; + inherits: false; + initial-value: #9800f021; +} +@property --colorB { + syntax: ''; + inherits: false; + initial-value: #0048f021; +} +@property --colorC { + syntax: ''; + inherits: false; + initial-value: #00f02c21; +} +body.enable-icon-anima div.nav-header:hover { + background: linear-gradient(135deg,var(--colorA),var(--colorB),var(--colorC)); + animation: rainbow-change 8s infinite linear; +} + +@keyframes rainbow-change { + 20% { + --colorA: #f0000015; + --colorB: #88f00015; + --colorC: #0048f015; + } + 40% { + --colorA: #10f00015; + --colorB: #007cf015; + --colorC: #6400f015; + } + 60% { + --colorA: #d4f00015; + --colorB: #f0780015; + --colorC: #f0003c15; + } + 80% { + --colorA: #0060f015; + --colorB: #f0700015; + --colorC: #00d0f015; + } +} + + +body.enable-icon-anima :is(.workspace-ribbon, .nav-header) .clickable-icon:before{ + content: ''; + background-color: var(--theme-color-translucent-01); + position: absolute; + width: 20px; + height: 20px; + border-radius: 50%; + visibility: hidden; +} + +body.enable-icon-anima :is(.workspace-ribbon, .nav-header) .clickable-icon:hover:before { + animation: bead-1 1s; +} + +body.enable-icon-anima :is(.workspace-ribbon, .nav-header) .clickable-icon:after { + content: ''; + background-color: var(--theme-color-translucent-01); + position: absolute; + width: 20px; + height: 20px; + border-radius: 50%; + visibility: hidden; +} + +body.enable-icon-anima :is(.workspace-ribbon, .nav-header) .clickable-icon:hover:after { + animation: bead-2 1s; +} + +@keyframes bead-1 { + 0% { + transform: scale(1); + visibility: visible; + } + 25% { + margin-left: 20px; + margin-top: 20px; + transform: scale(0); + visibility: hidden; + } + 50% { + margin: 0px; + transform: scale(1); + visibility: visible; + } + 100% { + margin-left: 20px; + margin-top: -20px; + transform: scale(0); + visibility: hidden; + } +} + +@keyframes bead-2 { + 0% { + transform: scale(1); + visibility: visible; + } + 25% { + margin-left: -20px; + margin-top: -20px; + transform: scale(0); + visibility: hidden; + } + 50% { + margin: 0px; + transform: scale(1); + visibility: visible; + } + 100% { + margin-left: -20px; + margin-top: 20px; + transform: scale(0); + visibility: hidden; + } +} + +/**ob 1.0 **/ +.is-hidden-frameless:not(.is-fullscreen) .titlebar-button-container.mod-right:hover { + background-color: var(--titlebar-background-focused); +} +.is-hidden-frameless:not(.is-fullscreen) .titlebar-button-container.mod-right { + background-color: transparent; +} +.is-hidden-frameless.mod-windows .titlebar-button { + background-color: transparent; +} + +.markdown-preview-view progress, .markdown-rendered progress, .markdown-source-view.is-live-preview progress { + overflow: unset; + vertical-align:top; +} + +body.title-justify-start .view-header-title-container { + justify-content: flex-start; +} + +.search-input-container input:hover { + box-shadow: var(--window-shadow-hover); +} +.menu{ + background-color: var(--color-base-10); +} + +.cm-s-obsidian span.obsidian-search-match-highlight { + box-shadow: none; +} +select:hover, +.dropdown:hover, +select:focus, +.dropdown:focus { + box-shadow: none; +} + +.workspace-leaf.mod-active .nav-folder.has-focus > .nav-folder-title, .workspace-leaf.mod-active .nav-file.has-focus > .nav-file-title { + box-shadow: none; +} + +.nav-folder.mod-root > .nav-folder-children > .nav-file .nav-file-title { + padding-left: var(--size-2-3); +} + +.nav-folder .nav-folder-children[style="height: 0px;"] { + height: auto !important; +} + +textarea:active, +input[type='text']:active, +input[type='search']:active, +input[type='email']:active, +input[type='password']:active, +input[type='number']:active, +textarea:focus, +input[type='text']:focus, +input[type='search']:focus, +input[type='email']:focus, +input[type='password']:focus, +input[type='number']:focus, +textarea:focus-visible, +input[type='text']:focus-visible, +input[type='search']:focus-visible, +input[type='email']:focus-visible, +input[type='password']:focus-visible, +input[type='number']:focus-visible { + box-shadow: none; +} + + +@keyframes fancy-prompt-1 { + 0% { + transform: scale(1.2) rotate(0); + opacity: 0; + box-shadow: 0 0 0 rgba(241, 241, 241, 0); + } + 50% { + transform: scale(1) rotate(-0.2deg); + opacity: 1; + box-shadow: 0 0 0 rgba(241, 241, 241, 0.5); + } + 75% { + transform: scale(1) rotate(0.2deg); + opacity: 1; + box-shadow: 0 0 250px rgba(241, 241, 241, 0.5); + } + 100% { + transform: scale(1) rotate(0); + opacity: 1; + box-shadow: 0 0 500px rgba(241, 241, 241, 0); + } +} + +.prompt { + box-shadow: 0 0 10px 1px var(--prompt-box-shadow); + border: none; +} + + +@keyframes slideUpLarge { + 0% { + transform: translateY(-100%); + } + 100% { + transform: translateY(0%); + } +} + +@keyframes quickScaleDown { + 0% { + transform: scale(0); + } + 20% { + transform: scale(0.2); + } + + 40% { + transform: scale(0.4); + } + 60% { + transform: scale(0.6); + } + 80% { + transform: scale(0.8); + } + 100% { + transform: scale(1); + } +} + +@keyframes blowUpModal { + 0% { + transform: scale(0); + opacity: 0; + } + 100% { + transform: scale(1); + opacity: 1; + } +} + + +@keyframes roadRunnerIn { + 0% { + transform: translateX(-1500px) skewX(30deg) scaleX(1.3); + } + 70% { + transform: translateX(30px) skewX(0deg) scaleX(0.9); + } + 100% { + transform: translateX(0px) skewX(0deg) scaleX(1); + } +} + +@keyframes roadRunnerOut { + 0% { + transform: translateX(400px) skewX(30deg) scaleX(1.3); + } + 50% { + transform: translateX(-30px) skewX(0deg) scaleX(0.9); + } + 100% { + transform: translateX(0px) skewX(0deg) scaleX(1); + } +} + +@keyframes pop-swirl { + 0% { + transform: scale(0) rotate(360deg); + } + 60% { + transform: scale(0.8) rotate(-10deg); + } + 100% { + transform: scale(1) rotate(0deg); + } +} + +@keyframes unfoldIn { + 0% { + transform: scaleY(0.005) scaleX(0); + } + 50% { + transform: scaleY(0.005) scaleX(1); + } + 100% { + transform: scaleY(1) scaleX(1); + } +} + +[class="prompt"] { + animation: var(--prompt-options) .5s ease-in; +} + +body.hide-left-ribbon .workspace-ribbon.mod-left:not(:hover):before, +body.hide-left-ribbon .workspace-ribbon.side-dock-ribbon.mod-left:not(:hover), +body.hide-left-ribbon .workspace-ribbon.side-dock-ribbon.mod-left:not(:hover) .sidebar-toggle-button.mod-left { + margin-left: -40px; +} + +body.hide-left-ribbon .workspace-ribbon.side-dock-ribbon.mod-left .sidebar-toggle-button.mod-left, +body.hide-left-ribbon .workspace-ribbon.mod-left:before, +body.hide-left-ribbon .workspace-ribbon.side-dock-ribbon.mod-left { + transition: all 350ms ease-in-out; +} + +body.hide-left-ribbon-retention-drawer.hide-titlebar-close-btn.is-hidden-frameless .titlebar-button.mod-logo { + display: none; +} + +body.hide-left-ribbon-retention-drawer.hide-titlebar-close-btn.is-hidden-frameless .workspace-ribbon.mod-left .sidebar-toggle-button { + padding-top: var(--size-4-2); +} +body.hide-left-ribbon-retention-drawer .workspace-ribbon.mod-left:not(:hover) ~ .workspace-split .workspace-tabs.mod-top.mod-top-left-space .workspace-tab-header-container { + margin-left: 30px; + transition: all 350ms ease-in-out; +} +body.hide-left-ribbon-retention-drawer .workspace-ribbon.mod-left:not(:hover):before, +body.hide-left-ribbon-retention-drawer .workspace-ribbon.side-dock-ribbon.mod-left:not(:hover) { + margin-left: -40px; +} + +body.hide-left-ribbon-retention-drawer .workspace-ribbon.side-dock-ribbon.mod-left .sidebar-toggle-button.mod-left, +body.hide-left-ribbon-retention-drawer .workspace-ribbon.mod-left:before, +body.hide-left-ribbon-retention-drawer .workspace-ribbon.side-dock-ribbon.mod-left, +body.hide-left-ribbon-retention-drawer .workspace-ribbon.mod-left:hover ~ .workspace-split .workspace-tabs.mod-top .workspace-tab-header-container { + transition: all 350ms ease-in-out; +} +body.hide-titlebar-close-btn.hide-left-ribbon-retention-drawer .workspace-ribbon.side-dock-ribbon.mod-left .sidebar-toggle-button.mod-left { + background: unset; +} + + +body.hide-left-ribbon-retention-drawer:not(.background-settings-workplace-background-image) .workspace-tabs.mod-top { + background: var(--background-secondary-alt); +} +body.stack-tab-text-ori-mixed .workspace-tab-header-inner-title { + text-orientation: mixed; +} + +body:is(.bt-bubble-ribbon-hide-left,.bt-bubble-ribbon) .side-dock-actions { + border-radius: 0 var(--radius-l) var(--radius-l) 0; +} +body:is(.bt-bubble-ribbon-hide-left,.bt-bubble-ribbon) .side-dock-actions, +body:is(.bt-bubble-ribbon-hide-left,.bt-bubble-ribbon) .side-dock-settings { + border: 1px solid var(--tab-outline-color); + padding: 5px 0; + background-color: var(--background-primary); +} +body:is(.bt-bubble-ribbon-hide-left,.bt-bubble-ribbon) .side-dock-settings { + border-radius: 0 var(--radius-l) 0 0; + margin-bottom: 0; +} +body:is(.bt-bubble-ribbon-hide-left,.bt-bubble-ribbon) .workspace-ribbon { + padding: 0 3px 0 0; + border-right: none; +} + +body.bt-bubble-ribbon-hide-left .workspace-ribbon.mod-left:not(:hover):before, +body.bt-bubble-ribbon-hide-left .workspace-ribbon.side-dock-ribbon.mod-left:not(:hover), +body.bt-bubble-ribbon-hide-left .workspace-ribbon.side-dock-ribbon.mod-left:not(:hover) .sidebar-toggle-button.mod-left { + margin-left: -40px; +} + +body.bt-bubble-ribbon-hide-left .workspace-ribbon.side-dock-ribbon.mod-left .sidebar-toggle-button.mod-left, +body.bt-bubble-ribbon-hide-left .workspace-ribbon.mod-left:before, +body.bt-bubble-ribbon-hide-left .workspace-ribbon.side-dock-ribbon.mod-left { + transition: all 350ms ease-in-out; +} + + +body.tab-title-bar-position .workspace-tabs:not(.mod-stacked) .view-header { + left: 16px; + border: none; + transform-origin: right center; + writing-mode: vertical-rl; + position: absolute; + padding: 0; + background: transparent; +} + +body.tab-title-bar-position .workspace-tabs:not(.mod-stacked) .view-header-nav-buttons { + margin-left: -12px; +} + +body.tab-title-bar-position .workspace-tabs:not(.mod-stacked) .view-header .view-actions { + margin-left: -13px; +} +body.tab-title-bar-position .workspace-tabs:not(.mod-stacked) .view-header-title-container { + position: absolute; + top: 25vh; + left: -8px; + transform-origin: right center; + writing-mode: vertical-rl; + text-orientation: mixed; +} + +body.view-button-front.tab-title-bar-position .workspace-leaf-content .view-header .view-header-nav-buttons{ + margin-left: -12px; + margin-top: 25px; +} + +body.view-button-front.tab-title-bar-position .workspace-leaf-content:is([data-mode="preview"], +[data-mode="source"]) .view-header .view-actions>:is([aria-label^="该面板处于编辑视图中"], +[aria-label^="Current view: editing"]) { + left: -10px; +} +body.view-button-front.tab-title-bar-position .workspace-leaf-content[data-mode='preview'] .view-header .view-actions>:is([aria-label^="该面板处于阅读视图中"],[aria-label^="Current view: reading"]) { + left: -10px; +} + +body.tab-title-bar-position .markdown-preview-view { + padding-left: unset; +} + +body.tab-title-bar-position .workspace-split.mod-root .workspace-leaf-content[data-type='markdown'] .view-content { + padding-left: 2.5rem; +} + +body.tab-title-bar-position .workspace-tabs:not(.mod-stacked) .view-header-title-container.web-browser-header-bar { + top: unset; +} + +body.mod-windows.hide-titlebar-close-btn.is-hidden-frameless .titlebar-button.mod-logo { + display: block; + margin-left: 5px; + margin-top: 6px; +} + +body.hide-titlebar-close-btn.hide-left-ribbon-retention-drawer .view-header { + padding-left: 24px; +} +body.hide-titlebar-close-btn.hide-left-ribbon-retention-drawer.view-button-front .workspace-leaf-content:is([data-mode="preview"],[data-mode="source"]) .view-header .view-actions>:is([aria-label^="该面板处于编辑视图中"],[aria-label^="Current view: editing"]) { + left:30px +} +body.hide-titlebar-close-btn.hide-left-ribbon-retention-drawer.view-button-front .workspace-leaf-content[data-mode='preview'] .view-header .view-actions>:is([aria-label^="该面板处于阅读视图中"],[aria-label^="Current view: reading"]) { + left: 30px; +} + +body.view-button-front .view-header { + padding-left: 32px !important; +} +body.hide-titlebar-close-btn.hide-left-ribbon.is-hidden-frameless .titlebar-button.mod-logo { + display: none; +} + +body.mod-windows.hide-titlebar-close-btn.is-hidden-frameless .workspace-ribbon.side-dock-ribbon.mod-left { + padding-top: 26px; +} + +body.mod-windows.hide-titlebar-close-btn.is-hidden-frameless .workspace-ribbon.mod-left .sidebar-toggle-button { + padding-top: 56px; +} +body.mod-windows.hide-titlebar-close-btn.is-hidden-frameless .workspace-ribbon.mod-left.is-collapsed .sidebar-toggle-button { + padding-top: 54px; +} +body.mod-windows.hide-titlebar-close-btn.is-hidden-frameless .workspace-ribbon.mod-left .side-dock-actions { + padding-top: 12px; +} +body.hide-titlebar-close-btn.is-hidden-frameless .titlebar-button-container.mod-right:not(:hover) { + transform: translateY(calc( -1 * var(--header-height) + 6px)); + transition: all 0.6s linear; +} + +body.hide-titlebar-close-btn.is-hidden-frameless:not(.is-fullscreen) .workspace-tabs.mod-top-right-space .workspace-tab-header-container:after { + top: -20px; +} + +body.hide-titlebar-close-btn.is-hidden-frameless:not(.is-fullscreen) .workspace-tabs.mod-top-right-space .workspace-tab-header-container { + padding-right: unset; +} +body.hide-titlebar-close-btn.is-hidden-frameless .titlebar-inner:hover .titlebar-button-container.mod-right { + transition: all 0.1s linear; + transform:translateY(-15px); + background: var(--titlebar-background-focused); + opacity: 0.8; +} +body.hide-titlebar-close-btn.is-hidden-frameless.mod-linux .titlebar-button, +body.hide-titlebar-close-btn.is-hidden-frameless.mod-windows .titlebar-button { + padding-bottom: 6px; + align-items: flex-end; +} + +.theme-light .view-header-title-container:is(.web-browser-header-bar,.wb-header-bar) input:is(.web-browser-search-bar,.wb-search-bar) { + background-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='2' stroke-linecap='round' stroke-linejoin='round' class='svg-icon lucide-search'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); + background-repeat: no-repeat; + background-position: 4px 7.5px; + background-size: 14px; + opacity: 0.6; + padding: 0 0 0 22px; + border: none; +} +.theme-dark .view-header-title-container:is(.web-browser-header-bar,.wb-header-bar) input:is(.web-browser-search-bar,.wb-search-bar) { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='svg-icon lucide-search'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); + background-repeat: no-repeat; + background-position: 4px 7.5px; + background-size: 14px; + opacity: 0.6; + padding: 0 0 0 22px; + border: none; + background-color: transparent; +} +.view-header-title-container:is(.web-browser-header-bar,.wb-header-bar) input:is(.web-browser-search-bar,.wb-search-bar):focus { + opacity: 1; +} +.view-header .view-header-title-container:is(.web-browser-header-bar,.wb-header-bar):hover { + border:none; +} + +.view-header-title-container:is(.web-browser-header-bar,.wb-header-bar) .view-header-title-parent:before { + content: ' '; + margin-left: 10px; + color: var(--text-faint); + width:10px; + height: 6px; + background-color: var(--text-muted); + -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='2' stroke-linecap='round' stroke-linejoin='round' class='svg-icon lucide-search'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); +} +/* ====web-browser==== */ +.wb-bookmark-bar { + overflow: unset; + border:none; + right: 7px; +} +.wb-page-search-bar-text { + font-family: var(--font-family-vault); +} +.workspace-leaf-content:is([data-type$="web-browser-view"],[data-type="surfing-view"]) .view-actions .view-action { + opacity: 1 !important; +} +.workspace-leaf-content[data-type$="web-browser-view"] .view-actions>a:not([class*="-web-browser"]) { + display: none; +} +.workspace-leaf-content:not([data-type$="web-browser-view"]) .view-actions>a[class*="-web-browser"]{ + display: none; +} +.workspace-leaf-content[data-type="surfing-view"] .view-actions>a:not(:is([class*="surfing"],[aria-label^="Surfing"],[aria-label="星标"],[aria-label="设置"],[aria-label="star"],[aria-label="settings"])) { + display: none; +} +.wb-bookmark-item, .wb-bookmark-folder { + width: auto; +} +.workspace-leaf-content:not([data-type="surfing-view"]) .view-actions>a:is([class*="surfing"],[aria-label^="Surfing"]) { + display: none; +} + +.wb-page-search-bar-input-container input.wb-page-search-bar-input{ + background-color: var(--background-secondary); + box-shadow: var(--window-shadow2); +} +.wb-page-search-bar-input-container input.wb-page-search-bar-input:not(:hover){ + border:none; +} +.view-header-title-container.web-browser-header-bar input { + padding: 0 10px 0 19px; + border: 0; + outline: none; + background: transparent; +} + +.view-header-title-container.web-browser-header-bar:hover { + border: var(--input-border-width) solid; + color: var(--interactive-accent-hover); + border-radius: 6px; +} +/* ==End==web-browser==== */ + +/* ====new style==== */ +body.background-settings-workplace-background-image.workspace > .workspace-leaf { + background-color: transparent; +} +body:not(.color-scheme-options-simplicity-topaz) .workspace > .workspace-split { + background-color: var(--background-secondary-alt); +} +body.background-settings-workplace-background-image:not(.is-mobile) .workspace-tab-container-before.is-before-active, +body.background-settings-workplace-background-image:not(.is-mobile) .workspace-tab-container-after.is-after-active, +body.background-settings-workplace-background-image:not(.is-mobile) .workspace-tab-header.is-before-active, +body.background-settings-workplace-background-image:not(.is-mobile) .workspace-tab-header.is-after-active, +body.background-settings-workplace-background-image:not(.is-mobile) .workspace-split.mod-right-split .workspace-tabs .workspace-leaf, +body.background-settings-workplace-background-image:not(.is-mobile) .workspace-split.mod-left-split .workspace-tabs .workspace-leaf, +body.background-settings-workplace-background-image:not(.is-mobile) .workspace-leaf-resize-handle, +body.background-settings-workplace-background-image .workspace-split.mod-horizontal:is(.mod-left-split,.mod-right-split) .workspace-tab-header.is-active { + background-color: transparent; +} + +body.toggle-header-bottom-line .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header { + --page-border-bottom: transparent; +} +body.toggle-header-bottom-line.show-view-header .view-header { + --page-border-bottom: transparent; + border-top-left-radius:var(--radius-m); + border-top-right-radius: var(--radius-m); +} + +.workspace-split.mod-root .workspace-tab-header-container-inner .workspace-tab-header:first-child { + margin-left: 1rem; +} + +body.background-settings-workplace-background-image .workspace-split.mod-root .workspace-tab-header.is-active::before, +body.background-settings-workplace-background-image .workspace-split.mod-root .workspace-tab-header.is-active::after { + box-shadow: inset 0 0 0 var(--tab-outline-width) transparent, 0 0 0 calc(var(--tab-curve) * 4) var(--background-secondary); +} + +body.theme-dark:not(.background-settings-workplace-background-image) .workspace-split.mod-horizontal:is(.mod-left-split,.mod-right-split) .workspace-tabs .workspace-leaf-resize-handle { + --divider-color: var(--background-primary); +} +.workspace-tabs:not(.mod-top) .workspace-tab-header-container { + background-color:transparent; +} +/*** emoji toolbar**/ +.callout img.emoji { + display: inline-block!important; +} +/**emoji toolbar*****/ + +body.underline-tab-style .workspace-split:not(.mod-left-split):not(.mod-right-split) .workspace-tab-header-container-inner .workspace-tab-header { + background-color: transparent; + box-shadow: none; +} +body.underline-tab-style .workspace-split:not(.mod-left-split):not(.mod-right-split) .workspace-tab-header-container-inner .workspace-tab-header::before, +body.underline-tab-style .workspace-split:not(.mod-left-split):not(.mod-right-split) .workspace-tab-header-container-inner .workspace-tab-header::after { + display: none; +} +body.underline-tab-style .workspace-split:not(.mod-left-split):not(.mod-right-split) .workspace-tab-header-container-inner .workspace-tab-header.is-active { + border-radius: 0; + border-bottom: 2px solid var(--text-accent); + margin-bottom: 0px; + padding-bottom: 0px; +} +body.underline-tab-style .workspace-split:not(.mod-left-split):not(.mod-right-split) .workspace-tab-header-container-inner .workspace-tab-header.is-active .workspace-tab-header-inner { + border-radius: var(--tab-radius) var(--tab-radius) 0px 0px; + margin-top: 0.5px; + padding-bottom: 4px; +} +body.underline-tab-style .workspace-split:not(.mod-left-split):not(.mod-right-split) .workspace-tab-header-container-inner .workspace-tab-header ::after { + display: none; +} +body.underline-tab-style .workspace-split:not(.mod-left-split):not(.mod-right-split) .workspace-tab-header-container-inner .workspace-tab-header:hover .workspace-tab-header-inner { + background-color: var(--background-modifier-hover); +} + +body.safari-tab-style .workspace-tabs:not(.mod-stacked) .workspace-tab-header::before, +body.safari-tab-style .workspace-tabs:not(.mod-stacked) .workspace-tab-header::after, +body.safari-tab-style .workspace .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header-inner::after { + display: none; +} + +body.safari-tab-style .mod-vertical:not(.mod-left-split):not(.mod-right-split) .workspace-tabs:not(.mod-stacked) .workspace-tab-header-container-inner, +body.safari-tab-style .mod-horizontal:not(.mod-left-split):not(.mod-right-split) .workspace-tabs:not(.mod-stacked) .workspace-tab-header-container-inner { + align-items: center; + margin: 0; + width: 100%; +} + +body.safari-tab-style .mod-vertical:not(.mod-left-split):not(.mod-right-split) .workspace-tabs:not(.mod-stacked) .workspace-tab-header, +body.safari-tab-style .mod-horizontal:not(.mod-left-split):not(.mod-right-split) .workspace-tabs:not(.mod-stacked) .workspace-tab-header { + border-radius: 6px; + box-shadow: none; + height: calc(var(--header-height) * 0.7); + margin-left: 12px; + padding: 0 !important; + transition: 400ms, background-color 150ms ease-in-out; +} + +body.safari-tab-style .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header { + transition: 400ms; +} + +body.safari-tab-style .workspace-tabs:not(.mod-stacked) .workspace-tab-header:first-child { + margin-left: 0; +} + +body.safari-tab-style .mod-root:not(.mod-left-split):not(.mod-right-split) .workspace-tabs:not(.mod-stacked) .workspace-tab-header-inner { + padding: 0 4px 0 8px; + transition: 400ms; +} +body.safari-tab-style .mod-root:not(.mod-left-split):not(.mod-right-split) .workspace-tabs:not(.mod-stacked) .workspace-tab-header-inner, +body.safari-tab-style .mod-root:not(.mod-left-split):not(.mod-right-split) .workspace-tabs:not(.mod-stacked) .workspace-tab-header-inner-close-button, +body.safari-tab-style .mod-root:not(.mod-left-split):not(.mod-right-split) .workspace-tabs:not(.mod-stacked) .workspace-tab-header-inner-icon { + color: var(--text-muted); +} + +body.safari-tab-style .workspace .mod-root .workspace-tab-header-inner::after { + display: none; +} + +body.safari-tab-style .mod-root:not(.mod-left-split):not(.mod-right-split) .workspace-tabs:not(.mod-stacked) .workspace-tab-header.is-active { + flex-grow: 1.67; + max-width: 300px; +} + +body.safari-tab-style .mod-root .workspace-tabs:not(.mod-stacked).mod-active .workspace-tab-header.is-active .workspace-tab-header-inner, +body.safari-tab-style .mod-root .workspace-tabs:not(.mod-stacked).mod-active .workspace-tab-header.is-active .workspace-tab-header-inner-title, +body.safari-tab-style .mod-root .workspace-tabs:not(.mod-stacked).mod-active .workspace-tab-header.is-active .workspace-tab-header-inner-close-button, +body.safari-tab-style .mod-root .workspace-tabs:not(.mod-stacked).mod-active .workspace-tab-header.is-active .workspace-tab-header-inner-icon { + color: var(--text-noraml); + font-weight:bold; +} + +body.safari-tab-style .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header.is-active:hover { + background-color: var(--background-modifier-border); +} + +body.safari-tab-style.theme-light .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header { + border: 1px solid var(--tab-outline-color); +} +body.safari-tab-style .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header { + border: 1px solid rgba(var(--mono-rgb-0), .25) ; +} + +body.transparent-tab-style .workspace-split:not(.mod-left-split):not(.mod-right-split) .workspace-tab-header-container-inner .workspace-tab-header { + --tab-background-active: transparent; + --tab-outline-width: transparent; +} +body.transparent-tab-style.color-scheme-options-simplicity-topaz.theme-dark:not(.background-settings-workplace-background-image) .workspace-split.mod-root .workspace-tab-header.is-active.mod-active { + background-color: var(--tab-background-active); +} + +body.transparent-tab-style.theme-dark .workspace-split.mod-root .workspace-tab-header.is-active.mod-active { + background-color: var(--tab-background-active); +} + +.is-mobilebody, +.is-mobile .app-container, +.is-mobile .horizontal-main-container { + background-color: var(--background-secondary); +} + +.is-mobile.theme-light .mobile-toolbar { + background-color: var(--background-primary-alt); +} + +.is-frameless:is(.is-mobile,.is-tablet).mod-windows { + background-color: var(--background-secondary-alt) !important; +} + +.is-frameless:is(.is-mobile,.is-tablet).mod-windows::after { + content: ""; + display: block; + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + height: calc(var(--titlebar-height) / var(--zoom-factor)); + width: 100%; + background-color: var(--background-mobile-padding-top); + --background-mobile-padding-top: var(--background-secondary-alt); +} + +body.background-settings-workplace-background-image.theme-light.is-frameless:is(.is-mobile,.is-tablet).mod-windows::after { + --background-mobile-padding-top: #f9f9f9; +} +body.background-settings-workplace-background-image.theme-dark.is-frameless:is(.is-mobile,.is-tablet).mod-windows::after { + --background-mobile-padding-top: #000000; +} + +.workspace-tab-header.mod-active .workspace-tab-header-inner-title { + font-weight: bold; +} + +.theme-dark .mod-root .workspace-tabs .workspace-leaf { + background-color: transparent; +} + +.workspace-tab-header-inner-icon img { + margin:auto; +} + +.cm-s-obsidian span.cm-hmd-escape-char { + color: var(--text-muted); +} + + +/* ================================== */ +/* ========= Canvas ========= */ +/* ================================== */ +.canvas-node-content.markdown-embed > .markdown-embed-content > .markdown-preview-view { + padding: 0 0.5em; +} + +body.canvas-workplace-background .workspace-leaf-content[data-type="canvas"], +body.canvas-workplace-background .canvas-wrapper { + --background-primary: var(--color-base-00); +} + +/* hide canvas export grid */ +body.toggle-canvas-grid .canvas-wrapper .canvas-background rect, +.canvas-wrapper.is-screenshotting .canvas-background rect { + opacity: 0; +} + + +/*=======canvas-card-focus-mode======== +=====Modified by Cuman from boninall=====*/ +/* +body.canvas-card-focus-mode .canvas:has(.is-focused.mod-canvas-color-1) .canvas-edges>:not(.mod-canvas-color-1), +body.canvas-card-focus-mode .canvas:has(.is-focused.mod-canvas-color-2) .canvas-edges>:not(.mod-canvas-color-2), +body.canvas-card-focus-mode .canvas:has(.is-focused.mod-canvas-color-3) .canvas-edges>:not(.mod-canvas-color-3), +body.canvas-card-focus-mode .canvas:has(.is-focused.mod-canvas-color-4) .canvas-edges>:not(.mod-canvas-color-4), +body.canvas-card-focus-mode .canvas:has(.is-focused.mod-canvas-color-5) .canvas-edges>:not(.mod-canvas-color-5), +body.canvas-card-focus-mode .canvas:has(.is-focused.mod-canvas-color-6) .canvas-edges>:not(.mod-canvas-color-6), +body.canvas-card-focus-mode .canvas:has(.is-focused.mod-canvas-color-custom) .canvas-edges>:not(.mod-canvas-color-custom), +body.canvas-card-focus-mode .canvas:has(.is-focused.mod-canvas-color-1) .canvas-node.is-themed:not(:is(.mod-canvas-color-1)), +body.canvas-card-focus-mode .canvas:has(.is-focused.mod-canvas-color-2) .canvas-node.is-themed:not(:is(.mod-canvas-color-2)), +body.canvas-card-focus-mode .canvas:has(.is-focused.mod-canvas-color-3) .canvas-node.is-themed:not(:is(.mod-canvas-color-3)), +body.canvas-card-focus-mode .canvas:has(.is-focused.mod-canvas-color-4) .canvas-node.is-themed:not(:is(.mod-canvas-color-4)), +body.canvas-card-focus-mode .canvas:has(.is-focused.mod-canvas-color-5) .canvas-node.is-themed:not(:is(.mod-canvas-color-5)), +body.canvas-card-focus-mode .canvas:has(.is-focused.mod-canvas-color-6) .canvas-node.is-themed:not(:is(.mod-canvas-color-6)), +body.canvas-card-focus-mode .canvas:has(.is-focused.mod-canvas-color-custom) .canvas-node.is-themed:not(.mod-canvas-color-custom) { + filter:grayscale(0.9); +} +*/ + +.canvas-node-content.markdown-embed table { + text-align: start; +} + +/* ================================== */ +.show-full-metadata :is(.metadata-container,.frontmatter-container):not(.is-collapsed) .frontmatter-section { + display: flex!important; +} + +body:not(.show-full-metadata) .markdown-preview-view .metadata-property:not(:has(:is(.multi-select-pill,.metadata-input-longtext:not(:empty)))) { + display: none; +} + +body:not(.show-full-metadata) .markdown-preview-view .metadata-property:has(.metadata-property-key-input[aria-label=""]) { + display: flex!important; +} + +.workspace-split.mod-horizontal:is(.mod-left-split,.mod-right-split) .workspace-tab-container .workspace-leaf-content:not([data-type="file-properties"]) +:is(.metadata-container,.frontmatter-container) { + display: none; +} + +.workspace-leaf-content[data-type="recent-files"] .view-content { + overflow-x: hidden; +} + +.canvas-node-container h1 { + font-size: calc(var(--h1-size) + 1em); + text-align: center; +} + +.canvas-node-placeholder::after { + background-color: rgba(var(--canvas-color), 0.3); +} +.canvas-icon-placeholder svg { + opacity: 0.5; +} +body.canvas-card-text-middle .canvas-node-container .canvas-node-content.markdown-embed:not(.is-loaded) { + text-align: center; +} + +div#popup-search { + background-color: var(--color-base-10); +} + +body:not(.is-phone) .workspace-leaf.mod-active .tree-item-self.has-focus { + --background-modifier-border-focus: color-mix(in srgb, var(--theme-color), transparent 30%); +} + +.tree-item-self { + align-items: center; +} + +body.bt-bubble-layout { + --divider-color: transparent; + --divider-color-hover: var(--backgrouund-modifier-border); +} + +body:not(.bt-bubble-layout) .setting-item[data-id="bt-bubble-settings"], +body:not(.bt-bubble-layout) .setting-item[data-id="bt-bubble-not-file-tree"], +body:not(.bt-bubble-layout) .setting-item[data-id="bt-bubble-layout-hide-borders"], +body:not(.bt-bubble-layout) .setting-item[data-id="bt-bubble-buttons"], +body:not(.bt-bubble-layout) .setting-item[data-id="bt-bubble-layout-padding"], +body:not(.bt-bubble-layout) .setting-item[data-id="bt-bubble-radius"] { + display: none; +} + +body.bt-bubble-layout .mod-vertical .workspace-tabs, +body.bt-bubble-layout .mod-left-split .workspace-tab-container, +body.bt-bubble-layout .mod-right-split .workspace-tab-container { + padding: 0 var(--bt-bubble-layout-padding); +} + +body.bt-bubble-layout .mod-left-split .workspace-tab-header.has-active-menu, +body.bt-bubble-layout .mod-right-split .workspace-tab-header.has-active-menu, +body.bt-bubble-layout .mod-left-split .workspace-tab-header.is-active, +body.bt-bubble-layout .mod-right-split .workspace-tab-header.is-active { + background-color: var(--background-primary); + border: 1px solid var(--bt-bubble-border-color); +} + +body.bt-bubble-layout.bt-bubble-buttons .mod-left-split .workspace-tab-header-container-inner, +body.bt-bubble-layout.bt-bubble-buttons .mod-right-split .workspace-tab-header-container-inner { + padding: 4px; + margin: 4px 0 4px var(--bt-bubble-layout-padding); + border-radius: var(--radius-m); + background-color: color-mix(in srgb, var(--background-primary) 80%, transparent); +} +body.bt-bubble-layout.bt-bubble-buttons .mod-left-split .workspace-tab-header.has-active-menu, +body.bt-bubble-layout.bt-bubble-buttons .mod-right-split .workspace-tab-header.has-active-menu, +body.bt-bubble-layout.bt-bubble-buttons .mod-left-split .workspace-tab-header.is-active, +body.bt-bubble-layout.bt-bubble-buttons .mod-right-split .workspace-tab-header.is-active { + background-color: color-mix(in srgb, lightgray, var(--background-secondary-alt) 75%); + border: 1px solid transparent; +} +body.bt-bubble-layout.bt-bubble-not-file-tree .workspace-leaf-content:is([data-type="file-explorer"],[data-type="mk-file-view"]), +body.bt-bubble-layout .workspace-split .workspace-leaf-content { + border-radius: var(--bt-bubble-radius, var(--radius-l)); + background-color: var(--background-primary); + border: 1px solid var(--bt-bubble-border-color); + margin-bottom: var(--bt-bubble-layout-padding); +} +body.bt-bubble-layout .workspace-split.mod-right-split .workspace-tabs .workspace-leaf, +body.bt-bubble-layout .workspace-split.mod-left-split .workspace-tabs .workspace-leaf, +body.bt-bubble-layout .mod-root .workspace-tabs .workspace-leaf { + background-color: transparent; +} +body.bt-bubble-layout .workspace-tab-header-container, +body.bt-bubble-layout .workspace-ribbon.mod-left:before { + border-bottom: none; +} +body.bt-bubble-layout:not(.background-settings-workplace-background-image) .workspace-split.mod-horizontal:is(.mod-left-split,.mod-right-split) .workspace-tabs .workspace-leaf-resize-handle { + --divider-color: transparent; +} + +body.bt-bubble-layout.bt-bubble-layout-hide-borders { + --bt-bubble-border-color: transparent; + --tab-outline-color: transparent; +} +body.bt-bubble-layout.bt-bubble-layout-hide-borders .menu { + border: 0 !important; +} + +body.bt-bubble-layout .workspace-split.mod-horizontal > * > .workspace-leaf-resize-handle, +body.bt-bubble-layout .workspace-split.mod-right-split > .workspace-leaf-resize-handle, +body.bt-bubble-layout .workspace-split.mod-vertical > * > .workspace-leaf-resize-handle, +body.bt-bubble-layout .workspace-split.mod-left-split > .workspace-leaf-resize-handle { + border: none; +} + +body.background-settings-workplace-background-image .workspace-tabs.mod-active .view-header, +body.background-settings-workplace-background-image .workspace-split.mod-root .view-content, +body.background-settings-workplace-background-image .workspace-tabs .view-header { + background-color: transparent; +} + +body.background-settings-workplace-background-image .workspace-tab-header-container-inner { + margin: 6px -5px 0; +} + +/*Inspired by the OneNote theme in Siyuan software*/ +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .nav-folder.mod-root>.nav-folder-title { + margin-left: -12px; +} + +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .nav-files-container { + padding: 0 0 0 12px; +} + +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder > .tree-item-children.nav-folder-children { + border-left: none; +} + +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked:not(.default-tabs):not(.remove-arrow) .nav-folder-collapse-indicator::after { + display: none; +} + +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder { + border: 1px solid var(--tab-divider-color); + margin: 5px 4px; + border-radius: 3px; + border-left: 2px solid var(--tab-color); +} + +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked:not(.is-grabbing) .tree-item-self.is-clickable.nav-folder-title:hover { + background-color: #cccccc29; +} + +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder.is-collapsed>.tree-item-self.is-clickable.mod-collapsible.nav-folder-title::before { + content: ""; + width: 6px; + height: 20px; + position: absolute; + margin-left: -30px; + border-radius: 3px 0px 0px 3px; + background-color: var(--tab-color); +} + +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder>.tree-item-self.is-clickable.mod-collapsible.nav-folder-title::before { + content: ""; + width: 13px; + height: 20px; + position: absolute; + margin-left: -36px; + border-radius: 3px 0px 0px 3px; + background-color: var(--tab-color); +} + +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+2)::before, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+2) { + --tab-color: var(--Fold0); +} + +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+3)::before, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+3) { + --tab-color: var(--Fold1); +} + +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+4)::before, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+4) { + --tab-color: var(--Fold2); +} + +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+5)::before, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+5) { + --tab-color: var(--Fold3); +} + +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+6)::before, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+6) { + --tab-color: var(--Fold4); +} + +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+7)::before, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+7) { + --tab-color: var(--Fold5); +} + +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+8)::before, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+8) { + --tab-color: var(--Fold6); +} + +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+9)::before, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+9) { + --tab-color: var(--Fold7); +} + +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+10)::before, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+10) { + --tab-color: var(--Fold8); +} + +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+11)::before, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+11) { + --tab-color: var(--Fold9); +} + +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+12)::before, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+12) { + --tab-color: var(--FoldA); +} + +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+13)::before, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+13) { + --tab-color: var(--FoldB); +} + +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+14)::before, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+14) { + --tab-color: var(--FoldC); +} + +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+15)::before, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+15) { + --tab-color: var(--FoldD); +} + +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+16)::before, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+16) { + --tab-color: var(--FoldE); +} + +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+17)::before, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+17) { + --tab-color: var(--FoldF); +} + +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+18)::before, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+18) { + --tab-color: var(--FoldG); +} + +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+19)::before, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+19) { + --tab-color: var(--FoldH); +} + +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n)::before, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n) { + --tab-color: var(--FoldI); +} + +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+1)::before, +body.bt-toggle-colorful-folder.folder-style-change-options-colorful-tab-liked .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder:nth-child(20n+1) { + --tab-color: var(--FoldJ); +} + +body.remove-first-folder-icon .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder>.tree-item-self.is-clickable.mod-collapsible.nav-folder-title .nav-folder-title-content::before, +body.remove-first-folder-icon .tree-item.nav-folder.mod-root>.tree-item-children.nav-folder-children > .tree-item.nav-folder>.tree-item-self.is-clickable.mod-collapsible.nav-folder-title +.nav-folder-collapse-indicator::before{ + display: none; +} + +.obsidian-icon-folder-icon { + margin: 0 0 0 -18px !important +} + +body.background-settings-workplace-background-image .workspace-split:not(.mod-root) .workspace-tab-container { + background-color: var(--bt-background-split-container); +} + +body.nowrap-edit-codebox .HyperMD-codeblock { + white-space: nowrap; +} \ No newline at end of file diff --git a/.obsidian/themes/Minimal/manifest.json b/.obsidian/themes/Minimal/manifest.json new file mode 100644 index 0000000..100f478 --- /dev/null +++ b/.obsidian/themes/Minimal/manifest.json @@ -0,0 +1,8 @@ +{ + "name": "Minimal", + "version": "7.5.2", + "minAppVersion": "1.5.4", + "author": "@kepano", + "authorUrl": "https://twitter.com/kepano", + "fundingUrl": "https://www.buymeacoffee.com/kepano" +} diff --git a/.obsidian/themes/Minimal/theme.css b/.obsidian/themes/Minimal/theme.css new file mode 100644 index 0000000..84af282 --- /dev/null +++ b/.obsidian/themes/Minimal/theme.css @@ -0,0 +1,2150 @@ +/* --------------------------------------------------------------------------- + +Minimal Theme by @kepano + +User interface replacement for Obsidian. + +Designed to be used with the Minimal Theme Settings +plugin and the Hider plugin. + +Sponsor my work: +https://www.buymeacoffee.com/kepano + +Readme: +https://github.com/kepano/obsidian-minimal + +----------------------------------------------------------------------------- + +MIT License + +Copyright (c) 2020-2023 Stephan Ango (@kepano) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ +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;--bold-weight:600;--link-weight:inherit;--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);--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);--modal-border-color:var(--ui2);--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-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);--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)}.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-left:0;padding-right: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.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-left:7px!important}.is-live-preview:not(.is-readable-line-width) .cm-embed-block>.edit-block-button{padding-left:0!important;margin-left: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}.markdown-source-view .metadata-container{transform:translateX(-4px)}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-left:-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}.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)}.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}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:0 0 0 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-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,")}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-left: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-left: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-right: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-right:0}.cm-embed-block.cm-table-widget.markdown-rendered{margin-top:-8px!important;padding:var(--table-drag-padding)}.markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle{top:0}.markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle{left:0}.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-left: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-right: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 .cm-line.cm-active,.active-line-on .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)}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)}body:not(.table-100):not(.table-max):not(.table-wide) .markdown-preview-view{--container-table-margin:var(--content-margin-start)}.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:auto;--table-edge-cell-padding-first:16px;--table-edge-cell-padding-last:16px;--table-margin:0;--table-drag-padding:var(--table-drag-space) 0}.table-100 .dataview.list-view-ul{max-width:var(--max-width);width:var(--line-width);margin-inline:auto}.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}.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),.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){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)}.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);width:var(--iframe-width)}.borders-none{--divider-width:0px;--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-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{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}.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}.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);font-size:90%}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 #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(--background-modifier-hover);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}.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 .1s 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 .1s ease-in-out .1s}.minimal-focus-mode.borders-title .workspace-ribbon.mod-left.is-collapsed{border-right:none}.minimal-focus-mode .mod-top-right-space .sidebar-toggle-button.mod-right{opacity:0}.minimal-focus-mode:not(.minimal-status-off) .status-bar{opacity:0;transition:opacity .2s ease-in-out}.minimal-focus-mode .status-bar:hover{opacity:1;transition:opacity .2s 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 .1s 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:opacity .1s 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:hover{height:var(--header-height);--tab-outline-width:1px;transition:all .1s linear .05s}.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:opacity .1s 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 .1s linear .1s}body.minimal-focus-mode.show-view-header .mod-root .workspace-leaf .view-header{height:0;transition:all .1s 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 .1s 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 .1s 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 .1s 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)}.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}.row-alt{--table-row-alt-background: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-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 .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)}.row-hover{--table-row-background-hover:hsla( var(--accent-h), 50%, 80%, 20% )}.theme-dark .row-hover,.theme-dark.row-hover{--table-row-background-hover:hsla( var(--accent-h), 30%, 40%, 20% )}: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"],span[src$="#circle"] img,span[src$="#round"] img{border-radius:50%;aspect-ratio:1/1}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(.image-embed)>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(.image-embed)>p>br{display:none}.img-grid .markdown-preview-section>div:has(.image-embed)>p>img{object-fit:var(--image-grid-fit);align-self:stretch}.img-grid .markdown-preview-section>div:has(.image-embed)>p>.internal-embed img{object-fit:var(--image-grid-fit);height:100%;align-self:center}body:not(.zoom-off) .workspace-leaf-content[data-type=markdown] .view-content div:not(.canvas-node-content) img{max-width:100%;cursor:zoom-in}body:not(.zoom-off) .workspace-leaf-content[data-type=markdown] .view-content img:active{cursor:zoom-out}body:not(.zoom-off) .workspace-leaf-content[data-type=markdown] .view-content .markdown-preview-view img[referrerpolicy=no-referrer]:active{background-color:var(--background-primary);padding:10px}body:not(.zoom-off) .workspace-leaf-content[data-type=markdown] .view-content .image-embed:not(.canvas-node-content):active,body:not(.zoom-off) .workspace-leaf-content[data-type=markdown] .view-content .markdown-preview-view img[referrerpolicy=no-referrer]: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) .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) .workspace-leaf-content[data-type=markdown] .view-content .image-embed:not(.canvas-node-content):active img{aspect-ratio:unset;top:50%;z-index:99;transform:translateY(-50%);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) .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-top: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)}body{--minimal-tab-text-color:var(--text-muted);--minimal-tab-text-color-active:var(--text-normal)}.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-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-right: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-tab-header-container-inner{--sidebar-tab-text-display:static}.tab-names-on .workspace-tab-header-container-inner .workspace-tab-header-inner-title{font-weight:500}.tab-names-on .workspace-tab-header-container-inner .workspace-tab-header-inner{gap:var(--size-2-3)}.tab-names-single .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-tab-header-container-inner .workspace-tab-header:only-child .workspace-tab-header-inner-title{font-weight:500}.tab-names-single .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-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-mobile{--font-bold:600;--font-ui-medium:var(--font-adaptive-small);--interactive-normal:var(--background-secondary);--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{max-width:var(--mobile-left-sidebar-width);min-width:150pt}.is-mobile .workspace-drawer.mod-right.is-pinned{max-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}.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}.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}#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)}#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}.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-ul 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-ul>li::before,.dataview-inline-lists .markdown-source-view ul.dataview-ul>li::before{display:none}.dataview-inline-lists .markdown-preview-view .dataview-ul li,.dataview-inline-lists .markdown-source-view .dataview-ul li{display:inline-block;padding-right:.25em}.markdown-rendered table.dataview{margin-block-start:0;margin-block-end: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)!important}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}.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-bottom-left-hover:not(.is-mobile){--hider-ribbon-display:flex}.hider-vault .nav-folder.mod-root>.nav-folder-title{height:4px}.hider-ribbon .workspace-ribbon-collapse-btn{display:none}.hider-ribbon .workspace-ribbon.mod-right{pointer-events:none}.hider-ribbon .workspace-ribbon.mod-left{position:absolute;border-right:0px;margin:0;height:var(--header-height);overflow:visible;flex-basis:0;bottom:0;top:auto;display:var(--hider-ribbon-display)!important;flex-direction:row;z-index:17;opacity:0;transition:opacity .25s 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{flex-direction:row;display:var(--hider-ribbon-display);border-top:var(--border-width) solid var(--background-modifier-border);background:var(--background-secondary);margin:0;position:relative;gap:var(--size-2-2)}.hider-ribbon .side-dock-actions{padding-left:8px}.hider-ribbon .side-dock-settings{border-right:var(--border-width) solid var(--background-modifier-border);border-top-right-radius:var(--radius-m);padding:0 var(--size-2-2)}.hider-ribbon .workspace-ribbon.mod-left .side-dock-ribbon-action{display:var(--hider-ribbon-display);margin:7px 0 8px}.hider-ribbon .workspace-ribbon.mod-left:hover{opacity:1;transition:opacity .25s ease-in-out}.hider-ribbon .workspace-ribbon.mod-left .workspace-ribbon-collapse-btn{opacity:0}.hider-ribbon .workspace-split.mod-left-split{margin:0}.hider-ribbon .workspace-leaf-content .item-list{padding-bottom:40px}.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-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 .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 .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 .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 .titlebar,.theme-light.minimal-dracula-light.minimal-light-contrast .workspace-drawer.mod-left,.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;--nav-item-color-hover:var(--bg1);--nav-item-color-active:var(--bg1);--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)}.theme-dark.minimal-eink-dark.tabs-modern,.theme-light.minimal-eink-light.tabs-modern{--minimal-tab-text-color-active:var(--bg1);--tab-text-color-focused-active-current:var(--bg1)}.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 .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 .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 .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,.theme-dark.minimal-eink-dark select: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 .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 .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,.theme-light.minimal-eink-light select: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-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-light.minimal-eink-light.minimal-light-white{--bg3:#fff}.theme-dark.minimal-eink-dark,.theme-light.minimal-eink-light.minimal-light-contrast .mod-left-split,.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)}.theme-light.minimal-eink-light.minimal-light-tonal{--bg3:#bbb;--ui1:#bbb;--modal-border-color:var(--ui1);--prompt-border-color:var(--ui1)}.theme-dark.minimal-eink-dark.minimal-dark-tonal{--bg3:#444;--ui1:#444;--modal-border-color:var(--ui1);--prompt-border-color:var(--ui1)}.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 .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 .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 .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 .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 .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);--link-weight:500}.theme-dark.minimal-notion-dark,.theme-light.minimal-notion-light.minimal-light-contrast .mod-left-split,.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);--link-weight:500}.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 .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 .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 .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} +/* Plugin compatibility */ + +/* @plugins +core: +- backlink +- command-palette +- daily-notes +- file-explorer +- file-recovery +- global-search +- graph +- outgoing-link +- outline +- page-preview +- publish +- random-note +- starred +- switcher +- sync +- tag-pane +- word-count +community: +- buttons +- dataview +- calendar +- obsidian-charts +- obsidian-checklist-plugin +- obsidian-codemirror-options +- obsidian-dictionary-plugin +- obsidian-embedded-note-titles +- obsidian-excalidraw-plugin +- obsidian-git +- obsidian-hider +- obsidian-hover-editor +- obsidian-kanban +- obsidian-metatable +- obsidian-minimal-settings +- obsidian-outliner +- obsidian-system-dark-mode +- obsidian-style-settings +- quickadd +- sliding-panes-obsidian +- todoist-sync-plugin +*/ +/* @settings + +name: Minimal +id: minimal-style +settings: + - + id: instructions + title: Documentation + type: heading + level: 2 + collapsed: true + description: Use the Minimal Theme Settings plugin to set hotkeys, adjust features, select fonts, and choose from preset color schemes. Use the settings below for more granular customization. Go to https://minimal.guide for documentation. + - + id: interface + title: Interface colors + type: heading + level: 2 + collapsed: true + - + id: base + title: Base color + description: Defines all background and border colors unless overridden in more granular settings + type: variable-themed-color + format: hsl-split + default-light: '#' + default-dark: '#' + - + id: bg1 + title: Primary background + description: Background color for the main window + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: bg2 + title: Secondary background + description: Background color for left sidebar and menus + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: bg3 + title: Active background + description: Background color for hovered buttons and currently selected file + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: ui1 + title: Border color + type: variable-themed-color + description: For buttons, divider lines, and outlined elements + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: ui2 + title: Highlighted border color + description: Used when hovering over buttons, dividers, and outlined elements + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: ui3 + title: Active border color + description: Used when clicking buttons and outlined elements + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: accent-color + title: Accent color + type: heading + level: 2 + collapsed: true + - + id: ax1 + title: Accent color + type: variable-themed-color + description: Used primarily for links + format: hex + default-light: '#' + default-dark: '#' + - + id: ax2 + title: Accent color (hover) + type: variable-themed-color + description: Used primarily for hovered links + format: hex + default-light: '#' + default-dark: '#' + - + id: ax3 + title: Accent color interactive + type: variable-themed-color + description: Used for buttons, checklists, toggles + format: hex + default-light: '#' + default-dark: '#' + - + id: sp1 + title: Text on accent + type: variable-themed-color + description: Used primarily for text on accented buttons + format: hex + default-light: '#' + default-dark: '#' + - + id: extended-palette + title: Extended colors + type: heading + level: 2 + collapsed: true + - + id: color-red + title: Red + description: Extended palette colors are defaults used for progress bar status, syntax highlighting, colorful headings, and graph nodes + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: color-orange + title: Orange + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: color-yellow + title: Yellow + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: color-green + title: Green + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: color-cyan + title: Cyan + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: color-blue + title: Blue + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: color-purple + title: Purple + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: color-pink + title: Pink + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: blockquotes + title: Blockquotes + type: heading + level: 2 + collapsed: true + - + id: blockquote-color + title: Blockquote text color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: blockquote-background-color + title: Blockquote background color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: blockquote-border-color + title: Blockquote border color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: blockquote-border-thickness + title: Blockquote border thickness + type: variable-number-slider + format: px + default: 1 + min: 0 + max: 5 + step: 1 + - + id: blockquote-size + title: Blockquote font size + description: Accepts any CSS font-size value + type: variable-text + default: '' + - + id: blockquote-font-style + title: Blockquote font style + type: variable-select + allowEmpty: false + default: normal + options: + - + label: Normal + value: normal + - + label: Italic + value: italic + - + id: callouts + title: Callouts + type: heading + level: 2 + collapsed: true + - + id: callouts-style + title: Callout style + type: class-select + allowEmpty: false + default: callouts-default + options: + - + label: Filled + value: callouts-default + - + label: Outlined + value: callouts-outlined + - + id: callout-blend-mode + title: Color blending + description: Blend the color of nested callouts + type: variable-select + allowEmpty: false + default: var(--highlight-mix-blend-mode) + options: + - + label: On + value: var(--highlight-mix-blend-mode) + - + label: Off + value: normal + - + id: canvas + title: Canvas + type: heading + level: 2 + collapsed: true + - + id: canvas-dot-pattern + title: Canvas dot pattern + description: Color for background dot pattern + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: code-blocks + title: Code blocks + type: heading + level: 2 + collapsed: true + - + id: code-size + title: Code font size + description: Accepts any CSS font-size value + type: variable-text + default: 13px + - + id: minimal-code-scroll + title: Scroll long lines + description: Turns off line wrap for code + type: class-toggle + default: false + - + id: code-background + title: Code background color + description: Background for code blocks + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: code-normal + title: Code text color + description: Color of code when syntax highlighting is not present + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: syntax-highlighting + title: Syntax highlighting + type: heading + level: 3 + collapsed: false + - + id: code-comment + title: "Syntax: comments" + description: Syntax highlighting for comments + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: code-function + title: "Syntax: functions" + description: Syntax highlighting for functions + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: code-keyword + title: "Syntax: keywords" + description: Syntax highlighting for keywords + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: code-important + title: "Syntax: important" + description: Syntax highlighting for important text + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: code-operator + title: "Syntax: operators" + description: Syntax highlighting for operators + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: code-property + title: "Syntax: properties" + description: Syntax highlighting for properties + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: code-punctuation + title: "Syntax: punctuation" + description: Syntax highlighting for punctuation + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: code-string + title: "Syntax: strings" + description: Syntax highlighting for strings + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: code-tag + title: "Syntax: tags" + description: Syntax highlighting for tags + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: code-value + title: "Syntax: values" + description: Syntax highlighting for values + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: dataview + title: Dataview + type: heading + level: 2 + collapsed: true + - + id: trim-cols + title: Trim Dataview columns + description: Disables word wrapping in table cells, and trims long text + type: class-toggle + default: true + - + id: dataview-inline-lists + title: Force tables lists inline + description: Makes lists inside of table cells inline and comma separated + type: class-toggle + default: false + - + id: max-col-width + title: Dataview maximum column width + description: Maximum width for Dataview columns, accepts any CSS width value + type: variable-text + default: 18em + - + id: embed-blocks + title: Embeds and transclusions + type: heading + level: 2 + collapsed: true + - + id: embed-strict + title: Use strict embed style globally + description: Transclusions appear seamlessly in the flow of text. Can be enabled per file using the embed-strict helper class + type: class-toggle + default: false + - + id: embed-hide-title + title: Hide embed titles + description: Hide title of the transcluded file (if strict embed is off) + type: class-toggle + default: false + - + id: embed-underline + title: Underline embedded text + description: Transcluded text is underlined. Can be enabled per file using the embed-underline helper class + type: class-toggle + default: false + - + id: embed-max-height + title: Maximum height of embeds + type: variable-text + description: For transcluded text, accepts valid CSS units + default: '' + - + id: embed-decoration-style + title: Embedded text underline style + type: variable-select + description: Requires underlines to be enabled + allowEmpty: true + default: solid + options: + - + label: Solid + value: solid + - + label: Dashed + value: dashed + - + label: Dotted + value: dotted + - + label: Double + value: double + - + label: Wavy + value: wavy + - + id: embed-decoration-color + title: Embedded text underline color + type: variable-themed-color + description: Requires underlines to be enabled + format: hex + default-light: '#' + default-dark: '#' + - + id: embed-background + title: Embed background + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: graphs + title: Graphs + type: heading + level: 2 + collapsed: true + - + id: graph-line + title: Line color + description: Changing graph colors requires closing and reopening graph panes or restarting Obsidian + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: graph-node + title: Node color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: graph-node-focused + title: Active node color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: graph-node-tag + title: Tag node color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: graph-node-attachment + title: Attachment node color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: graph-node-unresolved + title: Unresolved node color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: headings + title: Headings + type: heading + level: 2 + collapsed: true + - + id: level-1-headings + title: Level 1 Headings + type: heading + level: 3 + collapsed: true + - + id: h1-font + title: H1 font + description: Name of the font as it appears on your system + type: variable-text + default: '' + - + id: h1-size + title: H1 font size + description: Accepts any CSS font-size value + type: variable-text + default: 1.125em + - + id: h1-weight + title: H1 font weight + type: variable-number-slider + default: 600 + min: 100 + max: 900 + step: 100 + - + id: h1-color + title: H1 text color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: h1-variant + title: H1 font variant + type: variable-select + allowEmpty: false + default: normal + options: + - + label: Normal + value: normal + - + label: Small caps + value: small-caps + - + label: All small caps + value: all-small-caps + - + id: h1-style + title: H1 font style + type: variable-select + allowEmpty: false + default: normal + options: + - + label: Normal + value: normal + - + label: Italic + value: italic + - + id: h1-l + title: H1 divider line + description: Adds a border below the heading + type: class-toggle + default: false + - + id: level-2-headings + title: Level 2 Headings + type: heading + level: 3 + collapsed: true + - + id: h2-font + title: H2 font + description: Name of the font as it appears on your system + type: variable-text + default: '' + - + id: h2-size + title: H2 font size + description: Accepts any CSS font-size value + type: variable-text + default: 1em + - + id: h2-weight + title: H2 font weight + type: variable-number-slider + default: 600 + min: 100 + max: 900 + step: 100 + - + id: h2-color + title: H2 text color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: h2-variant + title: H2 font variant + type: variable-select + allowEmpty: false + default: normal + options: + - + label: Normal + value: normal + - + label: Small caps + value: small-caps + - + label: All small caps + value: all-small-caps + - + id: h2-style + title: H2 font style + type: variable-select + allowEmpty: false + default: normal + options: + - + label: Normal + value: normal + - + label: Italic + value: italic + - + id: h2-l + title: H2 divider line + description: Adds a border below the heading + type: class-toggle + default: false + - + id: level-3-headings + title: Level 3 Headings + type: heading + level: 3 + collapsed: true + - + id: h3-font + title: H3 font + description: Name of the font as it appears on your system + type: variable-text + default: '' + - + id: h3-size + title: H3 font size + description: Accepts any CSS font-size value + type: variable-text + default: 1em + - + id: h3-weight + title: H3 font weight + type: variable-number-slider + default: 600 + min: 100 + max: 900 + step: 100 + - + id: h3-color + title: H3 text color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: h3-variant + title: H3 font variant + type: variable-select + allowEmpty: false + default: normal + options: + - + label: Normal + value: normal + - + label: Small caps + value: small-caps + - + label: All small caps + value: all-small-caps + - + id: h3-style + title: H3 font style + type: variable-select + allowEmpty: false + default: normal + options: + - + label: Normal + value: normal + - + label: Italic + value: italic + - + id: h3-l + title: H3 divider line + description: Adds a border below the heading + type: class-toggle + default: false + - + id: level-4-headings + title: Level 4 Headings + type: heading + level: 3 + collapsed: true + - + id: h4-font + title: H4 font + description: Name of the font as it appears on your system + type: variable-text + default: '' + - + id: h4-size + title: H4 font size + description: Accepts any CSS font-size value + type: variable-text + default: 0.9em + - + id: h4-weight + title: H4 font weight + type: variable-number-slider + default: 500 + min: 100 + max: 900 + step: 100 + - + id: h4-color + title: H4 text color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: h4-variant + title: H4 font variant + type: variable-select + allowEmpty: false + default: small-caps + options: + - + label: Normal + value: normal + - + label: Small caps + value: small-caps + - + label: All small caps + value: all-small-caps + - + id: h4-style + title: H4 font style + type: variable-select + allowEmpty: false + default: normal + options: + - + label: Normal + value: normal + - + label: Italic + value: italic + - + id: h4-l + title: H4 divider line + description: Adds a border below the heading + type: class-toggle + default: false + - + id: level-5-headings + title: Level 5 Headings + type: heading + level: 3 + collapsed: true + - + id: h5-font + title: H5 font + description: Name of the font as it appears on your system + type: variable-text + default: '' + - + id: h5-size + title: H5 font size + description: Accepts any CSS font-size value + type: variable-text + default: 0.85em + - + id: h5-weight + title: H5 font weight + type: variable-number-slider + default: 500 + min: 100 + max: 900 + step: 100 + - + id: h5-color + title: H5 text color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: h5-variant + title: H5 font variant + type: variable-select + allowEmpty: false + default: small-caps + options: + - + label: Normal + value: normal + - + label: Small caps + value: small-caps + - + label: All small caps + value: all-small-caps + - + id: h5-style + title: H5 font style + type: variable-select + allowEmpty: false + default: normal + options: + - + label: Normal + value: normal + - + label: Italic + value: italic + - + id: h5-l + title: H5 divider line + description: Adds a border below the heading + type: class-toggle + default: false + - + id: level-6-headings + title: Level 6 Headings + type: heading + level: 3 + collapsed: true + - + id: h6-font + title: H6 font + description: Name of the font as it appears on your system + type: variable-text + default: '' + - + id: h6-size + title: H6 font size + description: Accepts any CSS font-size value + type: variable-text + default: 0.85em + - + id: h6-weight + title: H6 font weight + type: variable-number-slider + default: 400 + min: 100 + max: 900 + step: 100 + - + id: h6-color + title: H6 text color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: h6-variant + title: H6 font variant + type: variable-select + allowEmpty: false + default: small-caps + options: + - + label: Normal + value: normal + - + label: Small caps + value: small-caps + - + label: All small caps + value: all-small-caps + - + id: h6-style + title: H6 font style + type: variable-select + allowEmpty: false + default: normal + options: + - + label: Normal + value: normal + - + label: Italic + value: italic + - + id: h6-l + title: H6 divider line + type: class-toggle + description: Adds a border below the heading + default: false + - + id: icons + title: Icons + type: heading + level: 2 + collapsed: true + - + id: icon-muted + title: Icon opacity (inactive) + type: variable-number-slider + default: 0.5 + min: 0.25 + max: 1 + step: 0.05 + - + id: icon-color + title: Icon color + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: icon-color-hover + title: Icon color (hover) + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: icon-color-active + title: Icon color (active) + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: icon-color-focused + title: Icon color (focused) + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: images + title: Images + type: heading + level: 2 + collapsed: true + - + id: image-muted + title: Image opacity in dark mode + description: Level of fading for images in dark mode. Hover over images to display at full brightness. + type: variable-number-slider + default: 0.7 + min: 0.25 + max: 1 + step: 0.05 + - + id: image-radius + title: Image radius + description: Rounded corners for images + type: variable-number-slider + default: 4 + min: 0 + max: 16 + step: 1 + format: px + - + id: image-blend-light + title: Blend images in light mode + description: Allow images to blend into the color scheme background color + type: class-toggle + default: false + - + id: zoom-off + title: Disable image zoom + description: Turns off click + hold to zoom images + type: class-toggle + - + id: image-grid-fit + title: Image grid crop + description: Sets how images get cropped in a grid + type: variable-select + default: cover + options: + - + label: Crop to fit + value: cover + - + label: Show full image + value: contain + - + id: image-grid-background + title: Image grid background + description: Background of images in cells, useful when images are not cropped to fit + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: indentation-guides + title: Indentation guides + type: heading + level: 2 + collapsed: true + - + id: indentation-guide-color + title: Indentation guide color + type: variable-themed-color + format: hex + opacity: true + default-light: '#' + default-dark: '#' + - + id: indentation-guide-color-active + title: Indentation guide color (active) + type: variable-themed-color + format: hex + opacity: true + default-light: '#' + default-dark: '#' + - + id: links + title: Links + type: heading + level: 2 + collapsed: true + - + id: links-internal + title: Internal links + type: heading + level: 3 + collapsed: true + - + id: link-color + title: Internal link color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: link-color-hover + title: Internal link color (hover) + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: link-unresolved-opacity + title: Unresolved link opacity + type: variable-number-slider + default: 0.7 + min: 0.25 + max: 1 + step: 0.05 + - + id: link-unresolved-color + title: Unresolved link color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: link-unresolved-decoration-color + title: Unresolved link underline color + type: variable-themed-color + format: hex + opacity: true + default-light: '#' + default-dark: '#' + - + id: links-external + title: External links + type: heading + level: 3 + collapsed: true + - + id: link-external-color + title: External link color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: link-external-color-hover + title: External link color (hover) + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: active-line + title: Line numbers + type: heading + level: 2 + collapsed: true + - + id: active-line-on + title: Highlight active line + description: Adds a background to current line in editor + type: class-toggle + default: false + - + id: folding-offset + title: Gutter offset + description: Width of the file margin used for gutter + type: variable-number-slider + default: 32 + min: 0 + max: 60 + step: 1 + format: px + - + id: gutter-background + title: Gutter background + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: line-number-color + title: Line number color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: line-number-color-active + title: Active line number color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: active-line-bg + title: Active line background + description: Using a low opacity color is recommended to avoid conflicting with highlights + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: lists + title: Lists and tasks + type: heading + level: 2 + collapsed: true + - + id: checkbox-color + title: Checkbox color + description: Background color for completed tasks + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: checkbox-shape + title: Checkbox shape + type: class-select + allowEmpty: false + default: checkbox-circle + options: + - + label: Circle + value: checkbox-circle + - + label: Square + value: checkbox-square + - + id: minimal-strike-lists + title: Strike completed tasks + description: Adds strikethrough line and greyed text for completed tasks + type: class-toggle + default: false + - + id: list-spacing + title: List item spacing + description: Vertical space between list items in em units + type: variable-number-slider + default: 0.075 + min: 0 + max: 0.3 + step: 0.005 + format: em + - + id: list-indent + title: Nested list indentation + description: Horizontal space from left in em units + type: variable-number-slider + default: 2 + min: 1 + max: 3.5 + step: 0.1 + format: em + - + id: pdf + title: PDFs + type: heading + level: 2 + collapsed: true + - + id: pdf-page-style + title: PDF page style + description: Borders and shadows around pages + type: class-select + allowEmpty: false + default: pdf-seamless-on + options: + - + label: Seamless + value: pdf-seamless-on + - + label: Shadows + value: pdf-shadows-on + - + id: pdf-invert-dark + title: Invert PDFs in dark mode + description: Best for working with black text on white pages + type: class-toggle + default: true + - + id: pdf-blend-light + title: Blend PDFs in light mode + description: Allow PDFs to blend into the color scheme background color + type: class-toggle + default: true + - + id: pdf-dark-opacity + title: PDF opacity in dark mode + description: Fade PDF pages in dark mode + type: variable-number-slider + default: 1 + min: 0.25 + max: 1 + step: 0.05 + - + id: progress + title: Progress bars + type: heading + level: 2 + collapsed: true + - + id: progress-complete + title: Completed progress bar color + description: Defaults to your accent color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: properties + title: Properties + type: heading + level: 2 + collapsed: true + - + id: metadata-heading-off + title: Hide properties heading + description: Hide "Properties" heading above properties + type: class-toggle + default: false + - + id: metadata-add-property-off + title: Hide "Add property" button + description: Hide "Add property" button below properties + type: class-toggle + default: false + - + id: metadata-icons-off + title: Hide property icons + description: Hide icons next to property names + type: class-toggle + default: false + - + id: metadata-dividers + title: Property row lines + description: Display borders between properties + type: class-toggle + default: false + - + id: metadata-label-width + title: Property name width + description: Width for the name of the property + type: variable-number-slider + format: rem + default: 8 + min: 4 + max: 12 + step: 0.25 + - + id: sidebars + title: Sidebars + type: heading + level: 2 + collapsed: true + - + id: sidebar-tabs-style + title: Sidebar tab style + type: class-select + allowEmpty: false + default: sidebar-tabs-default + options: + - + label: Index round + value: sidebar-tabs-index + - + label: Index square + value: sidebar-tabs-square + - + label: Modern compact + value: sidebar-tabs-default + - + label: Modern wide + value: sidebar-tabs-wide + - + label: Underline + value: sidebar-tabs-underline + - + id: sidebar-tabs-names + title: Sidebar tab names + type: class-select + allowEmpty: false + default: tab-names-off + options: + - + label: Hidden + value: tab-names-off + - + label: Visible + value: tab-names-on + - + label: Single tab only + value: tab-names-single + - + id: mobile-left-sidebar-width + title: Mobile left sidebar width + description: Maximum width for pinned left sidebar on mobile + type: variable-number + default: 280 + format: pt + - + id: mobile-right-sidebar-width + title: Mobile right sidebar width + description: Maximum width for pinned right sidebar on mobile + type: variable-number + default: 240 + format: pt + - + id: ribbon + title: Ribbon + type: heading + level: 2 + collapsed: true + - + id: ribbon-style + title: Ribbon style + description: Ribbon menu can be hidden using the Hider plugin + type: class-select + allowEmpty: false + default: ribbon-hidden + options: + - + label: Default + value: ribbon-hidden + - + label: Bottom left hover + value: ribbon-bottom-left-hover + - + id: tables + title: Tables + type: heading + level: 2 + collapsed: true + - + id: table-text-size + title: Table font size + description: All of the following settings apply to all tables globally. To turn on these features on a per-note basis use helper classes. See documentation. + type: variable-text + default: 1em + - + id: table-column-min-width + title: Minimum column width + type: variable-text + default: 6ch + - + id: table-column-max-width + title: Maximum column width + type: variable-text + default: none + - + id: maximize-tables-off + title: Maximize table width + description: Determines how wide tables should behave when they become wider than the line width + type: class-select + allowEmpty: false + default: maximize-tables-off + options: + - + label: Fit to line width + value: maximize-tables-off + - + label: Overflow line width + value: maximize-tables-auto + - + label: Always fill + value: maximize-tables + - + id: row-lines + title: Row lines + description: Display borders between table rows globally + type: class-toggle + default: false + - + id: col-lines + title: Column lines + description: Display borders between table columns globally + type: class-toggle + default: false + - + id: table-lines + title: Cell lines + description: Display borders around all table cells globally + type: class-toggle + default: false + - + id: row-alt + title: Striped rows + description: Display striped background in alternating table rows globally + type: class-toggle + default: false + - + id: col-alt + title: Striped columns + description: Display striped background in alternating table columns globally + type: class-toggle + default: false + - + id: table-tabular + title: Tabular figures + description: Use fixed width numbers in tables globally + type: class-toggle + default: false + - + id: table-numbers + title: Row numbers + description: Display row numbers in tables globally + type: class-toggle + default: false + - + id: table-nowrap + title: Disable line wrap + description: Turn off line wrapping in table cells globally + type: class-toggle + default: false + - + id: row-hover + title: Highlight active row + description: Highlight rows on hover + type: class-toggle + default: false + - + id: table-row-background-hover + title: Active row background + description: Background color for hovered tables rows + type: variable-themed-color + format: hex + opacity: true + default-light: '#' + default-dark: '#' + - + id: tabs + title: Tabs + type: heading + level: 2 + collapsed: true + - + id: header-height + title: Tab bar height + type: variable-text + default: 40px + - + id: tabs-style + title: Tab style + type: class-select + allowEmpty: false + default: tabs-default + options: + - + label: Index round + value: tabs-default + - + label: Index square + value: tabs-square + - + label: Modern + value: tabs-modern + - + label: Square + value: tabs-plain-square + - + label: Underline + value: tabs-underline + - + id: minimal-tab-text-color + title: Tab text color + type: variable-themed-color + format: hex + opacity: true + default-light: '#' + default-dark: '#' + - + id: minimal-tab-text-color-active + title: Tab text color (active) + type: variable-themed-color + format: hex + opacity: true + default-light: '#' + default-dark: '#' + - + id: tab-stacks + title: Tab stacks + type: heading + level: 2 + collapsed: true + - + id: tab-stacked-pane-width + title: Stacked width + type: variable-number + description: Width of a stacked tab in pixels + default: 700 + format: px + - + id: tab-stacked-header-width + title: Spine width + type: variable-number + description: Width of the spine in pixels + default: 40 + format: px + - + id: tab-stacked-spine-orientation + title: Spine text orientation + type: class-select + default: tab-stack-top + options: + - + label: Top + value: tab-stack-top + - + label: Top flipped + value: tab-stack-top-flipped + - + label: Bottom + value: tab-stack-bottom + - + label: Bottom flipped + value: tab-stack-bottom-flipped + - + label: Center + value: tab-stack-center + - + label: Center flipped + value: tab-stack-center-flipped + - + id: tags + title: Tags + type: heading + level: 2 + collapsed: true + - + id: minimal-unstyled-tags + title: Plain tags + description: Tags will render as normal text, overrides settings below + type: class-toggle + default: false + - + id: tag-radius + title: Tag shape + type: variable-select + default: 14px + options: + - + label: Pill + value: 14px + - + label: Rounded + value: 4px + - + label: Square + value: 0px + - + id: tag-border-width + title: Tag border width + type: variable-select + default: 1px + options: + - + label: None + value: 0 + - + label: Thin + value: 1px + - + label: Thick + value: 2px + - + id: tag-color + title: Tag text color + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: tag-background + title: Tag background color + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: tag-background-hover + title: Tag background color (hover) + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: text + title: Text + type: heading + level: 2 + collapsed: true + - + id: tx1 + title: Normal text color + type: variable-themed-color + description: Primary text color used by default across all elements + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: hl1 + title: Selected text background + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: hl2 + title: Highlighted text background + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: tx2 + title: Muted text color + description: Secondary text such as sidebar note titles and table headings + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: tx3 + title: Faint text color + description: tertiary text such as input placeholders, empty checkboxes, and disabled statuses + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: text-formatting + title: Markdown syntax color + description: Markdown formatting syntax text color + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: italic-color + title: Italic text color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: bold-color + title: Bold text color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: bold-weight + title: Bold text weight + type: variable-number-slider + default: 600 + min: 100 + max: 900 + step: 100 + - + id: p-spacing + title: Paragraph spacing + description: Space between paragraphs in reading mode (Obsidian 1.3.7+) + type: variable-text + default: 1.75rem + - + id: heading-spacing + title: Heading spacing + description: Space between paragraphs and headings in reading mode (Obsidian 1.3.7+) + type: variable-text + default: 2em + - + id: titles + title: Titles + type: heading + level: 2 + collapsed: true + - + id: tab-title-bar + title: Tab title bar + description: Tab title bar must be turned on in Appearance settings + type: heading + level: 3 + collapsed: true + - + id: file-header-visibility + title: Tab title visibility + description: Visibility of the tab title text + type: class-select + default: minimal-tab-title-hover + options: + - + label: Hover only + value: minimal-tab-title-hover + - + label: Hidden + value: minimal-tab-title-hidden + - + label: Visible + value: minimal-tab-title-visible + - + id: file-header-font-size + title: Tab title font size + description: Accepts any CSS font-size value + type: variable-text + default: 0.9em + - + id: file-header-font-weight + title: Tab title font weight + type: variable-number-slider + default: 400 + min: 100 + max: 900 + step: 100 + - + id: file-header-justify + title: Tab title alignment + type: variable-select + default: center + options: + - + label: Center + value: center + - + label: Left + value: left + - + id: title-color + title: Tab title text color (active) + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: title-color-inactive + title: Tab title text color (inactive) + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: inline-title + title: Inline title + description: Inline titles must be turned on in Appearance settings + type: heading + level: 3 + collapsed: true + - + id: inline-title-font + title: Inline title font + description: Name of the font as it appears on your system + type: variable-text + default: '' + - + id: inline-title-size + title: Inline title font size + description: Accepts any CSS font-size value + type: variable-text + default: 1.125em + - + id: inline-title-weight + title: Inline title font weight + type: variable-number-slider + default: 600 + min: 100 + max: 900 + step: 100 + - + id: inline-title-color + title: Inline title text color (active) + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: translucency + title: Translucency + type: heading + level: 2 + collapsed: true + - + id: workspace-background-translucent + title: Translucent background color + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: window-frame + title: Window frame + type: heading + level: 2 + collapsed: true + - + id: window-title-off + title: Hide window frame title + description: Hide title in the custom title bar + type: class-toggle + - + id: frame-background + title: Frame background + description: Requires colorful window frame + type: variable-themed-color + opacity: true + format: hsl-split + default-light: '#' + default-dark: '#' + - + id: frame-icon-color + title: Frame icon color + description: Requires colorful frame + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: titlebar-text-color-focused + title: Frame title color (focused) + description: Requires custom title bar + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: titlebar-text-color + title: Frame title color (inactive) + description: Requires custom title bar + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: titlebar-text-weight + title: Frame title font weight + description: Requires custom title bar + type: variable-number-slider + default: 600 + min: 100 + max: 900 + step: 100 +*/ + +/* @settings +name: Minimal Cards +id: minimal-cards-style +settings: + - + id: cards-min-width + title: Card minimum width + type: variable-text + default: 180px + - + id: cards-max-width + title: Card maximum width + description: Default fills the available width, accepts valid CSS units + type: variable-text + default: 1fr + - + id: cards-mobile-width + title: Card minimum width on mobile + type: variable-text + default: 120px + - + id: cards-padding + title: Card padding + type: variable-text + default: 1.2em + - + id: cards-image-height + title: Card maximum image height + type: variable-text + default: 400px + - + id: cards-border-width + title: Card border width + type: variable-text + default: 1px + - + id: cards-background + title: Card background color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + +*/ + +/* @settings +name: Minimal Mobile +id: minimal-mobile +settings: + - + id: mobile-toolbar-off + title: Disable toolbar + description: Turns off mobile toolbar + type: class-toggle +*/ + +/* @settings +name: Minimal Advanced Settings +id: minimal-advanced +settings: + - + id: hide-markdown + title: Hide Markdown syntax + description: (EXPERIMENTAL) Warning, this can be confusing because the characters still exist they are just hidden. + type: class-toggle + - + id: styled-scrollbars + title: Styled scrollbars + description: Use styled scrollbars (replaces native scrollbars) + type: class-toggle + - + id: cursor + title: Cursor style + description: The cursor style for UI elements + type: variable-select + default: default + options: + - + label: Default + value: default + - + label: Pointer + value: pointer + - + label: Crosshair + value: crosshair + - + id: font-ui-small + title: Small font size + description: Font size in px of smaller text + type: variable-number + default: 13 + format: px + - + id: font-ui-smaller + title: Smaller font size + description: Font size in px of smallest text + type: variable-number + default: 11 + format: px + +*/ diff --git a/.obsidian/themes/Things/manifest.json b/.obsidian/themes/Things/manifest.json new file mode 100644 index 0000000..fdbcbe4 --- /dev/null +++ b/.obsidian/themes/Things/manifest.json @@ -0,0 +1,7 @@ +{ + "name": "Things", + "version": "2.1.20", + "minAppVersion": "1.0.0", + "author": "@colineckert", + "authorUrl": "https://twitter.com/colineckert" +} diff --git a/.obsidian/themes/Things/theme.css b/.obsidian/themes/Things/theme.css new file mode 100644 index 0000000..2f055ee --- /dev/null +++ b/.obsidian/themes/Things/theme.css @@ -0,0 +1,1611 @@ +/*─────────────────────────────────────────────────────── +THINGS +Version 2.1.20 +Created by @colineckert + +Readme: +https://github.com/colineckert/obsidian-things + +Support my work: +https://www.buymeacoffee.com/colineckert +────────────────────────────────────────────────────── */ + +/* ─────────────────────────────────────────────────── */ +/* Main Theme Styling */ +/* ─────────────────────────────────────────────────── */ + +@charset "UTF-8"; +body { + /* Colors */ + --base-h: 212; /* Base hue */ + --base-s: 15%; /* Base saturation */ + --base-d: 13%; /* Base lightness Dark Mode - 0 is black */ + --base-l: 97%; /* Base lightness Light Mode - 100 is white */ + --accent-h: 215; /* Accent hue */ + --accent-s: 75%; /* Accent saturation */ + --accent-d: 70%; /* Accent lightness Dark Mode */ + --accent-l: 60%; /* Accent lightness Light Mode */ + + --blue: #2e80f2; + --pink: #ff82b2; + --green: #3eb4bf; + --yellow: #e5b567; + --orange: #e87d3e; + --red: #e83e3e; + --purple: #9e86c8; + + --h1-color: var(--text-normal); + --h2-color: var(--text-normal); + --h3-color: var(--blue); + --h4-color: var(--yellow); + --h5-color: var(--red); + --h6-color: var(--text-muted); + + --strong-color: var(--pink); + --em-color: var(--pink); + --quote-color: var(--green); + + --tag-background-color-l: #bde1d3; + --tag-font-color-l: #1d694b; + --tag-background-color-d: #1d694b; + --tag-font-color-d: #ffffff; + + --highlight-background-color--normal: hsl(50deg 100% 50% / 15%) !important; + --highlight-background-color-underline: hsl(50deg 100% 50% / 100%) !important; + --highlight-background-color--active: hsl(50deg 100% 50% / 20%) !important; + + --progress-color-1: #ad5758; + --progress-color-2: #b87f4c; + --progress-color-3: #d2b874; + --progress-color-4: #b0c07e; + --progress-color-5: #768399; + + /* Font families */ + --font-text-theme: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, + Inter, Ubuntu, sans-serif; + --font-editor-theme: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, + Inter, Ubuntu, sans-serif; + --font-monospace-theme: 'JetBrains Mono', 'Fira Code', Menlo, SFMono-Regular, + Consolas, 'Roboto Mono', monospace; + --font-interface-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); + + --h1-size: 1.7rem; + --h2-size: 1.5rem; + --h3-size: 1.2rem; + --h4-size: 1.1rem; + --h5-size: 1rem; + --h6-size: 0.9rem; + + /* Misc */ + --checkbox-radius: 30%; + --link-external-decoration: underline; + --link-decoration: underline; + + /* -------- */ + --radius-s: 4px; + --radius-m: 8px; + --radius-l: 10px; + --radius-xl: 16px; + + --line-width: 40rem; + --line-height: 1.5; + --max-width: 90%; + --max-col-width: 18em; + --icon-muted: 0.5; + --nested-padding: 1.1em; + --folding-offset: 10px; + + --line-width-adaptive: var(--line-width); + --line-width-wide: calc(var(--line-width) + 12.5%); +} + +/* COLOR SCHEMES +────────────────────────────────────────────────────── */ + +.theme-light, +body.theme-light.is-mobile { + color-scheme: light; + --highlight-mix-blend-mode: darken; + --mono-rgb-0: 255, 255, 255; + --mono-rgb-100: 0, 0, 0; + --color-red-rgb: 228, 55, 75; + --color-red: #e4374b; + --color-green-rgb: 12, 181, 79; + --color-green: #0cb54f; + --color-orange: #d96c00; + --color-yellow: #bd8e37; + --color-cyan: #2db7b5; + --color-blue: #086ddd; + --color-purple: #876be0; + --color-pink: #c32b74; + --color-base-00: #ffffff; + --color-base-05: #fcfcfc; + --color-base-10: #f6f7f8; /* code blocks */ + --color-base-20: #f6f7f8; + --color-base-25: #f0f0f0; + --color-base-30: #ebedf0; /* soften dividing lines */ + --color-base-35: #d4d4d4; + --color-base-40: #bdbdbd; + --color-base-50: #ababab; + --color-base-60: #707070; + --color-base-70: #5a5a5a; + --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( + var(--accent-h), + var(--accent-s), + calc(var(--accent-l) + 2.5%) + ); + --color-accent-2: hsl( + var(--accent-h), + var(--accent-s), + calc(var(--accent-l) + 5%) + ); + --background-modifier-hover: #e2e5e9; + --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); + --text-highlight-bg-l: rgba(255, 208, 0, 0.4); + --text-highlight-bg: var(--text-highlight-bg-l); + --text-highlight-bg-active: rgba(255, 128, 0, 0.4); + --input-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.12), + 0 2px 3px 0 rgba(0, 0, 0, 0.05), 0 1px 1.5px 0 rgba(0, 0, 0, 0.03), + 0 1px 2px 0 rgba(0, 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, 0.1), 0 1px 1.5px 0 rgba(0, 0, 0, 0.03), + 0 1px 2px 0 rgba(0, 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, 0.042), 0px 15px 30px rgba(0, 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); + + --tag-background: var(--tag-background-color-l); + --tag-color: var(--tag-font-color-l); + + /* --text-normal: hsl(var(--base-h), var(--base-s), calc(var(--base-l) - 80%)); */ + --text-muted: hsl( + var(--base-h), + calc(var(--base-s) - 5%), + calc(var(--base-l) - 60%) + ); + --text-faint: hsl( + var(--base-h), + calc(var(--base-s) - 5%), + calc(var(--base-l) - 30%) + ); + --text-formatted: hsl( + var(--base-h), + calc(var(--base-s) - 5%), + calc(var(--base-l) - 35%) + ); + --text-accent: hsl(var(--accent-h), var(--accent-s), var(--accent-l)); + --text-accent-hover: hsl( + var(--accent-h), + var(--accent-s), + calc(var(--accent-l) - 10%) + ); + + --atom-gray-1: #383a42; + --atom-gray-2: #383a42; + --atom-red: #e75545; + --atom-green: #4ea24c; + --atom-blue: #3d74f6; + --atom-purple: #a625a4; + --atom-aqua: #0084bc; + --atom-yellow: #e35649; + --atom-orange: #986800; +} + +.theme-dark, +body.theme-dark.is-mobile { + 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-green-rgb: 68, 207, 110; + --color-green: #44cf6e; + --color-orange: #e9973f; + --color-yellow: #e0de71; + --color-cyan: #53dfdd; + --color-blue: #027aff; + --color-purple: #a882ff; + --color-pink: #fa99cd; + --color-base-00: #1c2127; /* main editor window */ + --color-base-10: #282c34; /* code blocks */ + --color-base-20: #181c20; /* top unselected unfocused nav */ + --color-base-25: #2c313c; + --color-base-30: #35393e; + --color-base-35: #3f3f3f; + --color-base-40: #555; + --color-base-50: #666; /* unfocused text */ + --color-base-60: #999; + --color-base-70: #bababa; + --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( + var(--accent-h), + var(--accent-s), + calc(var(--accent-l) - 3.8%) + ); + --color-accent-2: hsl( + var(--accent-h), + var(--accent-s), + calc(var(--accent-l) + 3.8%) + ); + --titlebar-background-focused: var(--color-base-10); + --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-highlight-bg-d: rgba(255, 208, 0, 0.4); + --text-highlight-bg: var(--text-highlight-bg-d); + --text-highlight-bg-active: rgba(255, 128, 0, 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, 0.15), 0 1px 1.5px 0 rgba(0, 0, 0, 0.1), + 0 1px 2px 0 rgba(0, 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, 0.3), 0 1px 1.5px 0 rgba(0, 0, 0, 0.2), + 0 1px 2px 0 rgba(0, 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); + + --tag-background: var(--tag-background-color-d); + --tag-color: var(--tag-font-color-d); + + --text-muted: hsl(var(--base-h), var(--base-s), calc(var(--base-d) + 65%)); + --text-faint: hsl(var(--base-h), var(--base-s), calc(var(--base-d) + 30%)); + --text-formatted: hsl( + var(--base-h), + var(--base-s), + calc(var(--base-d) + 50%) + ); + + --text-accent: hsl(var(--accent-h), var(--accent-s), var(--accent-d)); + --text-accent-hover: hsl( + var(--accent-h), + var(--accent-s), + calc(var(--accent-d) + 12%) + ); + + --atom-gray-1: #5c6370; + --atom-gray-2: #abb2bf; + --atom-red: #e06c75; + --atom-orange: #d19a66; + --atom-green: #98c379; + --atom-aqua: #56b6c2; + --atom-purple: #c678dd; + --atom-blue: #61afef; + --atom-yellow: #e5c07b; +} + +body.is-mobile.theme-dark.mobile-black-background { + --color-base-00: black; +} + +/* Make exported PDFs render correctly */ +@media print { + .theme-dark { + --highlight-mix-blend-mode: darken; + --color-base-30: #ebedf0; + --h1-color: var(--color-base-00); + } +} + +/* H2 styling */ +body.h2-underline h2, +body.h2-underline .HyperMD-header.HyperMD-header-2.cm-line { + border-bottom: 2px solid var(--background-modifier-border); + width: 100%; + padding-bottom: 2px; +} + +/* Hashtags font */ +.markdown-source-view.mod-cm6.is-live-preview .cm-hashtag.cm-meta, +.markdown-source-view.mod-cm5 .cm-hashtag.cm-meta { + font-family: var(--font-text-theme); +} + +/* Blockquote */ +body:not(.default-font-color) .markdown-preview-view blockquote, +body:not(.default-font-color) span.cm-quote.cm-quote-1 { + font-style: italic; + color: var(--quote-color); +} + +/* Bold font */ +body:not(.default-font-color) strong, +body:not(.default-font-color) span:not(.cm-highlight).cm-strong { + color: var(--strong-color); +} + +/* Italics */ +body:not(.default-font-color) em, +body:not(.default-font-color) span:not(.cm-highlight).cm-em { + color: var(--em-color); +} + +/* Styled highlights */ +body:not(.default-font-color) mark strong, +body:not(.default-font-color) mark em { + color: var(--text-normal); +} + +/* Fancy highlight */ +body.fancy-highlight span.cm-highlight, +body.fancy-highlight .markdown-preview-view mark, +body.fancy-highlight span.search-result-file-matched-text { + background-image: linear-gradient( + 0deg, + var(--highlight-background-color-underline) 0%, + var(--highlight-background-color-underline) 2px, + var(--highlight-background-color--active) 2px, + var(--highlight-background-color--active) 100% + ) !important; + background-color: var(--highlight-text-color--active) !important; +} + +/* Markdown formatting */ +.cm-formatting-strong, +.cm-formatting-em, +.cm-formatting.cm-formatting-quote { + color: var(--text-formatted) !important; + font-weight: var(--normal-weight); + letter-spacing: -0.02em; +} + +/* Completed checkboxes */ +.markdown-preview-view ul > li.task-list-item.is-checked, +.markdown-source-view.mod-cm6 .HyperMD-task-line[data-task='x'], +.markdown-source-view.mod-cm6 .HyperMD-task-line[data-task='X'], +.markdown-source-view.mod-cm6 .HyperMD-task-line[data-task='M'] { + text-decoration: none; + color: var(--text-faint); +} + +/* Image card */ +img { + border-radius: 4px; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); +} + +.theme-dark .modal-container .suggestion-item.is-selected { + background: var(--color-accent); +} + +/* Focus active line */ +body.active-line .cm-active:not(.HyperMD-header, .HyperMD-codeblock)::before, +body.active-line .cm-active.HyperMD-quote::before { + content: ''; + height: 100%; + position: absolute; + left: -1.125em; + border-left: 3px solid var(--color-accent); + border-radius: 10px 0 0 10px; + opacity: 0.85; +} + +/* Code blocks horizontal scroll */ +.markdown-reading-view .markdown-preview-view pre:not(.frontmatter) code { + white-space: pre; +} + +/* Fancy code blocks */ +.cm-inline-code, +.cm-s-obsidian .HyperMD-codeblock, +.markdown-preview-view.markdown-preview-view :is(pre, code) { + --codeblock-border: var(--color-base-30); + --codeblock-roundness: var(--radius-s); + --code-block-alt-bg: var(--color-base-30); + --slight-code-roundish: var(--radius-xs); +} + +body.fancy-code .cm-s-obsidian .HyperMD-codeblock { + line-height: 1.4em; +} + +body.fancy-code .HyperMD-codeblock-begin { + counter-reset: codeblock-line-numbers; +} + +body.fancy-code + .HyperMD-codeblock:not( + .HyperMD-codeblock-begin, + .HyperMD-codeblock-end + )::before { + counter-increment: codeblock-line-numbers; + content: counter(codeblock-line-numbers); + font-size: 0.75em; + line-height: 2; + text-align: right; + height: 100%; + width: 1.7em; + color: var(--text-muted); + /* background-color: #1e2029; */ + background-color: var(--code-background); + position: absolute; + left: 0; + padding-right: 1.4em; +} + +body.fancy-code + .HyperMD-codeblock.cm-line:not( + .HyperMD-codeblock-begin, + .HyperMD-codeblock-end + ) { + padding-left: 2.8em; +} + +body.fancy-code .cm-s-obsidian div.HyperMD-codeblock-begin-bg { + background-color: var(--code-block-alt-bg); + border: var(--codeblock-border); + border-bottom: none; + border-top-right-radius: var(--codeblock-roundness); + border-top-left-radius: var(--codeblock-roundness); +} + +body.fancy-code div.HyperMD-codeblock-bg:not(.HyperMD-codeblock-begin-bg) { + border-right: var(--codeblock-border); + border-left: var(--codeblock-border); +} + +body.fancy-code .cm-line.HyperMD-codeblock .code-block-flair { + font-size: calc(var(--code-size) * 0.9); + color: var(--text-muted); + padding: 0 1px; + top: 0; +} + +body.fancy-code .markdown-reading-view pre[class*='language-']::before { + display: block; + content: ' '; + line-height: 1.5em; + background-color: var(--code-block-alt-bg); + border-top-right-radius: calc(var(--codeblock-roundness) * 0.8); + border-top-left-radius: calc(var(--codeblock-roundness) * 0.8); +} + +body.fancy-code pre[class*='language-']::after { + content: attr(class); + font-size: 0.9rem; + text-shadow: none; + color: var(--text-muted); + position: absolute; + top: 2px; + right: 5px; +} + +body.fancy-code .markdown-preview-view pre code { + padding: var(--size-4-1) var(--size-4-2); +} + +body.fancy-code .copy-code-button.copy-code-button.copy-code-button { + background-color: var(--interactive-normal); + top: unset; + bottom: 0; + padding: 0 var(--size-2-2); +} + +body.fancy-code .markdown-preview-view.markdown-preview-view pre { + padding: 0; + margin-top: var(--size-4-2); + border: var(--codeblock-border); + border-radius: var(--codeblock-roundness); +} + +body.fancy-code .markdown-reading-view .markdown-preview-view pre code { + display: block; +} + +body.fancy-code .markdown-preview-view pre code { + padding: var(--size-4-1) var(--size-4-5); +} + +/* ------------------- */ +/* One Dark Syntax Coloring */ +/* Source: https://github.com/AGMStudio/prism-theme-one-dark */ +/* ------------------- */ +.theme-light .token.comment .theme-light .cm-comment { + color: #ababab; +} +.theme-dark .token.comment, +.theme-dark .cm-comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: var(--atom-gray-1); +} +.token.punctuation, +.token.plain-text, +.token.dom.variable, +.cm-hmd-codeblock.cm-bracket { + color: var(--atom-gray-2); +} +code[class*='language-'], +.token.selector, +.cm-tag, +.token.dom.variable, +.token.tag, +.cm-def, +.token.parameter, +.cm-property, +.cm-qualifier { + color: var(--atom-red); +} +.token.class-name, +.token.maybe-class-name, +.token.property-access, +.token.constant, +.token.builtin, +.cm-variable-2, +.cm-type, +.cm-atom, +code .cm-tag { + color: var(--atom-yellow); +} +.token.property, +.token.boolean, +.token.number, +.token.symbol, +.token.attr-name, +.token.deleted, +.cm-attribute, +.cm-number, +.cm-property.cm-string { + color: var(--atom-orange); +} +.token.string, +.token.char, +.token.attr-value, +.token.inserted, +.cm-hmd-codeblock.cm-string, +.cm-hmd-codeblock.cm-string-2 { + color: var(--atom-green); +} +.token.operator, +.cm-operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: var(--atom-aqua); +} +.token.atrule, +.token.keyword, +.cm-keyword { + color: var(--atom-purple); +} +.cm-variable, +.token.function, +.token.method, +.token.macro.property { + color: var(--atom-blue); +} +.token.regex, +.token.important, +.token.variable { + color: var(--atom-purple); +} +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} +.token.entity { + cursor: help; +} + +/* --------------------- */ +/* Mobile toolbar button */ +/* --------------------- */ + +body.is-mobile:not(.floating-button-off):not(.advanced-toolbar) + .view-action:nth-last-of-type(2), +body.is-mobile:not(.floating-button-off):not(.advanced-toolbar) + .view-action:nth-last-of-type(2) { + color: white; + background-color: var(--blue); + opacity: 1; + top: calc(90vh - 110px); + display: flex; + padding: 5px; + position: fixed; + left: 86vw; + transform: translate(-40%, 5%); + justify-content: center; + align-items: center; + width: 53px; + height: 53px; + border-radius: 50% !important; + box-shadow: 1.1px 0.3px 2.2px rgba(0, 0, 0, 0.02), + 2.7px 0.7px 5.3px rgba(0, 0, 0, 0.028), 5px 1.3px 10px rgba(0, 0, 0, 0.035), + 8.9px 2.2px 17.9px rgba(0, 0, 0, 0.042), + 16.7px 4.2px 33.4px rgba(0, 0, 0, 0.05), 40px 10px 80px rgba(0, 0, 0, 0.07); +} + +body.is-mobile:not(.floating-button-off).advanced-toolbar + .view-action:nth-last-of-type(2), +body.is-mobile:not(.floating-button-off).advanced-toolbar + .view-action:nth-last-of-type(2) { + color: white; + background-color: var(--blue); + opacity: 1; + position: fixed; + top: calc(100vh - 138px); + display: flex; + padding: 5px; + left: 86vw; + transform: translate(-40%, -115%); + justify-content: center; + align-items: center; + width: 53px; + height: 53px; + border-radius: 50% !important; + box-shadow: 1.1px 0.3px 2.2px rgba(0, 0, 0, 0.02), + 2.7px 0.7px 5.3px rgba(0, 0, 0, 0.028), 5px 1.3px 10px rgba(0, 0, 0, 0.035), + 8.9px 2.2px 17.9px rgba(0, 0, 0, 0.042), + 16.7px 4.2px 33.4px rgba(0, 0, 0, 0.05), 40px 10px 80px rgba(0, 0, 0, 0.07); +} + +/* ------------------- */ +/* Checkbox styling & icons. Credit Minimal theme: https://minimal.guide/Block+types/Checklists#Checkbox+styling */ +/* Support @kepano - https://www.buymeacoffee.com/kepano */ +/* ------------------- */ + +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, +input[data-task='P']:checked, /* Open PR */ +input[data-task='M']:checked, /* Merged PR */ +input[data-task='D']:checked, /* Draft PR */ +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, +li[data-task='P'] > input:checked, +li[data-task='P'] > p > input:checked, +li[data-task='M'] > input:checked, +li[data-task='M'] > p > input:checked, +li[data-task='D'] > input:checked, +li[data-task='D'] > 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: transparent; + 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(--color-accent); + width: calc(50% - 0.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"); +} +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' viewBox='0 0 16 16' width='16' height='16'%3E%3Cpath d='M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z'%3E%3C/path%3E%3C/svg%3E"); +} +input[data-task='M']:checked, +li[data-task='M'] > input:checked, +li[data-task='M'] > p > input:checked { + color: var(--color-purple); + -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3E%3Cpath d='M5.45 5.154A4.25 4.25 0 0 0 9.25 7.5h1.378a2.251 2.251 0 1 1 0 1.5H9.25A5.734 5.734 0 0 1 5 7.123v3.505a2.25 2.25 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.95-.218ZM4.25 13.5a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm8.5-4.5a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5ZM5 3.25a.75.75 0 1 0 0 .005V3.25Z'%3E%3C/path%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-base-50); + -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' width='16' height='16'%3E%3Cpath d='M3.25 1A2.25 2.25 0 0 1 4 5.372v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.251 2.251 0 0 1 3.25 1Zm9.5 14a2.25 2.25 0 1 1 0-4.5 2.25 2.25 0 0 1 0 4.5ZM2.5 3.25a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0ZM3.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm9.5 0a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM14 7.5a1.25 1.25 0 1 1-2.5 0 1.25 1.25 0 0 1 2.5 0Zm0-4.25a1.25 1.25 0 1 1-2.5 0 1.25 1.25 0 0 1 2.5 0Z'%3E%3C/path%3E%3C/svg%3E"); +} + +body:not(.tasks) li[data-task='>'].task-list-item.is-checked, +body:not(.tasks) li[data-task='<'].task-list-item.is-checked, +body:not(.tasks) li[data-task='b'].task-list-item.is-checked, +body:not(.tasks) li[data-task='i'].task-list-item.is-checked, +body:not(.tasks) li[data-task='*'].task-list-item.is-checked, +body:not(.tasks) li[data-task='!'].task-list-item.is-checked, +body:not(.tasks) li[data-task='S'].task-list-item.is-checked, +body:not(.tasks) li[data-task='?'].task-list-item.is-checked, +body:not(.tasks) li[data-task='/'].task-list-item.is-checked, +body:not(.tasks) li[data-task='"'].task-list-item.is-checked, +body:not(.tasks) li[data-task='l'].task-list-item.is-checked, +body:not(.tasks) li[data-task='I'].task-list-item.is-checked, +body:not(.tasks) li[data-task='p'].task-list-item.is-checked, +body:not(.tasks) li[data-task='c'].task-list-item.is-checked, +body:not(.tasks) li[data-task='f'].task-list-item.is-checked, +body:not(.tasks) li[data-task='k'].task-list-item.is-checked, +body:not(.tasks) li[data-task='w'].task-list-item.is-checked, +body:not(.tasks) li[data-task='u'].task-list-item.is-checked, +body:not(.tasks) li[data-task='d'].task-list-item.is-checked, +body:not(.tasks) li[data-task='P'].task-list-item.is-checked, +body:not(.tasks) li[data-task='D'].task-list-item.is-checked { + color: var(--text-normal); +} + +/* ------------------- */ +/* Progress bars styling. Credit Minimal theme: https://minimal.guide/progress-bars */ +/* Support @kepano - https://www.buymeacoffee.com/kepano */ +/* ------------------- */ +.progress-color { + .markdown-rendered progress, + .markdown-source-view.is-live-preview progress, + .markdown-preview-view progress { + &[value^='1']::-webkit-progress-value, + &[value^='2']::-webkit-progress-value, + &[value^='3']::-webkit-progress-value { + background-color: var(--progress-color-1); + } + &[value^='4']::-webkit-progress-value, + &[value^='5']::-webkit-progress-value { + background-color: var(--progress-color-2); + } + &[value^='6']::-webkit-progress-value, + &[value^='7']::-webkit-progress-value { + background-color: var(--progress-color-3); + } + &[value^='8']::-webkit-progress-value, + &[value^='9']::-webkit-progress-value { + background-color: var(--progress-color-4); + } + &[value='1']::-webkit-progress-value, + &[value='100']::-webkit-progress-value { + background-color: var(--progress-color-5); + } + + &[value='0']::-webkit-progress-value, + &[value='2']::-webkit-progress-value, + &[value='3']::-webkit-progress-value, + &[value='4']::-webkit-progress-value, + &[value='5']::-webkit-progress-value, + &[value='6']::-webkit-progress-value, + &[value='7']::-webkit-progress-value, + &[value='8']::-webkit-progress-value, + &[value='9']::-webkit-progress-value { + background-color: var(--progress-color-1); + } + } +} + +/* ─────────────────────────────────────────────────── */ +/* Plugins */ +/* ─────────────────────────────────────────────────── */ + +/* --------------- */ +/* Todoist */ +/* --------------- */ + +.todoist-p1 > input[type='checkbox'] { + border: 1px solid #ff757f !important; + background-color: rgba(255, 117, 127, 0.25) !important; +} +.todoist-p1 > input[type='checkbox']:hover { + background-color: rgba(255, 117, 127, 0.5) !important; +} +.todoist-p2 > input[type='checkbox'] { + border: 1px solid #ffc777 !important; + background-color: rgba(255, 199, 119, 0.25) !important; +} +.todoist-p2 > input[type='checkbox']:hover { + background-color: rgba(255, 199, 119, 0.5) !important; +} +.todoist-p3 > input[type='checkbox'] { + border: 1px solid #65bcff !important; + background-color: rgba(101, 188, 255, 0.25) !important; +} +.todoist-p3 > input[type='checkbox']:hover { + background-color: rgba(101, 188, 255, 0.5) !important; +} +.todoist-p4 > input[type='checkbox'] { + border: 1px solid #b4c2f0 !important; + background-color: rgba(180, 194, 240, 0.25) !important; +} +.todoist-p4 > input[type='checkbox']:hover { + background-color: rgba(180, 194, 240, 0.5) !important; +} +.task-metadata { + font-size: var(--font-todoist-metadata-size); + color: #7a88cf; + margin-left: unset; +} +.task-metadata > * { + margin-right: 30px; +} +.task-date.task-overdue { + color: rgba(255, 152, 164, 0.75) !important; +} +.task-calendar-icon, +.task-project-icon, +.task-labels-icon { + vertical-align: middle; + height: 17px; + width: 17px; +} +.todoist-project .todoist-project { + margin-left: 20px; +} +.todoist-section { + margin-left: 20px; +} +.todoist-project .todoist-project-title { + font-weight: 700; + margin-block-end: 0px; +} +.todoist-section .todoist-section-title { + font-size: var(--font-todoist-title-size); + color: #7a88cf; + font-weight: 700; + margin-block-end: 0px; +} +.todoist-error { + border: 1px solid #ff98a4; + background-color: rgba(255, 152, 164, 0.05); + padding: 1em 1em; + margin: 1em 0px; +} +.todoist-error p { + margin: 0 0 1em 0; + font-weight: 600; +} +.todoist-error code { + background-color: unset !important; + padding: unset !important; + margin: unset !important; +} +.todoist-success { + border: 1px solid #c3e88d !important; + background-color: rgba(195, 232, 141, 0.05); + padding: 1em 1em !important; + margin: 1em 0px; +} +.todoist-success p { + margin: 0; + font-weight: 600; +} +/* .priority-container .priority-1 { + color: #ff98a4; +} +.priority-container .priority-2 { + color: #ffc777; +} +.priority-container .priority-3 { + color: #65bcff; +} +.priority-container .priority-4 { + color: #b4c2f0; +} */ + +/* --------------- */ +/* Checklist */ +/* --------------- */ + +.checklist-plugin-main .title { + font-size: var(--nav-item-size); +} + +.checklist-plugin-main .container input.search { + font-size: var(--font-ui-small); +} + +.checklist-plugin-main .group-header button.collapse, +.checklist-plugin-main button.toggle { + box-shadow: none; + cursor: pointer; +} + +.checklist-plugin-main .classic .content > p { + font-size: var(--font-ui-smaller); +} + +.checklist-plugin-main .toggle .checkbox { + border-radius: var(--checkbox-radius) !important; +} + +/* --------------- */ +/* Kanban */ +/* --------------- */ + +body:not(.no-kanban-styles) .kanban-plugin { + --dot-color: hsl(0 0% 40% / 10%); + --dot-spacing: 9px; + --dot-size: 1px; +} +body:not(.no-kanban-styles) .kanban-plugin__board { + background-image: radial-gradient( + circle, + var(--dot-color) var(--dot-size), + transparent var(--dot-size) + ); + border-top: var(--thin-border); + background-size: var(--dot-spacing) var(--dot-spacing); + background-attachment: local; +} + +body:not(.no-kanban-styles) .kanban-plugin__board > div { + margin: 0 auto; +} +body:not(.no-kanban-styles) .kanban-plugin__item-form { + border-top: none; +} +body:not(.no-kanban-styles) .kanban-plugin__lane-header-wrapper { + border-bottom: 0; +} +body:not(.no-kanban-styles) .kanban-plugin button { + box-shadow: none; +} +body:not(.no-kanban-styles) .kanban-plugin__item-button-wrapper > button:hover { + color: var(--text-normal); + background: var(--background-modifier-hover); +} +body:not(.no-kanban-styles) .kanban-plugin__item-button-wrapper { + border-top: none; +} +body:not(.no-kanban-styles) .kanban-plugin__lane { + border: 1px solid transparent; +} +body:not(.no-kanban-styles) .kanban-plugin__item-content-wrapper { + box-shadow: none; +} + +body:not(.no-kanban-styles):not(.is-mobile) + .kanban-plugin__grow-wrap + > textarea:focus { + box-shadow: none; +} +body:not(.no-kanban-styles) .kanban-plugin__item-input-actions button, +body:not(.no-kanban-styles) .kanban-plugin__lane-input-actions button { + font-size: var(--font-adaptive-small); +} +body:not(.no-kanban-styles) + .kanban-plugin__lane-header-wrapper + .kanban-plugin__grow-wrap + > textarea, +body:not(.no-kanban-styles) + .kanban-plugin__lane-input-wrapper + .kanban-plugin__grow-wrap + > textarea { + background: transparent; +} + +/* ─────────────────────────────────────────────────── */ +/* Styles Settings */ +/* ─────────────────────────────────────────────────── */ + +/* @settings +name: Things Theme +id: things-style +settings: + - + id: features + title: Features + type: heading + level: 2 + collapsed: true + - + title: Black mobile background + description: Change mobile editor background to default theme black + id: mobile-black-background + type: class-toggle + default: false + - + title: Disable mobile floating-action button + description: Revert placement of edit/preview button to default in header (mobile) + id: floating-button-off + type: class-toggle + default: false + - + title: Highlight active line + description: Change background color of current working line + id: active-line + type: class-toggle + default: false + - + title: Fancy code blocks + description: Enable fancy numbered code blocks + id: fancy-code + type: class-toggle + default: false + - + title: Fancy highlighting + description: Enable fancy highlight styles with highlight underlines + id: fancy-highlight + type: class-toggle + default: false + - + title: Disable Kanban board styles + description: Remove minimalist styling to the Kanban plugin + id: no-kanban-styles + type: class-toggle + default: false + - + id: link-decoration + title: Underline internal links + description: Show underlines on internal links + type: variable-select + default: Underline + options: + - Underline + - None + - + id: link-external-decoration + title: Underline external links + description: Show underlines on external links + type: variable-select + default: Underline + options: + - Underline + - None + - + id: custom-fonts + title: Typography + type: heading + level: 2 + collapsed: true + - + id: default-font-color + title: Default font colors + description: Use the default font color styling for bold, italics, and quotes + type: class-toggle + default: false + - + id: text-highlight-bg-l + title: Highlight color (light) + type: variable-color + format: rgb + default: 'rgba(255, 208, 0, 0.4)' + - + id: text-highlight-bg-d + title: Highlight color (dark) + type: variable-color + format: rgb + default: 'rgba(255, 208, 0, 0.4)' + - + id: strong-color + title: Bold font color + type: variable-color + format: hex + default: '#FF82B2' + - + id: em-color + title: Italics font color + type: variable-color + format: hex + default: '#FF82B2' + - + id: quote-color + title: Blockquotes font color + type: variable-color + format: hex + default: '#3EB4BF' + - + id: code-normal + title: Inline code blocks font color (Light mode) + type: variable-color + format: hex + default: '#BEC6CF' + - + id: code-color-d + title: Inline code blocks font color (Dark mode) + type: variable-color + format: hex + default: '#555E68' + - + id: tag-background-color-l + title: Tag background color (Light mode) + type: variable-color + format: hex + default: '#BDE1D3' + - + id: tag-font-color-l + title: Tag font color (Light mode) + type: variable-color + format: hex + default: '#1D694B' + - + id: tag-background-color-d + title: Tag background color (Dark mode) + type: variable-color + format: hex + default: '#1D694B' + - + id: tag-font-color-d + title: Tag font color (Dark mode) + type: variable-color + format: hex + default: '#FFFFFF' + - + id: progress-color + title: Progress colorful mode switcher + description: Toggle progress color scheme + type: class-toggle + default: false + - + id: progress-color-1 + title: progress 2-39% color + type: variable-color + opacity: true + format: hex + default: '#ad5758' + - + id: progress-color-2 + title: progress 40-59% color + type: variable-color + opacity: true + format: hex + default: '#b87f4c' + - + id: progress-color-3 + title: progress 60-79% color + type: variable-color + opacity: true + format: hex + default: '#d2b874' + - + id: progress-color-4 + title: progress 80-99% color + type: variable-color + opacity: true + format: hex + default: '#b0c07e' + - + id: progress-color-5 + title: progress 1,100% color + type: variable-color + opacity: true + format: hex + default: '#768399' + - + id: headings + title: Headings + type: heading + level: 2 + collapsed: true + - + id: level-1-headings + title: Level 1 Headings + type: heading + level: 3 + collapsed: true + - + id: h1-size + title: H1 font size + description: Accepts any CSS font-size value + type: variable-text + default: 1.7em + - + id: h1-weight + title: H1 font weight + description: Accepts numbers representing the CSS font-weight + type: variable-number + default: 700 + - + id: h1-color + title: H1 color + type: variable-color + format: hex + default: '#' + - + id: level-2-headings + title: Level 2 Headings + type: heading + level: 3 + collapsed: true + - + id: h2-size + title: H2 font size + description: Accepts any CSS font-size value + type: variable-text + default: 1.5em + - + id: h2-weight + title: H2 font weight + description: Accepts numbers representing the CSS font-weight + type: variable-number + default: 700 + - + id: h2-color + title: H2 color + type: variable-color + format: hex + default: '#2E80F2' + - + id: h2-underline + title: H2 underline + description: Toggle H2 underline (border-bottom) + type: class-toggle + default: true + - + id: level-3-headings + title: Level 3 Headings + type: heading + level: 3 + collapsed: true + - + id: h3-size + title: H3 font size + description: Accepts any CSS font-size value + type: variable-text + default: 1.2em + - + id: h3-weight + title: H3 font weight + description: Accepts numbers representing the CSS font-weight + type: variable-number + default: 600 + - + id: h3-color + title: H3 color + type: variable-color + format: hex + default: '#2E80F2' + - + id: level-4-headings + title: Level 4 Headings + type: heading + level: 3 + collapsed: true + - + id: h4-size + title: H4 font size + description: Accepts any CSS font-size value + type: variable-text + default: 1.1em + - + id: h4-weight + title: H4 font weight + description: Accepts numbers representing the CSS font-weight + type: variable-number + default: 500 + - + id: h4-color + title: H4 color + type: variable-color + format: hex + default: '#E5B567' + - + id: h4-transform + title: H4 transform + description: Transform the H4 heading text + type: variable-select + default: uppercase + options: + - + label: Uppercase + value: uppercase + - + label: None + value: none + - + id: level-5-headings + title: Level 5 Headings + type: heading + level: 3 + collapsed: true + - + id: h5-size + title: H5 font size + description: Accepts any CSS font-size value + type: variable-text + default: 1em + - + id: h5-weight + title: H5 font weight + description: Accepts numbers representing the CSS font-weight + type: variable-number + default: 500 + - + id: h5-color + title: H5 color + type: variable-color + format: hex + default: '#E83E3E' + - + id: level-6-headings + title: Level 6 Headings + type: heading + level: 3 + collapsed: true + - + id: h6-size + title: H6 font size + description: Accepts any CSS font-size value + type: variable-text + default: 0.9em + - + id: h6-weight + title: H6 font weight + description: Accepts numbers representing the CSS font-weight + type: variable-number + default: 400 + - + id: h6-color + title: H6 color + type: variable-color + format: hex + default: '#' + - + id: credits + title: Credits + type: heading + description: Created with ❤︎ by @colineckert. Support @colineckert at buymeacoffee.com/colineckert + level: 2 + collapsed: true + +*/ + +/* ─────────────────────────────────────────────────── */ +/* Plugin Compatibility info for the Obsidian Hub */ +/* ─────────────────────────────────────────────────── */ + +/* @plugins +core: +- backlink +- command-palette +- file-explorer +- global-search +- graph +- outgoing-link +- outline +- page-preview +- starred +- switcher +- tag-pane +- file-recovery +- daily-notes +- random-note +- publish +- sync +- word-count +community: +- sliding-panes-obsidian +- obsidian-codemirror-options +- obsidian-kanban +- dataview +- obsidian-hider +- calendar +- mysnippets-plugin +- cmenu-plugin +- obsidian-outliner +- readwise-official +- tag-wrangler +- todoist-sync-plugin +- templater-obsidian +- obsidian-system-dark-mode +- obsidian-style-settings +*/ diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json new file mode 100644 index 0000000..d55739c --- /dev/null +++ b/.obsidian/workspace.json @@ -0,0 +1,167 @@ +{ + "main": { + "id": "318381ba6697d90a", + "type": "split", + "children": [ + { + "id": "dd2b91766b5fe0d5", + "type": "tabs", + "children": [ + { + "id": "825e481f881b6659", + "type": "leaf", + "state": { + "type": "markdown", + "state": { + "file": "!!!INFO!!! Daggerheart Open Beta Playtest.md", + "mode": "source", + "source": false + } + } + } + ] + } + ], + "direction": "vertical" + }, + "left": { + "id": "f18fb07327a637d2", + "type": "split", + "children": [ + { + "id": "bf67d48604ac442d", + "type": "tabs", + "children": [ + { + "id": "55b37dbc4b1a4cf2", + "type": "leaf", + "state": { + "type": "file-explorer", + "state": { + "sortOrder": "alphabetical" + } + } + }, + { + "id": "50c4a3dfb5da8794", + "type": "leaf", + "state": { + "type": "search", + "state": { + "query": "", + "matchingCase": false, + "explainSearch": false, + "collapseAll": false, + "extraContext": false, + "sortOrder": "alphabetical" + } + } + }, + { + "id": "42a85a41a7d82aeb", + "type": "leaf", + "state": { + "type": "bookmarks", + "state": {} + } + } + ] + } + ], + "direction": "horizontal", + "width": 300 + }, + "right": { + "id": "f99f6c65bb86ca98", + "type": "split", + "children": [ + { + "id": "568febb72e5ed204", + "type": "tabs", + "children": [ + { + "id": "1c2feb8cb736ca18", + "type": "leaf", + "state": { + "type": "backlink", + "state": { + "file": "!!!INFO!!! Daggerheart Open Beta Playtest.md", + "collapseAll": false, + "extraContext": false, + "sortOrder": "alphabetical", + "showSearch": false, + "searchQuery": "", + "backlinkCollapsed": false, + "unlinkedCollapsed": true + } + } + }, + { + "id": "88e0040922b29902", + "type": "leaf", + "state": { + "type": "outgoing-link", + "state": { + "file": "!!!INFO!!! Daggerheart Open Beta Playtest.md", + "linksCollapsed": false, + "unlinkedCollapsed": true + } + } + }, + { + "id": "ae1b117aec55e814", + "type": "leaf", + "state": { + "type": "tag", + "state": { + "sortOrder": "frequency", + "useHierarchy": true + } + } + }, + { + "id": "9464f52c95ae20cb", + "type": "leaf", + "state": { + "type": "outline", + "state": { + "file": "!!!INFO!!! Daggerheart Open Beta Playtest.md" + } + } + } + ] + } + ], + "direction": "horizontal", + "width": 300, + "collapsed": true + }, + "left-ribbon": { + "hiddenItems": { + "switcher:Open quick switcher": false, + "graph:Open graph view": false, + "canvas:Create new canvas": false, + "daily-notes:Open today's daily note": false, + "templates:Insert template": false, + "command-palette:Open command palette": false + } + }, + "active": "825e481f881b6659", + "lastOpenFiles": [ + "!!!INFO!!! Daggerheart Open Beta Playtest.md", + "Pasted image 20240317164536.png", + "Pasted image 20240317162625.png", + "Pasted image 20240317162230.png", + "Pasted image 20240317162016.png", + "Pasted image 20240317150930.png", + "Pasted image 20240317150924.png", + "Pasted image 20240317143057.png", + "Health.png", + "Evasion.png", + "Dodging.png", + "Das Abenteuer/Quick Start Adventure - Digital Reader - Daggerheart Nexus.md", + "1. Character Erstellung.md", + "Das Abenteuer", + "Welcome.md" + ] +} \ No newline at end of file diff --git a/1. Character Erstellung.md b/1. Character Erstellung.md new file mode 100644 index 0000000..e69de29 diff --git a/DH v1-2 Character Class - Druid 3 of 20.png b/DH v1-2 Character Class - Druid 3 of 20.png new file mode 100644 index 0000000..fca7047 Binary files /dev/null and b/DH v1-2 Character Class - Druid 3 of 20.png differ diff --git a/Daggerheart Stats (Deutsch).png b/Daggerheart Stats (Deutsch).png new file mode 100644 index 0000000..d3ef1e6 Binary files /dev/null and b/Daggerheart Stats (Deutsch).png differ diff --git a/Das Abenteuer/Quick Start Adventure - Digital Reader - Daggerheart Nexus.md b/Das Abenteuer/Quick Start Adventure - Digital Reader - Daggerheart Nexus.md new file mode 100644 index 0000000..187391e --- /dev/null +++ b/Das Abenteuer/Quick Start Adventure - Digital Reader - Daggerheart Nexus.md @@ -0,0 +1,103 @@ +--- +page-title: "Quick Start Adventure - Digital Reader - Daggerheart Nexus" +url: https://app.demiplane.com/nexus/daggerheart/sources/open-beta-adventure/the-sablewood-messengers#themerchantcart +date: "2024-03-15 20:12:30" +--- +# Der Händlerwagen +## Der Anfang + +Read the following aloud to your players: + +> Heute Abend hat es eure Gruppe endlich in den Zobelwald geschafft, einen weitläufigen Wald mit kolossalen Bäumen, von denen einige sagen, dass sie sogar älter sind als die Vergessenen Götter. Es ist ein Ort, der für zwei Dinge bekannt ist: seine versunkenen Pfade, die die Handelsrouten für viele reisende Händler bieten, und seine einzigartigen Hybridtiere. Noch jetzt hört man aus dem Wagen heraus seltsame Geräusche: die Vogelstimmen der Lerchenmotten, das Quaken der Lemurenkröten, das Fiepen einer Familie von Fuchsfledermäusen im Unterholz. Einer von euch fährt die Kutsche. Wer ist das? + +Wenn ein Spieler seinen Charakter freiwillig als Kutscher anbietet, kannst du ihm eine Frage stellen wie: + +> Ihr habt etwas Einzigartiges am Aussehen der Bäume hier im Zobelwald bemerkt. Was ist es? + +Beschreiben Sie auf der Grundlage ihrer Antwort die Bäume, an denen die Spieler vorbeikommen, als solche mit diesen Merkmalen. + +> Während deine Rösser die Kutsche um eine enge Kurve ziehen und ein Rad nur für einen Moment vom Boden abhebt, siehst du einen umgestürzten Kaufmannskarren, der seitlich vor dir auf dem Weg liegt und dir den Weg versperrt. Eine Vereinzelung von Obst und Gemüse säumt den Weg. Von der Seite des Wagens tritt ein Strix-Wolf; Eine große Kreatur mit dem Körper eines Wolfes, dem Gesicht einer Eule und großen Flügeln, die ihren Rücken schmücken. Er kaut seine Mahlzeit, die Hand des toten Händlers, zu Ende, während er dich neugierig anstarrt und versucht zu beurteilen, ob du Freund oder Feind bist. Dann siehst du, unbeholfen hinter dir her, zwei kleine Welpen, die ihre Mutter vorsichtig beobachten. + +>Innerlich spürt der Rest von euch, wie eure Kutsche zum Stillstand kommt. Was möchten Sie tun? + +Allow the PCs to roleplay for a little bit if they’d like. When somebody approaches the merchant cart, that will trigger the first action roll. + +![](https://app.demiplane.com/_next/image?url=https%3A%2F%2Fimages.demiplane.com%2Fcompendium%2Fdaggerheart%2Fopen-beta-adventure%2FQjnB6MSjROOmBVS0%2F00-41-Quickstart-pg29.png&w=1920&q=90) + +## The First Action Roll + +Read the following aloud: + +> Der Strix-Wolf ist misstrauisch gegenüber deiner Bewegung. Wirf mir bitte einen Duality Dice und füge deine Presence hinzu. Du kannst auch eine Hoffnung vor dem Wurf ausgeben, um eine Erfahrung hinzuzufügen, falls dies zutrifft. Dann sag mir, wie hoch die Summe ist und welcher Würfel höher gewürfelt wurde! + +### ERFOLG +Wenn sie eine 10 oder höher gewürfelt haben, ist es ein Erfolg! +> *Beschreiben Sie die Strix-Wölfin, die ruhig versucht, ihre Welpen aus der Gefahr zu halten.* + +==Wenn der Wurf mit Hoffnung war, sag dem Spieler, dass er eine Hoffnung markieren soll.== + +==Wenn der Wurf mit Furcht war, nimm einen Furcht-Spielstein für später.== +Du hast auch die Möglichkeit, einen GM-Zug zu machen. Das ist deine Chance, eine Konsequenz in die Szene zu bringen. Es sollte den Erfolg nicht untergraben, sondern die Erzählung auf spannende Weise vorantreiben. Man könnte sagen: + +>Die Mutter heult, als ob sie einen anderen Strix-Wolf zwischen den Bäumen rufen wollte. Du weißt, dass du vielleicht nicht lange allein bist. + +### FEHLSCHLAG +Wenn sie eine 9 oder weniger gewürfelt haben, ist es ein Misserfolg. +>*Beschreiben Sie, wie der Strix-Wolf knurrt und schnappt, wütend darüber, dass sich der SC nähert.* + +==Wenn der Wurf mit Hoffnung war, sag dem Spieler, dass er eine Hoffnung markieren soll.== +Du kannst immer noch einen GM-Zug machen, aber weil es mit Hope ist, sollte es nicht so schlimm sein, wie es sein könnte. Man könnte sagen: + +Wenn der Wurf mit Angst war, laufen die Dinge schlecht. Beschreiben Sie den Strix-Wolf, der den PC anknurrt. Sagen Sie ihnen, dass sie einen Stress markieren sollen. + +> Mit einem letzten Knurren beugt sie sich herunter, damit ihre Welpen auf ihren Rücken klettern können, bevor sie in die Luft abhebt und auf einem Ast in der Nähe landet. Sie beobachtet jede deiner Bewegungen. + +### KRITISCHER ERFOLG +Wenn beide Würfel die gleiche Zahl würfeln, ist das ein kritischer Erfolg! ==Sag dem PC, dass er eine Hoffnung markieren soll.== Ebenfalls kann dieser auch einen Stress löschen, wenn er einen hat. +> *Beschreiben Sie dann den Strix-Wolf, der sich mit gesenktem Kopf und wedelndem Schwanz auf den PC zubewegt. Er schnüffelt an ihrer Hand und setzt sich vor sie.* + +## Die Folgen + +Lassen Sie die Ereignisse des vorherigen Aktes ablaufen, so dass die Spieler Rollenspiele spielen und andere Aktionen ausführen können. Verwenden Sie die folgenden Szenarien als Anleitung. + +### SCENARIOS + +**Wenn sie den Händlerwagen durchsuchen,** kann man darüber sprechen, dass der Wagen aller Wertsachen beraubt wurde, und den toten Fahrer mit einem verstümmelten Arm zeigen, welcher von der Familie Strix-Wolf als Futter angeknabbert wurde. Wenn die PCs die Leiche weiter untersuchen, könnten sie feststellen, dass dem Fahrer der Hals aufgeschlitzt wurde. + +**Wenn sie den Strixwolf angreifen**, lass sie einen Angriffswurf auf der Schwierigkeitsstufe 10 gegen ihn machen. Bei Erfolg verursachen sie mit ihrer Waffe Schaden. Die Welpen werden fliehen. + +**Wenn sie es nicht schaffen, mit dem Strixwolf zu interagieren, zieht er seine Welpen auf den Rücken und fliegt in einen nahe gelegenen Baum, wobei er die Abenteurer von oben beobachtet. + +**Wenn sie versuchen, Anzeichen für etwas Seltsames zu finden**, sehen sie die Überreste von dornigem Brombeergestrüpp, die sich um das Rad der Kutsche verheddert haben und auf der Strasse verstreut sind. + +**Wenn sie den Händlerwagen aus dem Weg räumen wollen, Schritte unternehmen, um ihre Kutsche wieder in Bewegung zu setzen, oder versuchen, die Spur zu verlassen**, gehen zu [[Quick Start Adventure - Digital Reader - Daggerheart Nexus#The Ambush]] + +## Der Hinterhalt + +Wenn sich der Moment richtig anfühlt oder eines der oben genannten Szenarien ihn auslöst, bitte einen PC, der auf seine Umgebung zu achten scheint, einen **Instinct** mit einem Schwierigkeitsgrad von 14 auszuführen. + +> *Bei einem Erfolg bemerken sie, dass Augen sie aus der Dunkelheit jenseits des Weges beobachten. Wenn es mit FEAR war, markiert der PC einen Stress. Verwenden Sie die Aufforderungen "[[Quick Start Adventure - Digital Reader - Daggerheart Nexus#Ich sehe sie!|Ich sehe Sie!]]".* + +> *Bei einem Fehlschlag geraten sie sofort in einen Hinterhalt. Wenn es mit FEAR war, markiert der PC einen Stress. Verwenden Sie die Eingabeaufforderungen "Aus dem Hinterhalt!".* + +### Ich sehe sie! +Read the following aloud: + +> Du hörst das Knacken eines Astes und drehst dich um, um vier _Thistlefolk_ zu sehen, die sich durch das Unterholz schleichen und versuchen, auf deine Gruppe zu springen. Der umgekippte Wagen war eine Ablenkung, aber ihr Plan ging nicht auf. + +### Aus dem Hinterhalt! +Lesen Sie folgendes vor: + +> In einem Wirbelsturm aus knackenden Ästen und ausgezogenen Halmen springt eine Gruppe von vier _Thistlefolk_ aus dem Gebüsch am Straßenrand. Der umgekippte Wagen war ein Hinterhalt! Sie stehen mit gezogenen Waffen vor euch und blockieren die Straße. + +# Mapaufbau + +Geb den Spielern einige Bäume und Steine, dass sie mit dir eine Map erbauen und stelle schlussendlich den Karren auf. Frage dann deine Spieler, dass sie einen Characterstein aufstellen sollen, wo sie ungefähr wären. Stelle **DANACH** die Gegner auf. + +Unten findest du die Stat-Blöcke für die Ambushers und Thief. Du wirst diese Werteblöcke verwenden, um den Rest dieser Begegnung zu spielen. Vergiss nicht, den Kampf zu deinem eigenen zu machen. Entscheide, wie das _Thistlefolk_ im Detail aussieht + +![](https://preview.redd.it/no-spoilers-daggerheart-tabletop-miniatures-sculpt-v0-522elpg6zioc1.png?width=375&format=png&auto=webp&s=f405d0f80f94175e5c9827ab733202c4333b77d6) + +> *Beschreiben Sie die Szene, als würden die Spieler einen Film sehen oder ein Buch lesen, und wenn Sie sich damit wohlfühlen, bitten Sie sie, sich auch am Aufbau der Szene zu beteiligen. + + Das kann so einfach sein, wie sie zu bitten, ihren Angriff oder ihr Ausweichen im Detail zu beschreiben, aber du könntest sie auch weiter einbeziehen – frag sie, welches einzigartige Kleidungsstück die Ambusher alle tragen oder welchen interessanten Kampfstil sie zu verwenden scheinen. \ No newline at end of file diff --git a/Dodging.png b/Dodging.png new file mode 100644 index 0000000..e8cbf25 Binary files /dev/null and b/Dodging.png differ diff --git a/Evasion.png b/Evasion.png new file mode 100644 index 0000000..ba5688c Binary files /dev/null and b/Evasion.png differ diff --git a/Health.png b/Health.png new file mode 100644 index 0000000..e0d4434 Binary files /dev/null and b/Health.png differ diff --git a/Pasted image 20240316101811.png b/Pasted image 20240316101811.png new file mode 100644 index 0000000..b1684d4 Binary files /dev/null and b/Pasted image 20240316101811.png differ diff --git a/Pasted image 20240316101816.png b/Pasted image 20240316101816.png new file mode 100644 index 0000000..5cbb09c Binary files /dev/null and b/Pasted image 20240316101816.png differ diff --git a/Pasted image 20240316102648.png b/Pasted image 20240316102648.png new file mode 100644 index 0000000..8a25b7c Binary files /dev/null and b/Pasted image 20240316102648.png differ diff --git a/Pasted image 20240316141356.png b/Pasted image 20240316141356.png new file mode 100644 index 0000000..f74ac80 Binary files /dev/null and b/Pasted image 20240316141356.png differ diff --git a/Pasted image 20240316142325.png b/Pasted image 20240316142325.png new file mode 100644 index 0000000..aa3f1e1 Binary files /dev/null and b/Pasted image 20240316142325.png differ diff --git a/Pasted image 20240317143057.png b/Pasted image 20240317143057.png new file mode 100644 index 0000000..1b7b012 Binary files /dev/null and b/Pasted image 20240317143057.png differ diff --git a/Pasted image 20240317150924.png b/Pasted image 20240317150924.png new file mode 100644 index 0000000..64441e4 Binary files /dev/null and b/Pasted image 20240317150924.png differ diff --git a/Pasted image 20240317150930.png b/Pasted image 20240317150930.png new file mode 100644 index 0000000..e5959b9 Binary files /dev/null and b/Pasted image 20240317150930.png differ diff --git a/Pasted image 20240317162016.png b/Pasted image 20240317162016.png new file mode 100644 index 0000000..31fee85 Binary files /dev/null and b/Pasted image 20240317162016.png differ diff --git a/Pasted image 20240317162230.png b/Pasted image 20240317162230.png new file mode 100644 index 0000000..b0e141e Binary files /dev/null and b/Pasted image 20240317162230.png differ diff --git a/Pasted image 20240317162625.png b/Pasted image 20240317162625.png new file mode 100644 index 0000000..c0d6393 Binary files /dev/null and b/Pasted image 20240317162625.png differ diff --git a/Pasted image 20240317164536.png b/Pasted image 20240317164536.png new file mode 100644 index 0000000..a676cf1 Binary files /dev/null and b/Pasted image 20240317164536.png differ diff --git a/School.png b/School.png new file mode 100644 index 0000000..201fefa Binary files /dev/null and b/School.png differ diff --git a/Weapons.png b/Weapons.png new file mode 100644 index 0000000..c9a4adc Binary files /dev/null and b/Weapons.png differ