/* THIS IS A GENERATED/BUNDLED FILE BY ESBUILD if you want to view the source, please visit the github repository of this plugin */ var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to2, from2, except, desc) => { if (from2 && typeof from2 === "object" || typeof from2 === "function") { for (let key of __getOwnPropNames(from2)) if (!__hasOwnProp.call(to2, key) && key !== except) __defProp(to2, key, { get: () => from2[key], enumerable: !(desc = __getOwnPropDesc(from2, key)) || desc.enumerable }); } return to2; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var __publicField = (obj, key, value) => { __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); return value; }; // node_modules/pagerank.js/lib/index.js var require_lib = __commonJS({ "node_modules/pagerank.js/lib/index.js"(exports, module2) { "use strict"; function forOwn(object, callback2) { if (typeof object === "object" && typeof callback2 === "function") { for (var key in object) { if (object.hasOwnProperty(key) === true) { if (callback2(key, object[key]) === false) { break; } } } } } module2.exports = function() { var self = { count: 0, edges: {}, nodes: {} }; self.link = function(source, target, weight) { if (isFinite(weight) !== true || weight === null) { weight = 1; } weight = parseFloat(weight); if (self.nodes.hasOwnProperty(source) !== true) { self.count++; self.nodes[source] = { weight: 0, outbound: 0 }; } self.nodes[source].outbound += weight; if (self.nodes.hasOwnProperty(target) !== true) { self.count++; self.nodes[target] = { weight: 0, outbound: 0 }; } if (self.edges.hasOwnProperty(source) !== true) { self.edges[source] = {}; } if (self.edges[source].hasOwnProperty(target) !== true) { self.edges[source][target] = 0; } self.edges[source][target] += weight; }; self.rank = function(alpha2, epsilon, callback2) { var delta = 1, inverse = 1 / self.count; forOwn(self.edges, function(source) { if (self.nodes[source].outbound > 0) { forOwn(self.edges[source], function(target) { self.edges[source][target] /= self.nodes[source].outbound; }); } }); forOwn(self.nodes, function(key) { self.nodes[key].weight = inverse; }); while (delta > epsilon) { var leak = 0, nodes = {}; forOwn(self.nodes, function(key, value) { nodes[key] = value.weight; if (value.outbound === 0) { leak += value.weight; } self.nodes[key].weight = 0; }); leak *= alpha2; forOwn(self.nodes, function(source) { forOwn(self.edges[source], function(target, weight) { self.nodes[target].weight += alpha2 * nodes[source] * weight; }); self.nodes[source].weight += (1 - alpha2) * inverse + leak * inverse; }); delta = 0; forOwn(self.nodes, function(key, value) { delta += Math.abs(value.weight - nodes[key]); }); } forOwn(self.nodes, function(key) { return callback2(key, self.nodes[key].weight); }); }; self.reset = function() { self.count = 0; self.edges = {}; self.nodes = {}; }; return self; }(); } }); // node_modules/vhtml/dist/vhtml.js var require_vhtml = __commonJS({ "node_modules/vhtml/dist/vhtml.js"(exports, module2) { (function(global, factory) { typeof exports === "object" && typeof module2 !== "undefined" ? module2.exports = factory() : typeof define === "function" && define.amd ? define(factory) : global.vhtml = factory(); })(exports, function() { "use strict"; var emptyTags = ["area", "base", "br", "col", "command", "embed", "hr", "img", "input", "keygen", "link", "meta", "param", "source", "track", "wbr"]; var esc = function esc2(str) { return String(str).replace(/[&<>"']/g, function(s) { return "&" + map3[s] + ";"; }); }; var map3 = { "&": "amp", "<": "lt", ">": "gt", '"': "quot", "'": "apos" }; var setInnerHTMLAttr = "dangerouslySetInnerHTML"; var DOMAttributeNames = { className: "class", htmlFor: "for" }; var sanitized = {}; function h4(name, attrs) { var stack = [], s = ""; attrs = attrs || {}; for (var i = arguments.length; i-- > 2; ) { stack.push(arguments[i]); } if (typeof name === "function") { attrs.children = stack.reverse(); return name(attrs); } if (name) { s += "<" + name; if (attrs) for (var _i in attrs) { if (attrs[_i] !== false && attrs[_i] != null && _i !== setInnerHTMLAttr) { s += " " + (DOMAttributeNames[_i] ? DOMAttributeNames[_i] : esc(_i)) + '="' + esc(attrs[_i]) + '"'; } } s += ">"; } if (emptyTags.indexOf(name) === -1) { if (attrs[setInnerHTMLAttr]) { s += attrs[setInnerHTMLAttr].__html; } else while (stack.length) { var child = stack.pop(); if (child) { if (child.pop) { for (var _i2 = child.length; _i2--; ) { stack.push(child[_i2]); } } else { s += sanitized[child] === true ? child : esc(child); } } } s += name ? "" : ""; } sanitized[s] = true; return s; } return h4; }); } }); // src/main.ts var main_exports = {}; __export(main_exports, { default: () => SRPlugin }); module.exports = __toCommonJS(main_exports); var import_obsidian8 = require("obsidian"); var graph = __toESM(require_lib()); // src/settings.ts var import_obsidian2 = require("obsidian"); // src/lang/helpers.ts var import_obsidian = require("obsidian"); // src/lang/locale/af.ts var af_default = {}; // src/lang/locale/ar.ts var ar_default = { // flashcard-modal.tsx DECKS: "\u0627\u0644\u0631\u064F\u0632\u0645\u064E\u0627\u062A", DUE_CARDS: "\u0628\u0637\u0627\u0642\u0627\u062A \u0645\u064F\u0633\u062A\u062D\u0642\u0629", NEW_CARDS: "\u0628\u0637\u0627\u0642\u0627\u062A \u062C\u062F\u064A\u062F\u0629", TOTAL_CARDS: "\u0625\u062C\u0645\u0627\u0644\u064A \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A", BACK: "\u0631\u062C\u0648\u0639", SKIP: "Skip", EDIT_CARD: "\u062A\u0639\u062F\u064A\u0644 \u0627\u0644\u0628\u0637\u0627\u0642\u0629", RESET_CARD_PROGRESS: "\u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646 \u062A\u0642\u062F\u0651\u064F\u0645\u0652 \u0627\u0644\u0628\u0637\u0627\u0642\u0629", HARD: "\u0635\u0639\u0628", GOOD: "\u062C\u064A\u062F", EASY: "\u0633\u0647\u0644", SHOW_ANSWER: "\u0623\u0638\u0647\u0650\u0631 \u0627\u0644\u0625\u062C\u0627\u0628\u0629", CARD_PROGRESS_RESET: ".\u062A\u0645\u0651\u064E\u062A \u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646 \u062A\u0642\u062F\u0651\u064F\u0645 \u0627\u0644\u0628\u0637\u0627\u0642\u0629", SAVE: "\u062D\u0641\u0638", CANCEL: "\u0625\u0644\u063A\u0627\u0621", NO_INPUT: ".\u0644\u0645 \u064A\u062A\u0650\u0645 \u062A\u0642\u062F\u064A\u0645 \u0623\u064A \u0645\u064F\u062F\u062E\u0644\u0627\u062A", CURRENT_EASE_HELP_TEXT: ":\u0627\u0644\u0633\u0647\u0648\u0644\u0629 \u0627\u0644\u062D\u0627\u0644\u064A\u0629", CURRENT_INTERVAL_HELP_TEXT: ":\u0627\u0644\u0641\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064A \u0627\u0644\u062D\u0627\u0644\u064A", CARD_GENERATED_FROM: "${notePath} :\u062A\u0645 \u0625\u0646\u0634\u0627\u0624\u0647\u0627 \u0645\u0646", // main.ts OPEN_NOTE_FOR_REVIEW: "\u0627\u0641\u062A\u062D \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629 \u0644\u0644\u0645\u0631\u0627\u062C\u0639\u0629", REVIEW_CARDS: "\u0645\u0631\u0627\u062C\u0639\u0629 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A", REVIEW_EASY_FILE_MENU: "\u0645\u0631\u0627\u062C\u0639\u0629: \u0633\u0647\u0644", REVIEW_GOOD_FILE_MENU: "\u0645\u0631\u0627\u062C\u0639\u0629: \u062C\u064A\u062F", REVIEW_HARD_FILE_MENU: "\u0645\u0631\u0627\u062C\u0639\u0629: \u0635\u0639\u0628", REVIEW_NOTE_EASY_CMD: "\u0645\u0631\u0627\u062C\u0639\u0629 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629 \u0643\u0640 \u0633\u0647\u0644\u0629", REVIEW_NOTE_GOOD_CMD: "\u0645\u0631\u0627\u062C\u0639\u0629 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629 \u0643\u0640 \u062C\u064A\u062F\u0629", REVIEW_NOTE_HARD_CMD: "\u0645\u0631\u0627\u062C\u0639\u0629 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629 \u0643\u0640 \u0635\u0639\u0628\u0629", CRAM_ALL_CARDS: "\u062D\u062F\u062F \u0631\u064F\u0632\u0645\u064E\u0629 \u0644\u0644\u062D\u0634\u0631", REVIEW_ALL_CARDS: "\u0645\u0631\u0627\u062C\u0639\u0629 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0645\u0646 \u062C\u0645\u064A\u0639 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0627\u062A", REVIEW_CARDS_IN_NOTE: "\u0645\u0631\u0627\u062C\u0639\u0629 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0645\u0646 \u0647\u0630\u0647 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629", CRAM_CARDS_IN_NOTE: "\u0623\u062D\u0634\u0631 \u062C\u0645\u064A\u0639 \u0628\u0637\u0627\u0642\u0627\u062A \u0647\u0630\u0647 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629", VIEW_STATS: "\u0639\u0631\u0636 \u0627\u0644\u0625\u062D\u0635\u0627\u0626\u064A\u0627\u062A", STATUS_BAR: "\u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0645\u0633\u062A\u062D\u0642\u0629 ${dueFlashcardsCount},\u0645\u0644\u0627\u062D\u0638\u0627\u062A ${dueNotesCount}:\u0645\u0631\u0627\u062C\u0639\u0629", SYNC_TIME_TAKEN: "${t}ms \u0627\u0633\u062A\u063A\u0631\u0627\u0642 \u0627\u0644\u0645\u0632\u0627\u0645\u0646\u0629", NOTE_IN_IGNORED_FOLDER: ".\u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629 \u064A\u062A\u0645 \u062D\u0641\u0638\u0647\u0627 \u0636\u0645\u0646 \u0627\u0644\u0645\u062C\u0644\u062F \u0627\u0644\u0630\u064A \u062A\u0645 \u062A\u062C\u0627\u0647\u0644\u0647 (\u062A\u062D\u0642\u0642 \u0645\u0646 \u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A)", PLEASE_TAG_NOTE: ".\u064A\u0631\u062C\u0649 \u0648\u0636\u0639 \u0648\u0633\u0645 \u0639\u0644\u0649 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629 \u0628\u0634\u0643\u0644 \u0645\u0646\u0627\u0633\u0628 \u0644\u0644\u0645\u0631\u0627\u062C\u0639\u0629 (\u0641\u064A \u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A)", RESPONSE_RECEIVED: ".\u0627\u0633\u062A\u064F\u0644\u0645\u062A \u0627\u0644\u0627\u0633\u062A\u062C\u0627\u0628\u0629", NO_DECK_EXISTS: "${deckName} \u0644\u0627 \u064A\u0648\u062C\u062F \u0631\u064F\u0632\u0645\u064E\u0629", ALL_CAUGHT_UP: "\u{1F606} \u0644\u0642\u062F \u062A\u0645 \u0627\u0644\u0642\u0628\u0636 \u0639\u0644\u064A\u0643\u0645 \u062C\u0645\u064A\u0639\u0627 \u0627\u0644\u0622\u0646", // scheduling.ts DAYS_STR_IVL: "\u064A\u0648\u0645/\u0623\u064A\u0627\u0645 ${interval}", MONTHS_STR_IVL: "\u0634\u0647\u0631/\u0623\u0634\u0647\u0631 ${interval}", YEARS_STR_IVL: "\u0633\u0646\u0629/\u0633\u0646\u0648\u0627\u062A ${interval}", DAYS_STR_IVL_MOBILE: "\u064A${interval}", MONTHS_STR_IVL_MOBILE: "\u0634${interval}", YEARS_STR_IVL_MOBILE: "\u0633${interval}", // settings.ts SETTINGS_HEADER: "Spaced Repetition Plugin - Settings", CHECK_WIKI: '.wiki \u0644\u0645\u0632\u064A\u062F \u0645\u0646 \u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062A \u060C \u062A\u062D\u0642\u0642 \u0645\u0646', FOLDERS_TO_IGNORE: "\u0645\u062C\u0644\u062F\u0627\u062A \u0644\u062A\u062C\u0627\u0647\u0644\u0647\u0627", FOLDERS_TO_IGNORE_DESC: "Templates Meta/Scripts : \u0623\u062F\u062E\u0644 \u0645\u0633\u0627\u0631\u0627\u062A \u0627\u0644\u0645\u062C\u0644\u062F \u0645\u0641\u0635\u0648\u0644\u0629 \u0628\u0648\u0627\u0633\u0637\u0629 \u0633\u0637\u0648\u0631 \u062C\u062F\u064A\u062F\u0629,\u0645\u062B\u0627\u0644", FLASHCARDS: "\u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A", FLASHCARD_EASY_LABEL: "\u0646\u0635 \u0627\u0644\u0632\u0631 \u0633\u0647\u0644", FLASHCARD_GOOD_LABEL: "\u0646\u0635 \u0627\u0644\u0632\u0631 \u062C\u064A\u062F", FLASHCARD_HARD_LABEL: "\u0646\u0635 \u0627\u0644\u0632\u0631 \u0635\u0639\u0628", FLASHCARD_EASY_DESC: '"\u062A\u062E\u0635\u064A\u0635 \u0627\u0644\u062A\u0633\u0645\u064A\u0629 \u0644\u0644\u0632\u0631 "\u0633\u0647\u0644', FLASHCARD_GOOD_DESC: '"\u062A\u062E\u0635\u064A\u0635 \u0627\u0644\u062A\u0633\u0645\u064A\u0629 \u0644\u0644\u0632\u0631 "\u062C\u064A\u062F', FLASHCARD_HARD_DESC: '"\u062A\u062E\u0635\u064A\u0635 \u0627\u0644\u062A\u0633\u0645\u064A\u0629 \u0644\u0644\u0632\u0631 "\u0635\u0639\u0628', FLASHCARD_TAGS: "\u0648\u064F\u0633\u0648\u0645 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A", FLASHCARD_TAGS_DESC: "#2\u0623\u062F\u062E\u0644 \u0627\u0644\u0648\u064F\u0633\u0648\u0645 \u0645\u0641\u0635\u0648\u0644\u0629 \u0628\u0645\u0633\u0627\u0641\u0627\u062A \u0623\u0648 \u0623\u0633\u0637\u0631 \u062C\u062F\u064A\u062F\u0629 \u060C \u0623\u064A \u0628\u0637\u0627\u0642\u0627\u062A# \u0631\u0632\u0645\u06293# \u0631\u0632\u0645\u0629", CONVERT_FOLDERS_TO_DECKS: "\u062A\u062D\u0648\u064A\u0644 \u0627\u0644\u0645\u062C\u0644\u062F\u0627\u062A \u0625\u0644\u0649 \u0645\u0644\u0641\u0627\u062A \u0623\u0635\u0644\u064A\u0629 \u0648 \u0645\u0644\u0641\u0627\u062A \u0627\u0644\u0641\u0631\u0639\u064A\u0629\u061F", CONVERT_FOLDERS_TO_DECKS_DESC: ".\u0647\u0630\u0627 \u0647\u0648 \u0628\u062F\u064A\u0644 \u0644\u062E\u064A\u0627\u0631 \u0648\u0633\u0648\u0645 \u0627\u0644\u0628\u0637\u0627\u0642\u0629 \u0623\u0639\u0644\u0627\u0647", INLINE_SCHEDULING_COMMENTS: "\u062D\u0641\u0638 \u062A\u0639\u0644\u064A\u0642 \u0627\u0644\u062C\u062F\u0648\u0644\u0629 \u0639\u0644\u0649 \u0646\u0641\u0633 \u0627\u0644\u0633\u0637\u0631 \u0645\u062B\u0644 \u0627\u0644\u0633\u0637\u0631 \u0627\u0644\u0623\u062E\u064A\u0631 \u0644\u0644\u0628\u0637\u0627\u0642\u0629 \u061F", INLINE_SCHEDULING_COMMENTS_DESC: "\u0644\u0627 \u062A\u0643\u0633\u0631 \u062A\u0646\u0633\u064A\u0642 \u0627\u0644\u0642\u0627\u0626\u0645\u0629 HTML \u0633\u064A\u0624\u062F\u064A \u062A\u0634\u063A\u064A\u0644 \u0647\u0630\u0627 \u0625\u0644\u0649 \u062C\u0639\u0644 \u062A\u0639\u0644\u064A\u0642\u0627\u062A", BURY_SIBLINGS_TILL_NEXT_DAY: "\u0623\u062E\u0641\u064A \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0634\u0642\u064A\u0642\u0629 \u062D\u062A\u0649 \u0627\u0644\u064A\u0648\u0645 \u0627\u0644\u062A\u0627\u0644\u064A", BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "cloze deletions : \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0634\u0642\u064A\u0642\u0629 \u0647\u064A \u0628\u0637\u0627\u0642\u0627\u062A \u062A\u0645 \u0625\u0646\u0634\u0627\u0624\u0647\u0627 \u0645\u0646 \u0646\u0641\u0633 \u0646\u0635 \u0627\u0644\u0628\u0637\u0627\u0642\u0629 \u0643\u0640", SHOW_CARD_CONTEXT: "\u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0633\u064A\u0627\u0642 \u0641\u064A \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A\u061F", SHOW_CARD_CONTEXT_DESC: "i.e. Title > Heading 1 > Subheading > ... > Subheading", CARD_MODAL_HEIGHT_PERCENT: "\u0646\u0633\u0628\u0629 \u0627\u0631\u062A\u0641\u0627\u0639 \u0627\u0644\u0628\u0637\u0627\u0642\u0629", CARD_MODAL_SIZE_PERCENT_DESC: "\u064A\u062C\u0628 \u0636\u0628\u0637\u0647\u0627 \u0639\u0644\u0649 100 \u066A \u0639\u0644\u0649 \u0627\u0644\u0647\u0627\u062A\u0641 \u0627\u0644\u0645\u062D\u0645\u0648\u0644 \u0623\u0648 \u0625\u0630\u0627 \u0643\u0627\u0646 \u0644\u062F\u064A\u0643 \u0635\u0648\u0631 \u0643\u0628\u064A\u0631\u0629 \u062C\u062F\u064B\u0627", RESET_DEFAULT: "\u0625\u0639\u0627\u062F\u0629 \u062A\u0639\u064A\u064A\u0646 \u0625\u0644\u0649 \u0627\u0644\u0627\u0641\u062A\u0631\u0627\u0636\u064A", CARD_MODAL_WIDTH_PERCENT: "\u0646\u0633\u0628\u0629 \u0639\u0631\u0636 \u0627\u0644\u0628\u0637\u0627\u0642\u0629", RANDOMIZE_CARD_ORDER: "\u062A\u0631\u062A\u064A\u0628 \u0628\u0637\u0627\u0642\u0629 \u0639\u0634\u0648\u0627\u0626\u064A \u0623\u062B\u0646\u0627\u0621 \u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0629\u061F", DISABLE_CLOZE_CARDS: "\u061Fcloze \u062A\u0639\u0637\u064A\u0644 \u0628\u0637\u0627\u0642\u0627\u062A", CONVERT_HIGHLIGHTS_TO_CLOZES: "Convert ==hightlights== to clozes?", CONVERT_BOLD_TEXT_TO_CLOZES: "Convert **bolded text** to clozes?", CONVERT_CURLY_BRACKETS_TO_CLOZES: "Convert {{curly brackets}} to clozes?", INLINE_CARDS_SEPARATOR: "\u0641\u0627\u0635\u0644 \u0645\u0646 \u0623\u062C\u0644 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0645\u0636\u0645\u0646\u0629", FIX_SEPARATORS_MANUALLY_WARNING: "\u0636\u0639 \u0641\u064A \u062D\u0633\u0627\u0628\u0643 \u0623\u0646\u0647 \u0628\u0639\u062F \u062A\u063A\u064A\u064A\u0631 \u0647\u0630\u0627 \u060C \u064A\u062C\u0628 \u0639\u0644\u064A\u0643 \u062A\u0639\u062F\u064A\u0644 \u0623\u064A \u0628\u0637\u0627\u0642\u0627\u062A \u0644\u062F\u064A\u0643 \u0628\u0627\u0644\u0641\u0639\u0644 \u064A\u062F\u0648\u064A\u064B\u0627", INLINE_REVERSED_CARDS_SEPARATOR: "\u0641\u0627\u0635\u0644 \u0645\u0646 \u0623\u062C\u0644 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0639\u0643\u0633\u064A\u0629 \u0627\u0644\u0645\u0636\u0645\u0646\u0629", MULTILINE_CARDS_SEPARATOR: "\u0641\u0627\u0635\u0644 \u0645\u0646 \u0623\u062C\u0644 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0645\u062A\u0639\u062F\u062F\u0629", MULTILINE_REVERSED_CARDS_SEPARATOR: "\u0641\u0627\u0635\u0644 \u0645\u0646 \u0623\u062C\u0644 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0639\u0643\u0633\u064A\u0629 \u0627\u0644\u0645\u062A\u0639\u062F\u062F\u0629", NOTES: "\u0645\u0644\u0627\u062D\u0638\u0627\u062A", REVIEW_PANE_ON_STARTUP: "\u062A\u0645\u0643\u064A\u0646 \u062C\u0632\u0621 \u0645\u0631\u0627\u062C\u0639\u0629 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0627\u062A \u0639\u0646\u062F \u0628\u062F\u0621 \u0627\u0644\u062A\u0634\u063A\u064A\u0644", TAGS_TO_REVIEW: "\u0648\u0633\u0648\u0645 \u0644\u0644\u0645\u0631\u0627\u062C\u0639\u0629", TAGS_TO_REVIEW_DESC: "#\u0623\u062F\u062E\u0644 \u0627\u0644\u0648\u0633\u0648\u0645 \u0645\u0641\u0635\u0648\u0644\u0629 \u0628\u0645\u0633\u0627\u0641\u0627\u062A \u0623\u0648 \u062E\u0637\u0648\u0637 \u062C\u062F\u064A\u062F\u0629 \u060C \u0623\u064A : \u0645\u0631\u0627\u062C\u0639\u0629# \u0648\u0633\u06452# \u0648\u0633\u06453", OPEN_RANDOM_NOTE: "\u0627\u0641\u062A\u062D \u0645\u0644\u0627\u062D\u0638\u0629 \u0639\u0634\u0648\u0627\u0626\u064A\u0629 \u0644\u0644\u0645\u0631\u0627\u062C\u0639\u0629", OPEN_RANDOM_NOTE_DESC: "(Pagerank) \u0639\u0646\u062F \u062A\u0639\u0637\u064A\u0644 \u0647\u0630\u0627 \u0627\u0644\u062E\u064A\u0627\u0631 \u060C\u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0627\u062A \u0633\u064A\u062A\u0645 \u062A\u0631\u062A\u064A\u0628\u064F\u0647\u0627 \u062D\u0633\u0628 \u0627\u0644\u0623\u0647\u0645\u064A\u0629", AUTO_NEXT_NOTE: "\u0627\u0641\u062A\u062D \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0629 \u0627\u0644\u062A\u0627\u0644\u064A\u0629 \u062A\u0644\u0642\u0627\u0626\u064A\u064B\u0627 \u0628\u0639\u062F \u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0629", DISABLE_FILE_MENU_REVIEW_OPTIONS: "\u062A\u0639\u0637\u064A\u0644 \u062E\u064A\u0627\u0631\u0627\u062A \u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0629 \u0641\u064A \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u0644\u0641\u0627\u062A \u060C \u0623\u064A \u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0629:\u0627\u0644\u0633\u0647\u0644 \u0627\u0644\u0635\u0639\u0628 \u0627\u0644\u062C\u064A\u062F", DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "\u0639\u0646\u062F \u062A\u063A\u064A\u064A\u0631 \u0647\u0630\u0627 \u0627\u0644\u062E\u064A\u0627\u0631 Obsidian \u0623\u0639\u062F \u062A\u0634\u063A\u064A\u0644 , command hotkeys. \u0628\u0639\u062F \u0627\u0644\u062A\u0639\u0637\u064A\u0644 \u060C \u064A\u0645\u0643\u0646\u0643 \u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0629 \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645", MAX_N_DAYS_REVIEW_QUEUE: "\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0639\u062F\u062F \u0627\u0644\u0623\u064A\u0627\u0645 \u0627\u0644\u062A\u064A \u064A\u062C\u0628 \u0639\u0631\u0636\u0647\u0627 \u0639\u0644\u0649 \u0627\u0644\u0644\u0648\u062D\u0629 \u0627\u0644\u064A\u0645\u0646\u0649", MIN_ONE_DAY: "\u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0639\u062F\u062F \u0627\u0644\u0623\u064A\u0627\u0645 1 \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644", VALID_NUMBER_WARNING: "\u064A\u0631\u062C\u0649 \u062A\u0642\u062F\u064A\u0645 \u0631\u0642\u0645 \u0635\u0627\u0644\u062D", UI_PREFERENCES: "\u062A\u0641\u0636\u064A\u0644\u0627\u062A \u0648\u0627\u062C\u0647\u0629 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645", INITIALLY_EXPAND_SUBDECKS_IN_TREE: "\u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0627\u0644\u0639\u0631\u0636 \u0627\u0644\u0634\u062C\u0631\u064A \u0644\u0644\u0631\u064F\u0632\u0645 \u0645\u0648\u0633\u0639 \u0628\u062D\u064A\u062B \u062A\u0637\u0647\u0631 \u0627\u0644\u0645\u0644\u0641\u0627\u062A \u0627\u0644\u0641\u0631\u0639\u064A\u0629 \u0643\u0644\u0647\u0627", INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: " \u0639\u0637\u0644 \u0647\u0630\u0627 \u0627\u0644\u062E\u064A\u0627\u0631 \u0644\u0637\u064A \u0627\u0644\u0631\u064F\u0632\u0645 \u0627\u0644\u0645\u062A\u062F\u0627\u062E\u0644\u0629 \u0641\u064A \u0646\u0641\u0633 \u0627\u0644\u0628\u0637\u0627\u0642\u0629 , \u0645\u0641\u064A\u062F \u0625\u0630\u0627 \u0643\u0627\u0646 \u0644\u062F\u064A\u0643 \u0628\u0637\u0627\u0642\u0627\u062A \u062A\u0646\u062A\u0645\u064A \u0625\u0644\u0649 \u0627\u0644\u0639\u062F\u064A\u062F \u0645\u0646 \u0627\u0644\u0631\u064F\u0632\u0645 \u0641\u064A \u0646\u0641\u0633 \u0627\u0644\u0645\u0644\u0641", ALGORITHM: "\u062E\u0648\u0627\u0631\u0632\u0645\u064A\u0629", CHECK_ALGORITHM_WIKI: 'algorithm implementation :\u0644\u0645\u0632\u064A\u062F \u0645\u0646 \u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062A \u062A\u062D\u0642\u0642 \u0645\u0646', BASE_EASE: "\u0633\u0647\u0648\u0644\u0629 \u0627\u0644\u0642\u0627\u0639\u062F\u0629", BASE_EASE_DESC: "\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u062F\u0646\u0649 = 130 \u060C \u0648\u064A\u0641\u0636\u0644 \u062D\u0648\u0627\u0644\u064A 250.", BASE_EASE_MIN_WARNING: "\u064A\u062C\u0628 \u0623\u0646 \u062A\u0643\u0648\u0646 \u0633\u0647\u0648\u0644\u0629 \u0627\u0644\u0642\u0627\u0639\u062F\u0629 130 \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644.", LAPSE_INTERVAL_CHANGE: "\u0627\u0644\u0641\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064A \u064A\u062A\u063A\u064A\u0631 \u0639\u0646\u062F \u0645\u0631\u0627\u062C\u0639\u0629 \u0628\u0637\u0627\u0642\u0629/\u0645\u0644\u0627\u062D\u0638\u0629 \u0635\u0639\u0628\u0629", LAPSE_INTERVAL_CHANGE_DESC: "newInterval = oldInterval * intervalChange / 100.", EASY_BONUS: "\u0645\u0643\u0627\u0641\u0623\u0629 \u0633\u0647\u0644\u0629", EASY_BONUS_DESC: "\u062A\u062A\u064A\u062D \u0644\u0643 \u0627\u0644\u0645\u0643\u0627\u0641\u0623\u0629 \u0627\u0644\u0633\u0647\u0644\u0629 \u0636\u0628\u0637 \u0627\u0644\u0641\u0631\u0642 \u0641\u064A \u0627\u0644\u0641\u0648\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064A\u0629 \u0628\u064A\u0646 \u0627\u0644\u0631\u062F \u0627\u0644\u062C\u064A\u062F \u0648\u0627\u0644\u0633\u0647\u0644 \u0639\u0644\u0649 \u0628\u0637\u0627\u0642\u0629/\u0645\u0644\u0627\u062D\u0638\u0629 (\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u062F\u0646\u0649 = 100 \u066A).", EASY_BONUS_MIN_WARNING: "\u064A\u062C\u0628 \u0623\u0646 \u062A\u0643\u0648\u0646 \u0627\u0644\u0645\u0643\u0627\u0641\u0623\u0629 \u0627\u0644\u0633\u0647\u0644\u0629 100 \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644.", MAX_INTERVAL: "Maximum interval in days", MAX_INTERVAL_DESC: "\u064A\u062A\u064A\u062D \u0644\u0643 \u0648\u0636\u0639 \u062D\u062F \u0623\u0639\u0644\u0649 \u0644\u0644\u0641\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064A (\u0627\u0641\u062A\u0631\u0627\u0636\u064A = 100 \u0639\u0627\u0645).", MAX_INTERVAL_MIN_WARNING: "\u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0644\u0641\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064A \u0644\u0645\u062F\u0629 \u064A\u0648\u0645 \u0648\u0627\u062D\u062F \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644.", MAX_LINK_CONTRIB: "\u0623\u0642\u0635\u0649 \u0645\u0633\u0627\u0647\u0645\u0629 \u0627\u0631\u062A\u0628\u0627\u0637", MAX_LINK_CONTRIB_DESC: "\u0623\u0642\u0635\u0649 \u0645\u0633\u0627\u0647\u0645\u0629 \u0644\u0644\u0633\u0647\u0648\u0644\u0629 \u0627\u0644\u0645\u0631\u062C\u062D\u0629 \u0644\u0644\u0645\u0644\u0627\u062D\u0638\u0627\u062A \u0627\u0644\u0645\u0631\u062A\u0628\u0637\u0629 \u0628\u0627\u0644\u0633\u0647\u0648\u0644\u0629 \u0627\u0644\u0623\u0648\u0644\u064A\u0629.", LOGGING: "\u062A\u0633\u062C\u064A\u0644", DISPLAY_DEBUG_INFO: "\u0639\u0631\u0636 \u0645\u0639\u0644\u0648\u0645\u0627\u062A \u0627\u0644\u062A\u0635\u062D\u064A\u062D \u0639\u0644\u0649 \u0648\u062D\u062F\u0629 \u062A\u062D\u0643\u0645 \u0627\u0644\u0645\u0637\u0648\u0631\u061F", // sidebar.ts NOTES_REVIEW_QUEUE: "\u0645\u0644\u0627\u062D\u0638\u0627\u062A \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0629", CLOSE: "\u0623\u063A\u0644\u0642", NEW: "\u062C\u062F\u064A\u062F", YESTERDAY: "\u0627\u0644\u0628\u0627\u0631\u062D\u0629", TODAY: "\u0627\u0644\u064A\u0648\u0645", TOMORROW: "\u0627\u0644\u063A\u062F", // stats-modal.tsx STATS_TITLE: "\u0625\u062D\u0635\u0627\u0626\u064A\u0627\u062A", MONTH: "\u0634\u0647\u0631", QUARTER: "\u0631\u0628\u0639 \u0627\u0644\u0633\u0646\u0629", YEAR: "\u0633\u0646\u0629", LIFETIME: "", FORECAST: "", FORECAST_DESC: "\u0639\u062F\u062F \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0645\u0633\u062A\u062D\u0642\u0629 \u0641\u064A \u0627\u0644\u0645\u0633\u062A\u0642\u0628\u0644", SCHEDULED: "\u0627\u0644\u0645\u0642\u0631\u0631", DAYS: "\u0623\u064A\u0627\u0645", NUMBER_OF_CARDS: "\u0639\u062F\u062F \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A", REVIEWS_PER_DAY: "\u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0627\u062A/\u0627\u0644\u064A\u0648\u0645 ${avg} :\u0645\u062A\u0648\u0633\u0637", INTERVALS: "\u0641\u0648\u0627\u0635\u0644 \u0632\u0645\u0646\u064A\u0629", INTERVALS_DESC: "\u0627\u0644\u062A\u0623\u062E\u064A\u0631 \u062D\u062A\u0649 \u064A\u062A\u0645 \u0639\u0631\u0636 \u0627\u0644\u0645\u0631\u0627\u062C\u0639\u0627\u062A \u0645\u0631\u0629 \u0623\u062E\u0631\u0649", COUNT: "\u0639\u062F\u062F", INTERVALS_SUMMARY: "${longest} : \u0623\u0637\u0648\u0644 \u0641\u0627\u0635\u0644 \u0632\u0645\u0646\u064A ,${avg} :\u0645\u062A\u0648\u0633\u0637 \u0627\u0644\u0641\u0627\u0635\u0644 \u0627\u0644\u0632\u0645\u0646\u064A", EASES: "\u0627\u0644\u0633\u0647\u0648\u0644\u0629", EASES_SUMMARY: "${avgEase} :\u0645\u062A\u0648\u0633\u0637 \u0627\u0644\u0633\u0647\u0648\u0644\u0629", CARD_TYPES: "\u0623\u0646\u0648\u0627\u0639 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A", CARD_TYPES_DESC: "\u0648\u0647\u0630\u0627 \u064A\u0634\u0645\u0644 \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A \u0627\u0644\u0645\u062E\u0641\u064A\u0629 \u0643\u0630\u0644\u0643 \u060C \u0625\u0646 \u0648\u062C\u062F\u062A", CARD_TYPE_NEW: "\u062C\u062F\u064A\u062F\u0629", CARD_TYPE_YOUNG: "\u0635\u063A\u064A\u0631\u0629", CARD_TYPE_MATURE: "\u0646\u0627\u0636\u062C\u0629", CARD_TYPES_SUMMARY: " ${totalCardsCount} :\u0625\u062C\u0645\u0627\u0644\u064A \u0639\u062F\u062F \u0627\u0644\u0628\u0637\u0627\u0642\u0627\u062A" }; // src/lang/locale/cz.ts var cz_default = { // flashcard-modal.tsx DECKS: "Bal\xED\u010Dky", DUE_CARDS: "Karti\u010Dky po term\xEDnu", NEW_CARDS: "Nov\xE9 karti\u010Dky", TOTAL_CARDS: "Karti\u010Dek celkem", BACK: "Back", SKIP: "Skip", EDIT_CARD: "Edit Card", RESET_CARD_PROGRESS: "Vynulovat pokrok karti\u010Dky", HARD: "Te\u017Ek\xE9", GOOD: "Dobr\xE9", EASY: "Jednoduch\xE9", SHOW_ANSWER: "Uk\xE1zat odpov\u011B\u010F", CARD_PROGRESS_RESET: "Pokrok karti\u010Dky byl vynulov\xE1n.", SAVE: "Save", CANCEL: "Cancel", NO_INPUT: "No input provided.", CURRENT_EASE_HELP_TEXT: "Current Ease: ", CURRENT_INTERVAL_HELP_TEXT: "Current Interval: ", CARD_GENERATED_FROM: "Generated from: ${notePath}", // main.ts OPEN_NOTE_FOR_REVIEW: "Otev\u0159\xEDt pozn\xE1mku k revizi", REVIEW_CARDS: "Pozn\xE1mek k revizi", REVIEW_EASY_FILE_MENU: "Revize: Jednoduch\xE9", REVIEW_GOOD_FILE_MENU: "Revize: Dobr\xE9", REVIEW_HARD_FILE_MENU: "Revize: T\u011B\u017Ek\xE9", REVIEW_NOTE_EASY_CMD: "Ozna\u010Dit pozn\xE1mku jako jednoduchou", REVIEW_NOTE_GOOD_CMD: "Ozna\u010Dit pozn\xE1mku jako dobrou", REVIEW_NOTE_HARD_CMD: "Ozna\u010Dit pozn\xE1mku jako te\u017Ekou", REVIEW_ALL_CARDS: "Revidovat karti\u010Dky ve v\u0161ech pozn\xE1mk\xE1ch", CRAM_ALL_CARDS: "Select a deck to cram", REVIEW_CARDS_IN_NOTE: "Revidovat karti\u010Dky v t\xE9to pozn\xE1mce.", CRAM_CARDS_IN_NOTE: "Cram karti\u010Dky v t\xE9to pozn\xE1mce.", VIEW_STATS: "Uk\xE1zat statistiky", STATUS_BAR: "Revize: ${dueNotesCount} pozn\xE1mek, ${dueFlashcardsCount} karti\u010Dek po term\xEDnu", SYNC_TIME_TAKEN: "Synchronizace trvala ${t}ms", NOTE_IN_IGNORED_FOLDER: "Pozn\xE1mka je ulo\u017Eena v ignorovan\xE9 slo\u017Ece (zkontrolujte nastaven\xED).", PLEASE_TAG_NOTE: "Pros\xEDm ozna\u010Dne pozn\xE1mku odpov\xEDdaj\xEDc\xEDm tagem pro revizi (v nastaven\xED).", RESPONSE_RECEIVED: "Odpov\u011B\u010F p\u0159ijata.", NO_DECK_EXISTS: "Neexistuje \u017E\xE1dn\xFD bal\xED\u010Dek pro ${deckName}", ALL_CAUGHT_UP: "V\u0161e zrevidov\xE1no", // scheduling.ts DAYS_STR_IVL: "${interval} den/dn\xED", MONTHS_STR_IVL: "${interval} m\u011Bs\xEDc(\u016F)", YEARS_STR_IVL: "${interval} rok(\u016F)", DAYS_STR_IVL_MOBILE: "${interval}d", MONTHS_STR_IVL_MOBILE: "${interval}m", YEARS_STR_IVL_MOBILE: "${interval}r", // settings.ts SETTINGS_HEADER: "Spaced Repetition Plugin - Nastaven\xED", CHECK_WIKI: 'Pro v\xEDce informac\xED jd\u011Bte na wiki.', FOLDERS_TO_IGNORE: "Ignorovan\xE9 slo\u017Eky", FOLDERS_TO_IGNORE_DESC: "Zadejte cesty ke slo\u017Ek\xE1m odd\u011Blen\xE9 od\u0159\xE1dkov\xE1n\xEDm nap\u0159\xEDkad. \u0160ablony Meta/Scripts", FLASHCARDS: "Karti\u010Dky", FLASHCARD_EASY_LABEL: "Easy Button Text", FLASHCARD_GOOD_LABEL: "Good Button Text", FLASHCARD_HARD_LABEL: "Hard Button Text", FLASHCARD_EASY_DESC: 'Customize the label for the "Easy" Button', FLASHCARD_GOOD_DESC: 'Customize the label for the "Good" Button', FLASHCARD_HARD_DESC: 'Customize the label for the "Hard" Button', FLASHCARD_TAGS: "Tag pro karti\u010Dky", FLASHCARD_TAGS_DESC: "Zadete tagy ood\u011Blen\xE9 mezerou nebo od\u0159\xE1dkov\xE1n\xEDm nap\u0159\xEDklad. #karti\u010Dky #bal\xED\u010Dke2 #bal\xED\u010Dek3.", CONVERT_FOLDERS_TO_DECKS: "P\u0159ev\xE9st slo\u017Eky na bal\xED\u010Dky a podbal\xED\u010Dky?", CONVERT_FOLDERS_TO_DECKS_DESC: "Toto je alternativa k tag\u016Fm karti\u010Dek viz nastaven\xED v\xFD\u0161e.", INLINE_SCHEDULING_COMMENTS: "Ulo\u017Eit pl\xE1novac\xED koment\xE1\u0159 na stejn\xFD \u0159\xE1dek jako posledn\xED polo\u017Eka karti\u010Dky?", INLINE_SCHEDULING_COMMENTS_DESC: "Zapnut\xED t\xE9to volby zp\u016Fsob\xED, \u017Ee HTML koment\xE1\u0159e nebudou rozb\xEDjet form\xE1tov\xE1n\xED list\u016F.", BURY_SIBLINGS_TILL_NEXT_DAY: "Odlo\u017Eit p\u0159\xEDbuzn\xE9 karti\u010Dky na dal\u0161\xED den?", BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "P\u0159\xEDbuzn\xE9 karti\u010Dky jsou karti\u010Dky generovan\xE9 z textu stejn\xE9 pozn\xE1mky nap\u0159\xEDklad cloze smaz\xE1n\xED", SHOW_CARD_CONTEXT: "Uk\xE1zat kontext v karti\u010Dce?", SHOW_CARD_CONTEXT_DESC: "nap\u0159\xEDklad Titulek > Nadpis1 > Podnadpis > ... > Podnadpis", CARD_MODAL_HEIGHT_PERCENT: "V\xFD\u0161ka karti\u010Dek v procentech", CARD_MODAL_SIZE_PERCENT_DESC: "M\u011Blo by b\xFDt nastaveno na 100% na mobilu nebo kdy\u017E pou\u017E\xEDv\xE1te velk\xE9 obr\xE1zky", RESET_DEFAULT: "Resetovat v\xFDchoz\xED nastaven\xED", CARD_MODAL_WIDTH_PERCENT: "\u0160\xED\u0159ka karti\u010Dek v procentech", RANDOMIZE_CARD_ORDER: "N\xE1hodn\u011B zm\u011Bnit po\u0159ad\xED karti\u010Dek b\u011Bhem revize?", DISABLE_CLOZE_CARDS: "Vypnout cloze karti\u010Dky?", CONVERT_HIGHLIGHTS_TO_CLOZES: "P\u0159ev\xE9st ==zv\xFDrazn\u011Bn\xED== na clozes?", CONVERT_BOLD_TEXT_TO_CLOZES: "P\u0159ev\xE9st **tu\u010Dn\xFD text** na clozes?", CONVERT_CURLY_BRACKETS_TO_CLOZES: "P\u0159ev\xE9st {{slo\u017Een\xE9 z\xE1vorky}} na clozes?", INLINE_CARDS_SEPARATOR: "Odd\u011Blova\u010D pro inline karti\u010Dky", FIX_SEPARATORS_MANUALLY_WARNING: "Pozor. Jakmile toto zm\u011Bn\xEDte, budete muset ru\u010Dn\u011B upravit v\u0161echny existuj\xEDc\xED karti\u010Dky.", INLINE_REVERSED_CARDS_SEPARATOR: "Odd\u011Blova\u010D pro oto\u010Den\xE9 inline karti\u010Dky", MULTILINE_CARDS_SEPARATOR: "Odd\u011Blova\u010D pro v\xEDce\u0159\xE1dkov\xE9 karti\u010Dky", MULTILINE_REVERSED_CARDS_SEPARATOR: "Odd\u011Blova\u010D pro v\xEDce\u0159\xE1dkove oto\u010Den\xE9 karti\u010Dky", NOTES: "Pozn\xE1mky", REVIEW_PANE_ON_STARTUP: "Enable note review pane on startup", TAGS_TO_REVIEW: "Tag pro revizi", TAGS_TO_REVIEW_DESC: "Zadejte tagy odd\u011Blen\xE9 mezerami nebo od\u0159\xE1dkov\xE1n\xEDm nap\u0159\xEDklad #review #tag2 #tag3.", OPEN_RANDOM_NOTE: "Otev\u0159\xEDt n\xE1hodnou pozn\xE1mku pro revizi", OPEN_RANDOM_NOTE_DESC: "Pokud toto vypnete, pozn\xE1mky budou \u0159azeny dle d\u016Fle\u017Eitosti (PageRank).", AUTO_NEXT_NOTE: "Otev\u0159\xEDt automaticky dal\u0161\xED pozn\xE1mku po dokon\u010Den\xED revize", DISABLE_FILE_MENU_REVIEW_OPTIONS: "Vypnout volby revize v menu souboru nap\u0159\xEDklad 'Revize: Jednoduch\xE9'", DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "Po vypnut\xED m\u016F\u017Eete pou\u017E\xEDvat kl\xE1vesov\xE9 zkratky. Restartujte Obsidian po zm\u011Bn\u011B nastaven\xED.", MAX_N_DAYS_REVIEW_QUEUE: "Maxim\xE1ln\xED po\u010Det dn\xED zobrazen\xFDch v prav\xE9m panelu", MIN_ONE_DAY: "Po\u010Det dn\xED mus\xED b\xFDt minim\xE1ln\u011B 1.", VALID_NUMBER_WARNING: "Pros\xEDm zadejte validn\xED \u010D\xEDslo.", UI_PREFERENCES: "P\u0159edvolby u\u017Eivatelsk\xE9ho rozhran\xED", INITIALLY_EXPAND_SUBDECKS_IN_TREE: "Stromy bal\xED\u010Dky by m\u011Bly b\xFDt zpo\u010D\xE1tku zobrazeny jako rozbalen\xE9", INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "Vypn\u011Bte toto, chcete-li sbalit vno\u0159en\xE9 bal\xED\u010Dky na stejn\xE9 kart\u011B. To je u\u017Eite\u010Dn\xE9, pokud m\xE1te karti\u010Dky, kter\xE9 pat\u0159\xED k mnoha bal\xED\u010Dk\u016Fm ve stejn\xE9m souboru.", ALGORITHM: "Algoritmus", CHECK_ALGORITHM_WIKI: 'Pro v\xEDce informac\xED jd\u011Bte na popis algoritmu.', BASE_EASE: "Z\xE1kladn\xED slo\u017Eitost", BASE_EASE_DESC: "minimum = 130, nejl\xE9pe p\u0159ibli\u017En\u011B 250.", BASE_EASE_MIN_WARNING: "Z\xE1kladn\xED slo\u017Eitost mus\xED b\xFDt minim\xE1ln\u011B 130.", LAPSE_INTERVAL_CHANGE: "Zm\u011Bna intervalu pokud karti\u010Dku/pozn\xE1mku ozna\u010D\xEDte jako slo\u017Eitou", LAPSE_INTERVAL_CHANGE_DESC: "nov\xFD_inteval = star\xFD_interval * zm\u011Bna_intevalu / 100.", EASY_BONUS: "Bonus pro jednoduch\xE9", EASY_BONUS_DESC: "Tento bonus umo\u017E\u0148uje nastavit rozd\xEDl intervalu mezi jednoduch\xFDmi a dobr\xFDmi karti\u010Dkami/pozn\xE1mkami (minimum = 100%).", EASY_BONUS_MIN_WARNING: "Bonus pro jednoduchost mus\xED b\xFDt minim\xE1ln\u011B 100.", MAX_INTERVAL: "Maximum interval in days", MAX_INTERVAL_DESC: "Umo\u017E\u0148uje nastavit horn\xED limit pro interval (defaultn\u011B = 100 let).", MAX_INTERVAL_MIN_WARNING: "Maxim\xE1ln\xED interval mus\xED b\xFDt alespo\u0148 1 den.", MAX_LINK_CONTRIB: "Maxim\xE1ln\xED p\u0159\xEDsp\u011Bv\u011Bk prolinkov\xE1n\xED", MAX_LINK_CONTRIB_DESC: "Maxim\xE1ln\xED p\u0159\xEDsp\u011Bvek v\xE1\u017Een\xE9 slo\u017Eitosti prolinkovan\xFDch pozn\xE1mek pou\u017Eit\xFD pro ur\u010Den\xED po\u010D\xE1te\u010Dn\xED slo\u017Eitosti.", LOGGING: "Zaznamen\xE1v\xE1m", DISPLAY_DEBUG_INFO: "Zobrazit informace pro lad\u011Bn\xED na v\xFDvoj\xE1\u0159sk\xE9 konzoli?", // sidebar.ts NOTES_REVIEW_QUEUE: "Fronta pozn\xE1mek k revizi", CLOSE: "Uzav\u0159en\xE9", NEW: "Nov\xE9", YESTERDAY: "V\u010Dera", TODAY: "Dnes", TOMORROW: "Z\xEDtra", // stats-modal.tsx STATS_TITLE: "Statistiky", MONTH: "M\u011Bs\xEDc", QUARTER: "\u010Ctvrtlet\xED", YEAR: "Rok", LIFETIME: "Celkov\u011B", FORECAST: "P\u0159edpov\u011B\u010F", FORECAST_DESC: "Celkov\xFD po\u010Det karti\u010Dek, kter\xFDm vypr\u0161\xED term\xEDn", SCHEDULED: "Napl\xE1nov\xE1no", DAYS: "Dn\xED", NUMBER_OF_CARDS: "Po\u010Det karti\u010Dek", REVIEWS_PER_DAY: "Pr\u016Fm\u011Br: ${avg} revize/den", INTERVALS: "Intervaly", INTERVALS_DESC: "Doba, za kterou bude znovu zobrazeno k revize", COUNT: "Po\u010Det", INTERVALS_SUMMARY: "Pr\u016Fm\u011Brn\xFD interval: ${avg}, Nejdel\u0161\xED interval: ${longest}", EASES: "Slo\u017Eitost", EASES_SUMMARY: "Pr\u016Fm\u011Brn\xE1 slo\u017Eitost: ${avgEase}", CARD_TYPES: "Typy karti\u010Dek", CARD_TYPES_DESC: "Obsahuje i odlo\u017Een\xE9 karti\u010Dky (pokud existuj\xED)", CARD_TYPE_NEW: "Nov\xE1", CARD_TYPE_YOUNG: "Mlad\xE1", CARD_TYPE_MATURE: "Dosp\u011Bl\xE1", CARD_TYPES_SUMMARY: "Karti\u010Dek celkem: ${totalCardsCount}" }; // src/lang/locale/bn.ts var bn_default = {}; // src/lang/locale/da.ts var da_default = {}; // src/lang/locale/de.ts var de_default = { // flashcard-modal.tsx DECKS: "Stapel", DUE_CARDS: "Anstehende Karten", NEW_CARDS: "Neue Karten", TOTAL_CARDS: "Alle Karten", BACK: "Back", SKIP: "Skip", EDIT_CARD: "Edit Card", RESET_CARD_PROGRESS: "Kartenfortschritt zur\xFCcksetzten", HARD: "Schwer", GOOD: "Gut", EASY: "Einfach", SHOW_ANSWER: "Zeige Antwort", CARD_PROGRESS_RESET: "Kartenfortschritt wurde zur\xFCckgesetzt.", SAVE: "Save", CANCEL: "Cancel", NO_INPUT: "No input provided.", CURRENT_EASE_HELP_TEXT: "Current Ease: ", CURRENT_INTERVAL_HELP_TEXT: "Current Interval: ", CARD_GENERATED_FROM: "Generated from: ${notePath}", // main.ts OPEN_NOTE_FOR_REVIEW: "Notiz zur Wiederholung \xF6ffnen", REVIEW_CARDS: "Lernkarten wiederholen", REVIEW_EASY_FILE_MENU: "Notiz abschliessen als: Einfach", REVIEW_GOOD_FILE_MENU: "Notiz abschliessen als: Gut", REVIEW_HARD_FILE_MENU: "Notiz abschliessen als: Schwer", REVIEW_NOTE_EASY_CMD: "Notiz abschliessen als: Einfach", REVIEW_NOTE_GOOD_CMD: "Notiz abschliessen als: Gut", REVIEW_NOTE_HARD_CMD: "Notiz abschliessen als: Schwer", REVIEW_ALL_CARDS: "Alle Lernkarten wiederholen", CRAM_ALL_CARDS: "Select a deck to cram", REVIEW_CARDS_IN_NOTE: "Lernkarten in dieser Notiz wiederholen", CRAM_CARDS_IN_NOTE: "Lernkarten in dieser Notiz pauken.", VIEW_STATS: "Statistiken anzeigen", STATUS_BAR: "Wiederholung: ${dueNotesCount} Notiz(en), ${dueFlashcardsCount} Karte(n) anstehend", SYNC_TIME_TAKEN: "Sync dauerte ${t}ms", NOTE_IN_IGNORED_FOLDER: "Notiz befindet sich in einem ausgeschlossenen Ordner (siehe Einstellungen).", PLEASE_TAG_NOTE: "Bitte die Notiz f\xFCr Wiederholungen entsprechend taggen (siehe Einstellungen).", RESPONSE_RECEIVED: "Antwort erhalten.", NO_DECK_EXISTS: "Kein Stapel f\xFCr ${deckName} gefunden.", ALL_CAUGHT_UP: "Yuhu! Alles geschafft! :D.", // scheduling.ts DAYS_STR_IVL: "${interval} Tag(e)", MONTHS_STR_IVL: "${interval} Monat(e)", YEARS_STR_IVL: "${interval} Jahr(e)", DAYS_STR_IVL_MOBILE: "${interval}d", MONTHS_STR_IVL_MOBILE: "${interval}m", YEARS_STR_IVL_MOBILE: "${interval}y", // settings.ts SETTINGS_HEADER: "Spaced Repetition Plugin - Einstellungen", CHECK_WIKI: 'Weitere Informationen gibt es im Wiki (english).', FOLDERS_TO_IGNORE: "Ausgeschlossene Ordner", FOLDERS_TO_IGNORE_DESC: "Mehrere Ordner mit Zeilenumbr\xFCchen getrennt angeben. Bsp. OrdnerA[Zeilenumbruch]OrdnerB/Unterordner", FLASHCARDS: "Lernkarten", FLASHCARD_EASY_LABEL: "Easy Button Text", FLASHCARD_GOOD_LABEL: "Good Button Text", FLASHCARD_HARD_LABEL: "Hard Button Text", FLASHCARD_EASY_DESC: 'Customize the label for the "Easy" Button', FLASHCARD_GOOD_DESC: 'Customize the label for the "Good" Button', FLASHCARD_HARD_DESC: 'Customize the label for the "Hard" Button', FLASHCARD_TAGS: "Lernkarten Tags", FLASHCARD_TAGS_DESC: "Mehrere Tags mit Leerzeichen oder Zeilenumbr\xFCchen getrennt angeben. Bsp. #karte #stapel2 #stapel3.", CONVERT_FOLDERS_TO_DECKS: "Ordner in Stapel und Substapel umwandeln?", CONVERT_FOLDERS_TO_DECKS_DESC: 'Eine Alternative zur oberen "Lernkarten Tags" Option.', INLINE_SCHEDULING_COMMENTS: "Den Fortschritt in der gleichen Zeile wie die letzte Zeile einer Lernkartei speichern?", INLINE_SCHEDULING_COMMENTS_DESC: "Wenn aktiviert, wird der HTML Kommentar die umgebende Liste nicht aufbrechen.", BURY_SIBLINGS_TILL_NEXT_DAY: "Verwandte Karten auf den n\xE4chsten Tag verlegen?", BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "Verwandte Karten sind aus der gleichen Karte generiert worden (z.B. L\xFCckentextkarten oder beidseitige Karten).", SHOW_CARD_CONTEXT: "Kontext in den Karten anzeigen?", SHOW_CARD_CONTEXT_DESC: "Bsp. Titel > \xDCberschrift 1 > Sektion > ... > Untersektion", CARD_MODAL_HEIGHT_PERCENT: "H\xF6he der Lernkartei in Prozent", CARD_MODAL_SIZE_PERCENT_DESC: "Auf kleinen Bildschirmen (z.B. Smartphones) oder bei sehr grossen Bildern sollte dieser Wert auf 100% gesetzt werden.", RESET_DEFAULT: "Standardeinstellung wiederherstellen", CARD_MODAL_WIDTH_PERCENT: "Breite einer Lernkarte in Prozent", RANDOMIZE_CARD_ORDER: "W\xE4hrend der Wiederhoung die Reihenfolge zuf\xE4llig mischen?", DISABLE_CLOZE_CARDS: "L\xFCckentextkarten (cloze deletions) deaktivieren?", CONVERT_HIGHLIGHTS_TO_CLOZES: "==Hervorgehobenen== Text in L\xFCckentextkarten umwandeln?", CONVERT_BOLD_TEXT_TO_CLOZES: "**Fettgedruckten** Text in L\xFCckentextkarten umwandeln?", CONVERT_CURLY_BRACKETS_TO_CLOZES: "{{Geschweifte Klammern}} Text in L\xFCckentextkarten umwandeln?", INLINE_CARDS_SEPARATOR: "Trennzeichen f\xFCr einzeilige Lernkarten", FIX_SEPARATORS_MANUALLY_WARNING: "Wenn diese Einstellung ge\xE4ndert wird, dann m\xFCssen die entsprechenden Lernkarten manuell angepasst werden.", INLINE_REVERSED_CARDS_SEPARATOR: "Trennzeichen f\xFCr einzeilige beidseitige Lernkarten", MULTILINE_CARDS_SEPARATOR: "Trennzeichen f\xFCr mehrzeilige Lernkarten", MULTILINE_REVERSED_CARDS_SEPARATOR: "Trennzeichen f\xFCr mehrzeilige beidseitige Lernkarten", NOTES: "Notizen", REVIEW_PANE_ON_STARTUP: "Enable note review pane on startup", TAGS_TO_REVIEW: "Zu wiederholende Tags", TAGS_TO_REVIEW_DESC: "Mehrere Tags k\xF6nnen mit Leerzeichen oder Zeilenumbr\xFCchen getrennt angegeben werden. Bsp. #karte #tag1 #tag2.", OPEN_RANDOM_NOTE: "Zuf\xE4llige Karten wiederholen", OPEN_RANDOM_NOTE_DESC: "Wenn dies deaktiviert wird, dann werden die Notizen nach Wichtigkeit wiederholt (PageRank).", AUTO_NEXT_NOTE: "Nach einer Wiederholung automatisch die n\xE4chste Karte \xF6ffnen", DISABLE_FILE_MENU_REVIEW_OPTIONS: "Optionen zur Wiederholung im Men\xFC einer Datei deaktivieren. Bsp. Wiederholen: Einfach Gut Schwer", DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "Nach dem Deaktivieren k\xF6nnen die Tastenk\xFCrzel zur Wiederholung verwendet werden. Obsidian muss nach einer \xC4nderung neu geladen weren.", MAX_N_DAYS_REVIEW_QUEUE: "Maximale Anzahl anstehender Notizen, die im rechten Fensterbereich angezeigt werden", MIN_ONE_DAY: "Anzahl der Tage muss mindestens 1 sein.", VALID_NUMBER_WARNING: "Bitte eine g\xFCltige Zahl eingeben.", UI_PREFERENCES: "Einstellungen der Benutzeroberfl\xE4che", INITIALLY_EXPAND_SUBDECKS_IN_TREE: "Deckb\xE4ume sollten anf\xE4nglich erweitert angezeigt werden", INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "Deaktivieren Sie dies, um verschachtelte Decks in derselben Karte zu reduzieren. N\xFCtzlich, wenn Sie Karten haben, die zu vielen Decks in derselben Datei geh\xF6ren.", ALGORITHM: "Algorithmus", CHECK_ALGORITHM_WIKI: 'Weiterf\xFChrende Informationen: Implementierung des Algorithmus (english).', BASE_EASE: "Basis der Einfachheit", BASE_EASE_DESC: "Minimum ist 130. Empfohlen wird ca. 250.", BASE_EASE_MIN_WARNING: "Basis der Einfachheit muss mindestens 130 sein.", LAPSE_INTERVAL_CHANGE: "Anpassungsfaktor des Intervalls wenn eine Notiz / Karte 'Schwer' abgeschlossen wird", LAPSE_INTERVAL_CHANGE_DESC: "neuesIntervall = altesIntervall * anpassungsfaktor / 100.", EASY_BONUS: "Einfachheit-Bonus", EASY_BONUS_DESC: "Der Einfachheit-Bonus gibt an um welchen Faktor (in Prozent) das Intervall l\xE4nger sein soll, wenn eine Notiz / Karte 'Einfach' statt 'Gut' abgeschlossen wird. Minimum ist 100%.", EASY_BONUS_MIN_WARNING: "Der Einfachheit-Bonus muss mindestens 100 sein.", MAX_INTERVAL: "Maximum interval in days", MAX_INTERVAL_DESC: "Das maximale Intervall (in Tagen) f\xFCr Wiederholungen. Standard sind 100 Jahre.", MAX_INTERVAL_MIN_WARNING: "Das maximale Interall muss mindestens ein Tag sein.", MAX_LINK_CONTRIB: "Maximaler Einfluss von Links", MAX_LINK_CONTRIB_DESC: "Maximaler Einfluss der Einfachheiten verlinkter Notizen zur gewichteten initialen Einfachheit einer neuen Lernkarte.", LOGGING: "Logging", DISPLAY_DEBUG_INFO: "Informationen zum Debugging in der Entwicklerkonsole anzeigen?", // sidebar.ts NOTES_REVIEW_QUEUE: "Anstehende Notizen zur Wiederholung", CLOSE: "Schliessen", NEW: "Neu", YESTERDAY: "Gestern", TODAY: "Heute", TOMORROW: "Morgen", // stats-modal.tsx STATS_TITLE: "Statistiken", MONTH: "Month", QUARTER: "Quarter", YEAR: "Year", LIFETIME: "Lifetime", FORECAST: "Prognose", FORECAST_DESC: "Anzahl der k\xFCnftig anstehenden Karten", SCHEDULED: "Anstehend", DAYS: "Tage", NUMBER_OF_CARDS: "Anzahl der Karten", REVIEWS_PER_DAY: "Durchschnitt: ${avg} Wiederholungen/Tag", INTERVALS: "Intervalle", INTERVALS_DESC: "Intervalle bis Wiederholungen anstehen", COUNT: "Anzahl", INTERVALS_SUMMARY: "Durchschnittliches Intervall: ${avg}, L\xE4ngstes Intervall: ${longest}", EASES: "Einfachheit", EASES_SUMMARY: "Durchschnittliche Einfachheit: ${avgEase}", CARD_TYPES: "Kategorisierung", CARD_TYPES_DESC: "Verlegte Karten eingeschlossen", CARD_TYPE_NEW: "Neu", CARD_TYPE_YOUNG: "Jung", CARD_TYPE_MATURE: "Ausgereift", CARD_TYPES_SUMMARY: "Insgesamt ${totalCardsCount} Karten" }; // src/lang/locale/en.ts var en_default = { // flashcard-modal.tsx DECKS: "Decks", DUE_CARDS: "Due Cards", NEW_CARDS: "New Cards", TOTAL_CARDS: "Total Cards", BACK: "Back", SKIP: "Skip", EDIT_CARD: "Edit Card", RESET_CARD_PROGRESS: "Reset card's progress", HARD: "Hard", GOOD: "Good", EASY: "Easy", SHOW_ANSWER: "Show Answer", CARD_PROGRESS_RESET: "Card's progress has been reset.", SAVE: "Save", CANCEL: "Cancel", NO_INPUT: "No input provided.", CURRENT_EASE_HELP_TEXT: "Current Ease: ", CURRENT_INTERVAL_HELP_TEXT: "Current Interval: ", CARD_GENERATED_FROM: "Generated from: ${notePath}", // main.ts OPEN_NOTE_FOR_REVIEW: "Open a note for review", REVIEW_CARDS: "Review flashcards", REVIEW_EASY_FILE_MENU: "Review: Easy", REVIEW_GOOD_FILE_MENU: "Review: Good", REVIEW_HARD_FILE_MENU: "Review: Hard", REVIEW_NOTE_EASY_CMD: "Review note as easy", REVIEW_NOTE_GOOD_CMD: "Review note as good", REVIEW_NOTE_HARD_CMD: "Review note as hard", CRAM_ALL_CARDS: "Select a deck to cram", REVIEW_ALL_CARDS: "Review flashcards from all notes", REVIEW_CARDS_IN_NOTE: "Review flashcards in this note", CRAM_CARDS_IN_NOTE: "Cram flashcards in this note", VIEW_STATS: "View statistics", STATUS_BAR: "Review: ${dueNotesCount} note(s), ${dueFlashcardsCount} card(s) due", SYNC_TIME_TAKEN: "Sync took ${t}ms", NOTE_IN_IGNORED_FOLDER: "Note is saved under ignored folder (check settings).", PLEASE_TAG_NOTE: "Please tag the note appropriately for reviewing (in settings).", RESPONSE_RECEIVED: "Response received.", NO_DECK_EXISTS: "No deck exists for ${deckName}", ALL_CAUGHT_UP: "You're all caught up now :D.", // scheduling.ts DAYS_STR_IVL: "${interval} day(s)", MONTHS_STR_IVL: "${interval} month(s)", YEARS_STR_IVL: "${interval} year(s)", DAYS_STR_IVL_MOBILE: "${interval}d", MONTHS_STR_IVL_MOBILE: "${interval}m", YEARS_STR_IVL_MOBILE: "${interval}y", // settings.ts SETTINGS_HEADER: "Spaced Repetition Plugin - Settings", CHECK_WIKI: 'For more information, check the wiki.', FOLDERS_TO_IGNORE: "Folders to ignore", FOLDERS_TO_IGNORE_DESC: "Enter folder paths separated by newlines i.e. Templates Meta/Scripts", FLASHCARDS: "Flashcards", FLASHCARD_EASY_LABEL: "Easy Button Text", FLASHCARD_GOOD_LABEL: "Good Button Text", FLASHCARD_HARD_LABEL: "Hard Button Text", FLASHCARD_EASY_DESC: 'Customize the label for the "Easy" Button', FLASHCARD_GOOD_DESC: 'Customize the label for the "Good" Button', FLASHCARD_HARD_DESC: 'Customize the label for the "Hard" Button', FLASHCARD_TAGS: "Flashcard tags", FLASHCARD_TAGS_DESC: "Enter tags separated by spaces or newlines i.e. #flashcards #deck2 #deck3.", CONVERT_FOLDERS_TO_DECKS: "Convert folders to decks and subdecks?", CONVERT_FOLDERS_TO_DECKS_DESC: "This is an alternative to the Flashcard tags option above.", INLINE_SCHEDULING_COMMENTS: "Save scheduling comment on the same line as the flashcard's last line?", INLINE_SCHEDULING_COMMENTS_DESC: "Turning this on will make the HTML comments not break list formatting.", BURY_SIBLINGS_TILL_NEXT_DAY: "Bury sibling cards until the next day?", BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "Siblings are cards generated from the same card text i.e. cloze deletions", SHOW_CARD_CONTEXT: "Show context in cards?", SHOW_CARD_CONTEXT_DESC: "i.e. Title > Heading 1 > Subheading > ... > Subheading", CARD_MODAL_HEIGHT_PERCENT: "Flashcard Height Percentage", CARD_MODAL_SIZE_PERCENT_DESC: "Should be set to 100% on mobile or if you have very large images", RESET_DEFAULT: "Reset to default", CARD_MODAL_WIDTH_PERCENT: "Flashcard Width Percentage", RANDOMIZE_CARD_ORDER: "Randomize card order during review?", DISABLE_CLOZE_CARDS: "Disable cloze cards?", CONVERT_HIGHLIGHTS_TO_CLOZES: "Convert ==hightlights== to clozes?", CONVERT_BOLD_TEXT_TO_CLOZES: "Convert **bolded text** to clozes?", CONVERT_CURLY_BRACKETS_TO_CLOZES: "Convert {{curly brackets}} to clozes?", INLINE_CARDS_SEPARATOR: "Separator for inline flashcards", FIX_SEPARATORS_MANUALLY_WARNING: "Note that after changing this you have to manually edit any flashcards you already have.", INLINE_REVERSED_CARDS_SEPARATOR: "Separator for inline reversed flashcards", MULTILINE_CARDS_SEPARATOR: "Separator for multiline flashcards", MULTILINE_REVERSED_CARDS_SEPARATOR: "Separator for multiline reversed flashcards", NOTES: "Notes", REVIEW_PANE_ON_STARTUP: "Enable note review pane on startup", TAGS_TO_REVIEW: "Tags to review", TAGS_TO_REVIEW_DESC: "Enter tags separated by spaces or newlines i.e. #review #tag2 #tag3.", OPEN_RANDOM_NOTE: "Open a random note for review", OPEN_RANDOM_NOTE_DESC: "When you turn this off, notes are ordered by importance (PageRank).", AUTO_NEXT_NOTE: "Open next note automatically after a review", DISABLE_FILE_MENU_REVIEW_OPTIONS: "Disable review options in the file menu i.e. Review: Easy Good Hard", DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "After disabling, you can review using the command hotkeys. Reload Obsidian after changing this.", MAX_N_DAYS_REVIEW_QUEUE: "Maximum number of days to display on right panel", MIN_ONE_DAY: "The number of days must be at least 1.", VALID_NUMBER_WARNING: "Please provide a valid number.", UI_PREFERENCES: "UI Preferences", INITIALLY_EXPAND_SUBDECKS_IN_TREE: "Deck trees should be initially displayed as expanded", INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "Turn this off to collapse nested decks in the same card. Useful if you have cards which belong to many decks in the same file.", ALGORITHM: "Algorithm", CHECK_ALGORITHM_WIKI: 'For more information, check the algorithm implementation.', BASE_EASE: "Base ease", BASE_EASE_DESC: "minimum = 130, preferrably approximately 250.", BASE_EASE_MIN_WARNING: "The base ease must be at least 130.", LAPSE_INTERVAL_CHANGE: "Interval change when you review a flashcard/note as hard", LAPSE_INTERVAL_CHANGE_DESC: "newInterval = oldInterval * intervalChange / 100.", EASY_BONUS: "Easy Bonus", EASY_BONUS_DESC: "The easy bonus allows you to set the difference in intervals between answering Good and Easy on a flashcard/note (minimum = 100%).", EASY_BONUS_MIN_WARNING: "The easy bonus must be at least 100.", MAX_INTERVAL: "Maximum interval in days", MAX_INTERVAL_DESC: "Allows you to place an upper limit on the interval (default = 100 years).", MAX_INTERVAL_MIN_WARNING: "The maximum interval must be at least 1 day.", MAX_LINK_CONTRIB: "Maximum link contribution", MAX_LINK_CONTRIB_DESC: "Maximum contribution of the weighted ease of linked notes to the initial ease.", LOGGING: "Logging", DISPLAY_DEBUG_INFO: "Display debugging information on the developer console?", // sidebar.ts NOTES_REVIEW_QUEUE: "Notes Review Queue", CLOSE: "Close", NEW: "New", YESTERDAY: "Yesterday", TODAY: "Today", TOMORROW: "Tomorrow", // stats-modal.tsx STATS_TITLE: "Statistics", MONTH: "Month", QUARTER: "Quarter", YEAR: "Year", LIFETIME: "Lifetime", FORECAST: "Forecast", FORECAST_DESC: "The number of cards due in the future", SCHEDULED: "Scheduled", DAYS: "Days", NUMBER_OF_CARDS: "Number of cards", REVIEWS_PER_DAY: "Average: ${avg} reviews/day", INTERVALS: "Intervals", INTERVALS_DESC: "Delays until reviews are shown again", COUNT: "Count", INTERVALS_SUMMARY: "Average interval: ${avg}, Longest interval: ${longest}", EASES: "Eases", EASES_SUMMARY: "Average ease: ${avgEase}", CARD_TYPES: "Card Types", CARD_TYPES_DESC: "This includes buried cards as well, if any", CARD_TYPE_NEW: "New", CARD_TYPE_YOUNG: "Young", CARD_TYPE_MATURE: "Mature", CARD_TYPES_SUMMARY: "Total cards: ${totalCardsCount}" }; // src/lang/locale/en-gb.ts var en_gb_default = {}; // src/lang/locale/es.ts var es_default = { // flashcard-modal.tsx DECKS: "Mazos", DUE_CARDS: "Tarjetas Vencidas", NEW_CARDS: "Tarjetas Nuevas", TOTAL_CARDS: "Tarjetas Totales", BACK: "Atr\xE1s", SKIP: "Saltar", EDIT_CARD: "Editar Tarjeta", RESET_CARD_PROGRESS: "Reiniciar progreso de la tarjeta", HARD: "Dif\xEDcil", GOOD: "Bien", EASY: "F\xE1cil", SHOW_ANSWER: "Mostrar Respuesta", CARD_PROGRESS_RESET: "El progreso de la tarjeta se ha reiniciado.", SAVE: "Guardar", CANCEL: "Cancelar", NO_INPUT: "Se ha prove\xEDdo entrada.", CURRENT_EASE_HELP_TEXT: "Facilidad Actual: ", CURRENT_INTERVAL_HELP_TEXT: "Intervalo Actual: ", CARD_GENERATED_FROM: "Generado Desde: ${notePath}", // main.ts OPEN_NOTE_FOR_REVIEW: "Abrir nota para revisi\xF3n", REVIEW_CARDS: "Revisar Tarjetas", REVIEW_EASY_FILE_MENU: "Revisar: F\xE1cil", REVIEW_GOOD_FILE_MENU: "Revisar: Bien", REVIEW_HARD_FILE_MENU: "Revisar: Dif\xEDcil", REVIEW_NOTE_EASY_CMD: "Revisar nota como f\xE1cil", REVIEW_NOTE_GOOD_CMD: "Revisar nota como bien", REVIEW_NOTE_HARD_CMD: "Revisar nota como dif\xEDcil", CRAM_ALL_CARDS: "Selecciona un mazo a memorizar", REVIEW_ALL_CARDS: "Revisar tarjetas de todas las notas", REVIEW_CARDS_IN_NOTE: "Revisar tarjetas en esta nota", CRAM_CARDS_IN_NOTE: "Memorizar tarjetas en esta nota", VIEW_STATS: "Ver estad\xEDsticas", STATUS_BAR: "Revisar: ${dueNotesCount} nota(s), ${dueFlashcardsCount} tarjetas vencidas", SYNC_TIME_TAKEN: "La sincronizaci\xF3n tom\xF3 ${t} milisegundos", NOTE_IN_IGNORED_FOLDER: "La nota est\xE1 guardada en un directorio ignorado (revisa los ajustes).", PLEASE_TAG_NOTE: "Por favor etiquete apropiadamente la nota para revisi\xF3n (en los ajustes).", RESPONSE_RECEIVED: "Respuesta Recibida", NO_DECK_EXISTS: "No existen mazos para: ${deckName}", ALL_CAUGHT_UP: "\xA1Est\xE1s al d\xEDa! \u{1F603}", // scheduling.ts DAYS_STR_IVL: "${interval} d\xEDa(s)", MONTHS_STR_IVL: "${interval} mes(es)", YEARS_STR_IVL: "${interval} a\xF1o(s)", DAYS_STR_IVL_MOBILE: "${interval}d", MONTHS_STR_IVL_MOBILE: "${interval}m", YEARS_STR_IVL_MOBILE: "${interval}a", // settings.ts SETTINGS_HEADER: "Extensi\xF3n de Repetici\xF3n Espaciada - Ajustes", CHECK_WIKI: 'Para m\xE1s informaci\xF3n revisa la wiki.', FOLDERS_TO_IGNORE: "Directorios a ignorar", FOLDERS_TO_IGNORE_DESC: "Escriba las rutas de los directorios separadas por saltos de l\xEDnea, por ejemplo, Plantillas Extra/Guiones", FLASHCARDS: "Tarjetas de Memorizaci\xF3n", FLASHCARD_EASY_LABEL: "Texto del bot\xF3n: F\xE1cil", FLASHCARD_GOOD_LABEL: "Texto del bot\xF3n: Bien", FLASHCARD_HARD_LABEL: "Texto del bot\xF3n: Dif\xEDcil", FLASHCARD_EASY_DESC: "Personalize la etiqueta para el bot\xF3n: F\xE1cil", FLASHCARD_GOOD_DESC: "Personalize la etiqueta para el bot\xF3n: Bien", FLASHCARD_HARD_DESC: "Personalize la etiqueta para el bot\xF3n: Dif\xEDcil", FLASHCARD_TAGS: "Etiquetas de las Tarjetas de Memorizaci\xF3n", FLASHCARD_TAGS_DESC: "Escriba las etiquetas separadas por espacios o saltos de l\xEDnea, por ejemplo, #memorizar #mazo2 #mazo3", CONVERT_FOLDERS_TO_DECKS: "\xBFConvertir directorios a mazos y submazos?", CONVERT_FOLDERS_TO_DECKS_DESC: "Esta es una opci\xF3n alternativa a las etiquetas de las Tarjetas de Memorizaci\xF3n.", INLINE_SCHEDULING_COMMENTS: "\xBFGuardar el comentario para programaci\xF3n de las tarjetas en la \xFAltima l\xEDnea?", INLINE_SCHEDULING_COMMENTS_DESC: "Activar esto har\xE1 que los comentarios HTML no rompan el formato de las listas.", BURY_SIBLINGS_TILL_NEXT_DAY: "\xBFEnterrar tarjetas hermanas hasta el siguiente d\xEDa?", BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "Los hermanos son tarjetas generadas del mismo texto de la tarjeta, por ejemplo, deletreos de huecos (cloze deletions en ingl\xE9s)", SHOW_CARD_CONTEXT: "\xBFMostrar contexto en las tarjetas?", SHOW_CARD_CONTEXT_DESC: "Por Ejemplo: T\xEDtulo > Cabecera > Sub-Cabecera > ... > Sub-Cabecera", CARD_MODAL_HEIGHT_PERCENT: "Porcentaje de la altura de las tarjetas de memoria", CARD_MODAL_SIZE_PERCENT_DESC: "Deber\xEDa ser establecido en 100% si tienes im\xE1genes grandes", RESET_DEFAULT: "Reiniciar a la configuraci\xF3n por defecto", CARD_MODAL_WIDTH_PERCENT: "Porcentaje del ancho de las tarjetas de memoria", RANDOMIZE_CARD_ORDER: "\xBFAleatorizar el orden de las tarjetas para revisi\xF3n?", DISABLE_CLOZE_CARDS: "\xBFDeshabilitar deletreo de huecos en las tarjetas?", CONVERT_HIGHLIGHTS_TO_CLOZES: "\xBFConvertir ==resaltados== a deletreo de huecos?", CONVERT_BOLD_TEXT_TO_CLOZES: "\xBFConvertir **texto en negrita** a deletreo de huecos?", CONVERT_CURLY_BRACKETS_TO_CLOZES: "\xBFConvertir {{llaves rizadas}} a deletreo de huecos?", INLINE_CARDS_SEPARATOR: "Separador de tarjetas de memorizaci\xF3n en l\xEDnea", FIX_SEPARATORS_MANUALLY_WARNING: "Note que despu\xE9s de cambiar este ajuste, tendr\xE1 que cambiar manualmente todas las notas que tenga.", INLINE_REVERSED_CARDS_SEPARATOR: "Separador de tarjetas de memorizaci\xF3n para tarjetas de notas invertidas", MULTILINE_CARDS_SEPARATOR: "Separador para tarjetas de memorizaci\xF3n multil\xEDnea", MULTILINE_REVERSED_CARDS_SEPARATOR: "Separador para tarjetas de memorizaci\xF3n multil\xEDnea invertidas", NOTES: "Notes", REVIEW_PANE_ON_STARTUP: "Activar panel de revisi\xF3n de notas al arrancar", TAGS_TO_REVIEW: "Etiquetas a revisar", TAGS_TO_REVIEW_DESC: "Escriba las etiquetas separadas por espacios o saltos de l\xEDneas, por ejemplo, #revisi\xF3n #etiqueta2 #etiqueta3.", OPEN_RANDOM_NOTE: "Abrir una nota al azar para revisar", OPEN_RANDOM_NOTE_DESC: "Cuando deshabilita esto, las notas son ordenadas por importancia (Algoritmo PageRank).", AUTO_NEXT_NOTE: "Abrir la siguiente nota autom\xE1ticamente despu\xE9s de una revisi\xF3n", DISABLE_FILE_MENU_REVIEW_OPTIONS: "Deshabilitar opciones de revisi\xF3n en el men\xFA de archivo, por ejemplo, Revisi\xF3n: F\xE1cil Bien Dif\xEDcil", DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "Despu\xE9s de deshabilitarlo, puede hacer las revisiones utilizando atajos de teclado. Reinicie Obsidian despu\xE9s de cambiar esto.", MAX_N_DAYS_REVIEW_QUEUE: "N\xFAmero m\xE1ximo de d\xEDas a mostrar en el panel derecho.", MIN_ONE_DAY: "El n\xFAmero de d\xEDas debe ser al menos uno.", VALID_NUMBER_WARNING: "Por favor especifique un n\xFAmero v\xE1lido.", UI_PREFERENCES: "Preferencias de la interfaz de usuario.", INITIALLY_EXPAND_SUBDECKS_IN_TREE: "Los \xE1rboles de mazos deber\xEDan ser expandidos al inicio.", INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "Desactiva esto para contraer mazos anidados en la misma tarjeta. \xDAtil si tienes tarjetas que pertenecen a muchos mazos en el mismo archivo.", ALGORITHM: "Algoritmo", CHECK_ALGORITHM_WIKI: 'Para m\xE1s informaci\xF3n, revisa la implementaci\xF3n del algoritmo.', BASE_EASE: "Base ease", BASE_EASE_DESC: "El m\xEDnimo es 130, es preferible que est\xE9 aproximado a 250.", BASE_EASE_MIN_WARNING: "La facilidad base de las tarjetas debe ser al menos 130.", LAPSE_INTERVAL_CHANGE: "El intervalo cambiar\xE1 cuando se revise una tarjeta o nota como Dif\xEDcil.", LAPSE_INTERVAL_CHANGE_DESC: "NuevoInterval = ViejoIntervalo * CambioDeIntervalo / 100.", EASY_BONUS: "Bonificaci\xF3n para F\xE1cil", EASY_BONUS_DESC: "La bonificaci\xF3n para F\xE1cil te permite establecer la diferencia entre intervalos al responder Bien y F\xE1cil en las tarjetas o notas (m\xEDnimo = 100%).", EASY_BONUS_MIN_WARNING: "El bono de facilidad debe ser al menos 100.", MAX_INTERVAL: "Intervalo m\xE1ximo en d\xEDas", MAX_INTERVAL_DESC: "Te permite establecer un l\xEDmite mayor en el intervalo (por defecto es de 100 a\xF1os).", MAX_INTERVAL_MIN_WARNING: "El intervalo m\xE1ximo debe ser de al menos un d\xEDa.", MAX_LINK_CONTRIB: "Contribuci\xF3n m\xE1xima de las notas vinculadas.", MAX_LINK_CONTRIB_DESC: "Contribuci\xF3n m\xE1xima de la facilidad ponderada de las notas vinculadas a la facilidad inicial.", LOGGING: "Registro", DISPLAY_DEBUG_INFO: "\xBFMostrar informaci\xF3n de depuraci\xF3n en la consola de desarrollador?", // sidebar.ts NOTES_REVIEW_QUEUE: "Cola de notas a revisar", CLOSE: "Cerrar", NEW: "Nuevo", YESTERDAY: "Ayer", TODAY: "Hoy", TOMORROW: "Ma\xF1ana", // stats-modal.tsx STATS_TITLE: "Estad\xEDsticas", MONTH: "Mes", QUARTER: "Trimestre o Cuatrimestre", // En Inglés: Quarter. YEAR: "A\xF1o", LIFETIME: "Tiempo de Vida", FORECAST: "Pron\xF3stico", FORECAST_DESC: "El n\xFAmero de tarjetas vencidas en el futuro", SCHEDULED: "Programado", DAYS: "D\xEDas", NUMBER_OF_CARDS: "N\xFAmero de tarjetas", REVIEWS_PER_DAY: "Carga: ${avg} Revisiones por d\xEDa", INTERVALS: "Intervalos", INTERVALS_DESC: "Retrasos hasta que las revisiones se muestren de nuevo", COUNT: "Conteo", INTERVALS_SUMMARY: "Intervalo de carga: ${avg}, Intervalo mayor: ${longest}", EASES: "Facilidad", EASES_SUMMARY: "Carga de Facilidad: ${avgEase}", CARD_TYPES: "Tipos de tarjetas", CARD_TYPES_DESC: "Esto incluye tambi\xE9n a las tarjetas enterradas, si las hay", CARD_TYPE_NEW: "Nueva", CARD_TYPE_YOUNG: "Joven", CARD_TYPE_MATURE: "Madura", CARD_TYPES_SUMMARY: "Tarjetas Totales: ${totalCardsCount}" }; // src/lang/locale/fr.ts var fr_default = {}; // src/lang/locale/hi.ts var hi_default = {}; // src/lang/locale/id.ts var id_default = {}; // src/lang/locale/it.ts var it_default = {}; // src/lang/locale/ja.ts var ja_default = { // flashcard-modal.tsx DECKS: "\u30C7\u30C3\u30AD", DUE_CARDS: "\u671F\u65E5\u306E\u30AB\u30FC\u30C9", NEW_CARDS: "\u65B0\u898F\u306E\u30AB\u30FC\u30C9", TOTAL_CARDS: "\u30AB\u30FC\u30C9\u5408\u8A08", BACK: "Back", SKIP: "Skip", EDIT_CARD: "Edit Card", RESET_CARD_PROGRESS: "\u30AB\u30FC\u30C9\u306E\u9032\u6357\u3092\u30EA\u30BB\u30C3\u30C8", HARD: "Hard", GOOD: "Good", EASY: "Easy", SHOW_ANSWER: "\u89E3\u7B54\u3092\u8868\u793A", CARD_PROGRESS_RESET: "\u30AB\u30FC\u30C9\u306E\u9032\u6357\u304C\u30EA\u30BB\u30C3\u30C8\u3055\u308C\u307E\u3057\u305F\u3002", SAVE: "Save", CANCEL: "Cancel", NO_INPUT: "No input provided.", CURRENT_EASE_HELP_TEXT: "Current Ease: ", CURRENT_INTERVAL_HELP_TEXT: "Current Interval: ", CARD_GENERATED_FROM: "Generated from: ${notePath}", // main.ts OPEN_NOTE_FOR_REVIEW: "\u30EC\u30D3\u30E5\u30FC\u3059\u308B\u30CE\u30FC\u30C8\u3092\u958B\u304F", REVIEW_CARDS: "\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306E\u30EC\u30D3\u30E5\u30FC", REVIEW_EASY_FILE_MENU: "\u30EC\u30D3\u30E5\u30FC: Easy", REVIEW_GOOD_FILE_MENU: "\u30EC\u30D3\u30E5\u30FC: Good", REVIEW_HARD_FILE_MENU: "\u30EC\u30D3\u30E5\u30FC: Hard", REVIEW_NOTE_EASY_CMD: "\u30CE\u30FC\u30C8\u3092Easy\u3068\u3057\u3066\u30EC\u30D3\u30E5\u30FC\u3059\u308B", REVIEW_NOTE_GOOD_CMD: "\u30CE\u30FC\u30C8\u3092Good\u3068\u3057\u3066\u30EC\u30D3\u30E5\u30FC\u3059\u308B", REVIEW_NOTE_HARD_CMD: "\u30CE\u30FC\u30C8\u3092Hard\u3068\u3057\u3066\u30EC\u30D3\u30E5\u30FC\u3059\u308B", REVIEW_ALL_CARDS: "\u3059\u3079\u3066\u306E\u30CE\u30FC\u30C8\u304B\u3089\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u3092\u30EC\u30D3\u30E5\u30FC\u3059\u308B", CRAM_ALL_CARDS: "Select a deck to cram", REVIEW_CARDS_IN_NOTE: "\u3053\u306E\u30CE\u30FC\u30C8\u306E\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u3092\u30EC\u30D3\u30E5\u30FC\u3059\u308B", CRAM_CARDS_IN_NOTE: "\u3053\u306E\u30CE\u30FC\u30C8\u306E\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u3092\u8A70\u3081\u8FBC\u307F\u5B66\u7FD2\u3059\u308B", VIEW_STATS: "\u7D71\u8A08\u3092\u95B2\u89A7\u3059\u308B", STATUS_BAR: "\u30EC\u30D3\u30E5\u30FC: ${dueNotesCount}\u30CE\u30FC\u30C8, ${dueFlashcardsCount}\u30AB\u30FC\u30C9\u304C\u671F\u65E5", SYNC_TIME_TAKEN: "\u540C\u671F\u306B${t}ms\u304B\u304B\u308A\u307E\u3057\u305F\u3002", NOTE_IN_IGNORED_FOLDER: "\u30CE\u30FC\u30C8\u304C\u7121\u8996\u3059\u308B\u30D5\u30A9\u30EB\u30C0\u306B\u4FDD\u5B58\u3055\u308C\u3066\u3044\u307E\u3059(\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044)\u3002", PLEASE_TAG_NOTE: "\u30EC\u30D3\u30E5\u30FC\u3092\u884C\u3046\u306B\u306F\u30CE\u30FC\u30C8\u306B\u5BFE\u3057\u3066\u6B63\u3057\u304F\u30BF\u30B0\u4ED8\u3051\u3057\u3066\u304F\u3060\u3055\u3044(\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044)\u3002", RESPONSE_RECEIVED: "\u7B54\u3048\u3092\u53D7\u3051\u53D6\u308A\u307E\u3057\u305F\u3002", NO_DECK_EXISTS: "${deckName}\u306B\u306F\u30C7\u30C3\u30AD\u304C\u5B58\u5728\u3057\u307E\u305B\u3093\u3002", ALL_CAUGHT_UP: "\u4ECA\u65E5\u306E\u8AB2\u984C\u3092\u3059\u3079\u3066\u9054\u6210\u3057\u307E\u3057\u305F :D", // scheduling.ts DAYS_STR_IVL: "${interval}\u65E5\u5F8C", MONTHS_STR_IVL: "${interval}\u6708\u5F8C", YEARS_STR_IVL: "${interval}\u5E74\u5F8C", DAYS_STR_IVL_MOBILE: "${interval}d", MONTHS_STR_IVL_MOBILE: "${interval}m", YEARS_STR_IVL_MOBILE: "${interval}y", // settings.ts SETTINGS_HEADER: "Spaced Repetition Plugin - \u8A2D\u5B9A", CHECK_WIKI: '\u8A73\u7D30\u306B\u3064\u3044\u3066\u306Fwiki\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002', FOLDERS_TO_IGNORE: "\u7121\u8996\u3059\u308B\u30D5\u30A9\u30EB\u30C0", FOLDERS_TO_IGNORE_DESC: '\u30D5\u30A9\u30EB\u30C0\u30D1\u30B9\u3092\u6539\u884C\u3067\u533A\u5207\u3063\u3066\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002"Templates Meta/Scripts" \u306E\u3088\u3046\u306A\u30B9\u30DA\u30FC\u30B9\u306B\u3088\u308B\u533A\u5207\u308A\u3067\u306E\u66F8\u304D\u65B9\u306F\u7121\u52B9\u3067\u3059\u3002', FLASHCARDS: "\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9", FLASHCARD_EASY_LABEL: "Easy Button Text", FLASHCARD_GOOD_LABEL: "Good Button Text", FLASHCARD_HARD_LABEL: "Hard Button Text", FLASHCARD_EASY_DESC: 'Customize the label for the "Easy" Button', FLASHCARD_GOOD_DESC: 'Customize the label for the "Good" Button', FLASHCARD_HARD_DESC: 'Customize the label for the "Hard" Button', FLASHCARD_TAGS: "\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306B\u4F7F\u7528\u3059\u308B\u30BF\u30B0", FLASHCARD_TAGS_DESC: '\u30BF\u30B0\u3092\u30B9\u30DA\u30FC\u30B9\u307E\u305F\u306F\u6539\u884C\u3067\u533A\u5207\u3063\u3066\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u4F8B: "#flashcards #deck2 #deck3"', CONVERT_FOLDERS_TO_DECKS: "\u30D5\u30A9\u30EB\u30C0\u3092\u30C7\u30C3\u30AD\u3068\u30B5\u30D6\u30C7\u30C3\u30AD\u3068\u3057\u3066\u4F7F\u7528\u3057\u307E\u3059\u304B\uFF1F", CONVERT_FOLDERS_TO_DECKS_DESC: "\u3053\u308C\u306F\u4E0A\u8A18\u306E\u30BF\u30B0\u3092\u4F7F\u7528\u3057\u305F\u30C7\u30C3\u30AD\u69CB\u7BC9\u306E\u4EE3\u66FF\u3068\u306A\u308B\u30AA\u30D7\u30B7\u30E7\u30F3\u3067\u3059\u3002", INLINE_SCHEDULING_COMMENTS: "\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306E\u6700\u7D42\u884C\u3068\u540C\u4E00\u306E\u884C\u306B\u30B9\u30B1\u30B8\u30E5\u30FC\u30EA\u30F3\u30B0\u30B3\u30E1\u30F3\u30C8\u3092\u4FDD\u5B58\u3057\u307E\u3059\u304B\uFF1F", INLINE_SCHEDULING_COMMENTS_DESC: "\u3053\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u6709\u52B9\u5316\u3059\u308B\u3068\u3001HTML\u30B3\u30E1\u30F3\u30C8\u306B\u3088\u3063\u3066Markdown\u306E\u30EA\u30B9\u30C8\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u304C\u5D29\u308C\u306A\u304F\u306A\u308A\u307E\u3059\u3002", BURY_SIBLINGS_TILL_NEXT_DAY: "\u6B21\u306E\u30EC\u30D3\u30E5\u30FC\u307E\u3067\u30B7\u30D6\u30EA\u30F3\u30B0\u3092\u5EF6\u671F\u3057\u307E\u3059\u304B\uFF1F", BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "\u30B7\u30D6\u30EA\u30F3\u30B0\u306F\u540C\u4E00\u306E\u30AB\u30FC\u30C9\u30C6\u30AD\u30B9\u30C8\u304B\u3089\u751F\u6210\u3055\u308C\u305F\u30AB\u30FC\u30C9\u3001\u3064\u307E\u308A\u7A74\u57CB\u3081\u554F\u984C\u306E\u6D3E\u751F\u30AB\u30FC\u30C9\u3067\u3059\u3002", SHOW_CARD_CONTEXT: "\u30AB\u30FC\u30C9\u306B\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u3092\u8868\u793A\u3057\u307E\u3059\u304B\uFF1F", SHOW_CARD_CONTEXT_DESC: "\uFF62\u30BF\u30A4\u30C8\u30EB > \u898B\u51FA\u3057 1 > \u526F\u898B\u51FA\u3057 > ... > \u526F\u898B\u51FA\u3057\uFF63\u306E\u8868\u793A\u3092\u884C\u3046\u304B\u3069\u3046\u304B\u3092\u6C7A\u3081\u307E\u3059\u3002", CARD_MODAL_HEIGHT_PERCENT: "\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306E\u7E26\u30B5\u30A4\u30BA\u306E\u30D1\u30FC\u30BB\u30F3\u30C6\u30FC\u30B8", CARD_MODAL_SIZE_PERCENT_DESC: "\u30E2\u30D0\u30A4\u30EB\u7248\u3001\u307E\u305F\u306F\u975E\u5E38\u306B\u5927\u304D\u306A\u30B5\u30A4\u30BA\u306E\u753B\u50CF\u304C\u3042\u308B\u5834\u5408\u306B\u306F100%\u306B\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002", RESET_DEFAULT: "\u30C7\u30D5\u30A9\u30EB\u30C8\u5024\u306B\u30EA\u30BB\u30C3\u30C8\u3059\u308B", CARD_MODAL_WIDTH_PERCENT: "\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306E\u6A2A\u30B5\u30A4\u30BA\u306E\u30D1\u30FC\u30BB\u30F3\u30C6\u30FC\u30B8", RANDOMIZE_CARD_ORDER: "\u30EC\u30D3\u30E5\u30FC\u4E2D\u306E\u30AB\u30FC\u30C9\u306E\u9806\u756A\u3092\u30E9\u30F3\u30C0\u30E0\u306B\u3057\u307E\u3059\u304B\uFF1F", DISABLE_CLOZE_CARDS: "\u7A74\u57CB\u3081\u30AB\u30FC\u30C9\u3092\u7121\u52B9\u5316\u3057\u307E\u3059\u304B\uFF1F", CONVERT_HIGHLIGHTS_TO_CLOZES: "==\u30CF\u30A4\u30E9\u30A4\u30C8==\u3092\u7A74\u57CB\u3081\u3068\u3057\u3066\u4F7F\u7528\u3057\u307E\u3059\u304B\uFF1F", CONVERT_BOLD_TEXT_TO_CLOZES: "**\u30DC\u30FC\u30EB\u30C9\u4F53**\u3092\u7A74\u57CB\u3081\u3068\u3057\u3066\u4F7F\u7528\u3057\u307E\u3059\u304B\uFF1F", CONVERT_CURLY_BRACKETS_TO_CLOZES: "{{\u4E2D\u62EC\u5F27}}\u3092\u7A74\u57CB\u3081\u3068\u3057\u3066\u4F7F\u7528\u3057\u307E\u3059\u304B\uFF1F", INLINE_CARDS_SEPARATOR: "\u30A4\u30F3\u30E9\u30A4\u30F3\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306B\u4F7F\u7528\u3059\u308B\u30BB\u30D1\u30EC\u30FC\u30BF\u30FC", FIX_SEPARATORS_MANUALLY_WARNING: "\u3053\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u5909\u66F4\u3059\u308B\u5834\u5408\u306B\u306F\u3001\u4F5C\u6210\u6E08\u307F\u306E\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u3092\u624B\u52D5\u3067\u7DE8\u96C6\u3057\u76F4\u3059\u5FC5\u8981\u304C\u3042\u308B\u3053\u3068\u306B\u6CE8\u610F\u3057\u3066\u304F\u3060\u3055\u3044\u3002", INLINE_REVERSED_CARDS_SEPARATOR: "\u30A4\u30F3\u30E9\u30A4\u30F3\u306E\u8868\u88CF\u53CD\u8EE2\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306B\u4F7F\u7528\u3059\u308B\u30BB\u30D1\u30EC\u30FC\u30BF\u30FC", MULTILINE_CARDS_SEPARATOR: "\u8907\u6570\u884C\u306E\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306B\u4F7F\u7528\u3059\u308B\u30BB\u30D1\u30EC\u30FC\u30BF\u30FC", MULTILINE_REVERSED_CARDS_SEPARATOR: "\u8907\u6570\u884C\u306E\u8868\u88CF\u53CD\u8EE2\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9\u306B\u4F7F\u7528\u3059\u308B\u30BB\u30D1\u30EC\u30FC\u30BF\u30FC", NOTES: "\u30CE\u30FC\u30C8", REVIEW_PANE_ON_STARTUP: "Enable note review pane on startup", TAGS_TO_REVIEW: "\u30EC\u30D3\u30E5\u30FC\u306B\u4F7F\u7528\u3059\u308B\u30BF\u30B0", TAGS_TO_REVIEW_DESC: '\u30BF\u30B0\u3092\u30B9\u30DA\u30FC\u30B9\u307E\u305F\u306F\u6539\u884C\u3067\u533A\u5207\u3063\u3066\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u4F8B: "#review #tag2 #tag3"', OPEN_RANDOM_NOTE: "\u30E9\u30F3\u30C0\u30E0\u306B\u30CE\u30FC\u30C8\u3092\u958B\u3044\u3066\u30EC\u30D3\u30E5\u30FC\u3059\u308B", OPEN_RANDOM_NOTE_DESC: "\u3053\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u304C\u7121\u52B9\u5316\u3055\u308C\u3066\u3044\u308B\u72B6\u614B\u3067\u306F\u3001\u30CE\u30FC\u30C8\u306F\u91CD\u8981\u5EA6(\u30DA\u30FC\u30B8\u30E9\u30F3\u30AF)\u306B\u3088\u308B\u9806\u756A\u3067\u8868\u793A\u3055\u308C\u307E\u3059\u3002", AUTO_NEXT_NOTE: "\u30EC\u30D3\u30E5\u30FC\u5F8C\u306B\u6B21\u306E\u30CE\u30FC\u30C8\u3092\u81EA\u52D5\u7684\u306B\u958B\u304F", DISABLE_FILE_MENU_REVIEW_OPTIONS: "\u30D5\u30A1\u30A4\u30EB\u30E1\u30CB\u30E5\u30FC\u3067\u306E\u30EC\u30D3\u30E5\u30FC\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u7121\u52B9\u5316(\uFF62\u30EC\u30D3\u30E5\u30FC: Easy\uFF63\u7B49\u306E\u9805\u76EE\u3092\u975E\u8868\u793A\u306B\u3059\u308B)", DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "\u7121\u52B9\u5316\u3057\u305F\u5F8C\u3001\u30B3\u30DE\u30F3\u30C9\u30DB\u30C3\u30C8\u30AD\u30FC\u3092\u4F7F\u3063\u3066\u30EC\u30D3\u30E5\u30FC\u3059\u308B\u3053\u3068\u304C\u53EF\u80FD\u306B\u306A\u308A\u307E\u3059\u3002\u3053\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u5909\u66F4\u3057\u305F\u5834\u5408\u306B\u306FObsidian\u3092\u30EA\u30ED\u30FC\u30C9\u3057\u3066\u304F\u3060\u3055\u3044\u3002", MAX_N_DAYS_REVIEW_QUEUE: "\u53F3\u30D1\u30CD\u30EB\u306B\u8868\u793A\u3059\u308B\u6700\u5927\u306E\u65E5\u6570", MIN_ONE_DAY: "\u65E5\u6570\u306B\u306F1\u4EE5\u4E0A\u306E\u6570\u5B57\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002", VALID_NUMBER_WARNING: "\u6709\u52B9\u306A\u6570\u5B57\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002", UI_PREFERENCES: "\u30E6\u30FC\u30B6\u30FC \u30A4\u30F3\u30BF\u30FC\u30D5\u30A7\u30A4\u30B9\u306E\u8A2D\u5B9A", INITIALLY_EXPAND_SUBDECKS_IN_TREE: "\u30C7\u30C3\u30AD \u30C4\u30EA\u30FC\u306F\u6700\u521D\u306F\u5C55\u958B\u3057\u3066\u8868\u793A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059", INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "\u3053\u308C\u3092\u30AA\u30D5\u306B\u3059\u308B\u3068\u3001\u540C\u3058\u30AB\u30FC\u30C9\u5185\u306E\u30CD\u30B9\u30C8\u3055\u308C\u305F\u30C7\u30C3\u30AD\u304C\u6298\u308A\u305F\u305F\u307E\u308C\u307E\u3059\u3002\u540C\u3058\u30D5\u30A1\u30A4\u30EB\u306B\u591A\u304F\u306E\u30C7\u30C3\u30AD\u306B\u5C5E\u3059\u308B\u30AB\u30FC\u30C9\u304C\u3042\u308B\u5834\u5408\u306B\u4FBF\u5229\u3067\u3059\u3002", ALGORITHM: "\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0", CHECK_ALGORITHM_WIKI: '\u8A73\u7D30\u306B\u3064\u3044\u3066\u306F\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0\u306E\u5B9F\u88C5\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002', BASE_EASE: "\u30D9\u30FC\u30B9\u306E\u6613\u3057\u3055", BASE_EASE_DESC: "\u6700\u5C0F\u5024\u306F130\u3067\u3059\u304C\u3001 \u9069\u6B63\u5024\u306F\u304A\u304A\u3088\u305D250\u3067\u3059\u3002", BASE_EASE_MIN_WARNING: "\u30D9\u30FC\u30B9\u306E\u6613\u3057\u3055\u306B\u306F130\u4EE5\u4E0A\u306E\u6570\u5B57\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002", LAPSE_INTERVAL_CHANGE: "\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9/\u30CE\u30FC\u30C8\u3092Hard\u3068\u3057\u3066\u30EC\u30D3\u30E5\u30FC\u3057\u305F\u969B\u306E\u9593\u9694\u5909\u66F4", LAPSE_INTERVAL_CHANGE_DESC: '"\u65B0\u3057\u3044\u9593\u9694 = \u4EE5\u524D\u306E\u9593\u9694 * \u9593\u9694\u5909\u66F4 / 100" \u3068\u3057\u3066\u8A08\u7B97\u3055\u308C\u307E\u3059\u3002', EASY_BONUS: "Easy\u30DC\u30FC\u30CA\u30B9", EASY_BONUS_DESC: "Easy\u30DC\u30FC\u30CA\u30B9\u306B\u3088\u3063\u3066\u30D5\u30E9\u30C3\u30B7\u30E5\u30AB\u30FC\u30C9/\u30CE\u30FC\u30C8\u306B\u304A\u3051\u308B\u9593\u9694\u306E\u5DEE\u5206\u3092\u8A2D\u5B9A\u3067\u304D\u307E\u3059(\u6700\u5C0F\u5024 = 100%)\u3002", EASY_BONUS_MIN_WARNING: "Easy\u30DC\u30FC\u30CA\u30B9\u306B\u306F100\u4EE5\u4E0A\u306E\u6570\u5B57\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002", MAX_INTERVAL: "Maximum interval in days", MAX_INTERVAL_DESC: "\u9593\u9694\u306B\u4E0A\u9650\u5024\u3092\u8A2D\u5B9A\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059(\u30C7\u30D5\u30A9\u30EB\u30C8\u5024 = 100\u5E74)\u3002", MAX_INTERVAL_MIN_WARNING: "\u9593\u9694\u306E\u6700\u5927\u5024\u306B\u306F1\u4EE5\u4E0A\u306E\u6570\u5B57\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002", MAX_LINK_CONTRIB: "\u30EA\u30F3\u30AF\u30B3\u30F3\u30C8\u30EA\u30D3\u30E5\u30FC\u30B7\u30E7\u30F3\u306E\u6700\u5927\u5024", MAX_LINK_CONTRIB_DESC: "\u6700\u521D\u306E\u6613\u3057\u3055\u306B\u5BFE\u3057\u3066\u3001\u30EA\u30F3\u30AF\u3055\u308C\u305F\u30CE\u30FC\u30C8\u306E\u91CD\u307F\u4ED8\u3051\u3055\u308C\u305F\u6613\u3057\u3055\u304C\u5BC4\u4E0E\u3059\u308B\u6700\u5927\u5024\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002", LOGGING: "\u30ED\u30B0\u7BA1\u7406", DISPLAY_DEBUG_INFO: "\u30C7\u30D9\u30ED\u30C3\u30D1\u30FC\u30B3\u30F3\u30BD\u30FC\u30EB\u306B\u3066\u30C7\u30D0\u30C3\u30B0\u60C5\u5831\u3092\u8868\u793A\u3057\u307E\u3059\u304B\uFF1F", // sidebar.ts NOTES_REVIEW_QUEUE: "\u30CE\u30FC\u30C8\u30EC\u30D3\u30E5\u30FC\u306E\u30AD\u30E5\u30FC", CLOSE: "\u9589\u3058\u308B", NEW: "\u65B0\u898F", YESTERDAY: "\u6628\u65E5", TODAY: "\u4ECA\u65E5", TOMORROW: "\u660E\u65E5", // stats-modal.tsx STATS_TITLE: "\u7D71\u8A08", MONTH: "Month", QUARTER: "Quarter", YEAR: "Year", LIFETIME: "Lifetime", FORECAST: "\u4E88\u6E2C", FORECAST_DESC: "\u5FA9\u7FD2\u671F\u65E5\u304C\u6765\u308B\u30AB\u30FC\u30C9\u306E\u679A\u6570", SCHEDULED: "\u30B9\u30B1\u30B8\u30E5\u30FC\u30EA\u30F3\u30B0\u6E08\u307F", DAYS: "\u65E5", NUMBER_OF_CARDS: "\u30AB\u30FC\u30C9\u6570", REVIEWS_PER_DAY: "\u5E73\u5747: ${avg}\u30EC\u30D3\u30E5\u30FC/\u65E5", INTERVALS: "\u9593\u9694", INTERVALS_DESC: "\u6B21\u306E\u30EC\u30D3\u30E5\u30FC\u4E88\u5B9A\u65E5", COUNT: "\u30AB\u30A6\u30F3\u30C8", INTERVALS_SUMMARY: "\u9593\u9694\u306E\u5E73\u5747\u5024: ${avg}, \u6700\u9577\u306E\u9593\u9694: ${longest}", EASES: "\u6613\u3057\u3055", EASES_SUMMARY: "\u6613\u3057\u3055\u306E\u5E73\u5747\u5024: ${avgEase}", CARD_TYPES: "\u30AB\u30FC\u30C9\u30BF\u30A4\u30D7", CARD_TYPES_DESC: "\u5EF6\u671F\u306E\u30AB\u30FC\u30C9\u304C\u3042\u308B\u5834\u5408\u306B\u306F\u3053\u308C\u306B\u542B\u307E\u308C\u307E\u3059", CARD_TYPE_NEW: "\u65B0\u898F", CARD_TYPE_YOUNG: "\u5FA9\u7FD2(\u521D\u671F)", CARD_TYPE_MATURE: "\u5FA9\u7FD2(\u5F8C\u671F)", CARD_TYPES_SUMMARY: "\u30AB\u30FC\u30C9\u306E\u5408\u8A08: ${totalCardsCount}\u679A" }; // src/lang/locale/ko.ts var ko_default = { // flashcard-modal.tsx DECKS: "\uB371", DUE_CARDS: "\uB2E4\uC2DC \uBCFC \uCE74\uB4DC\uB4E4", NEW_CARDS: "\uC0C8\uB85C\uC6B4 \uCE74\uB4DC\uB4E4", TOTAL_CARDS: "\uC804\uCCB4 \uCE74\uB4DC\uB4E4", BACK: "Back", SKIP: "Skip", EDIT_CARD: "Edit Card", RESET_CARD_PROGRESS: "\uCE74\uB4DC\uC758 \uC9C4\uD589\uC0C1\uD669\uC744 \uCD08\uAE30\uD654\uD569\uB2C8\uB2E4.", HARD: "\uC5B4\uB824\uC6C0(Hard)", GOOD: "\uC88B\uC74C(Good)", EASY: "\uC26C\uC6C0(Easy)", SHOW_ANSWER: "\uC815\uB2F5 \uD655\uC778\uD558\uAE30", CARD_PROGRESS_RESET: "\uCE74\uB4DC\uC758 \uC9C4\uD589\uC0C1\uD669\uC774 \uCD08\uAE30\uD654\uB418\uC5C8\uC2B5\uB2C8\uB2E4.", SAVE: "Save", CANCEL: "Cancel", NO_INPUT: "No input provided.", CURRENT_EASE_HELP_TEXT: "Current Ease: ", CURRENT_INTERVAL_HELP_TEXT: "Current Interval: ", CARD_GENERATED_FROM: "Generated from: ${notePath}", // main.ts OPEN_NOTE_FOR_REVIEW: "\uB9AC\uBDF0\uD560 \uB178\uD2B8 \uC5F4\uAE30", REVIEW_CARDS: "\uD50C\uB798\uC2DC\uCE74\uB4DC \uB9AC\uBDF0", REVIEW_EASY_FILE_MENU: "\uB9AC\uBDF0: \uC26C\uC6C0(Easy)", REVIEW_GOOD_FILE_MENU: "\uB9AC\uBDF0: \uC88B\uC74C(Good)", REVIEW_HARD_FILE_MENU: "\uB9AC\uBDF0: \uC5B4\uB824\uC6C0(Hard)", REVIEW_NOTE_EASY_CMD: "\uB178\uD2B8\uB97C \uC26C\uC6C0(easy)\uC73C\uB85C \uB9AC\uBDF0\uD569\uB2C8\uB2E4", REVIEW_NOTE_GOOD_CMD: "\uB178\uD2B8\uB97C \uC88B\uC74C(good)\uC73C\uB85C \uB9AC\uBDF0\uD569\uB2C8\uB2E4", REVIEW_NOTE_HARD_CMD: "\uB178\uD2B8\uB97C \uC5B4\uB824\uC6C0(hard)\uC73C\uB85C \uB9AC\uBDF0\uD569\uB2C8\uB2E4", REVIEW_ALL_CARDS: "\uBAA8\uB4E0 \uB178\uD2B8\uB4E4\uC758 \uD50C\uB798\uC2DC\uCE74\uB4DC\uB4E4\uC744 \uB9AC\uBDF0\uD569\uB2C8\uB2E4", CRAM_ALL_CARDS: "Select a deck to cram", REVIEW_CARDS_IN_NOTE: "\uC774 \uB178\uD2B8\uC758 \uD50C\uB798\uC2DC\uCE74\uB4DC\uB4E4\uC744 \uB9AC\uBDF0\uD569\uB2C8\uB2E4", CRAM_CARDS_IN_NOTE: "\uC774 \uB178\uD2B8\uC758 \uD50C\uB798\uC2DC\uCE74\uB4DC\uB4E4\uC744 \uBCBC\uB77D\uCE58\uAE30\uD569\uB2C8\uB2E4.", VIEW_STATS: "\uD1B5\uACC4 \uD655\uC778", STATUS_BAR: "--\uB9AC\uBDF0: ${dueNotesCount} \uB178\uD2B8, ${dueFlashcardsCount} \uCE74\uB4DC \uB0A8\uC558\uC2B5\uB2C8\uB2E4.", SYNC_TIME_TAKEN: "\uB3D9\uAE30\uD654\uC5D0 ${t}\uBC00\uB9AC\uCD08 \uAC78\uB838\uC2B5\uB2C8\uB2E4", NOTE_IN_IGNORED_FOLDER: "\uB178\uD2B8\uAC00 \uBB34\uC2DC\uB41C \uD3F4\uB354 \uC544\uB798\uC5D0 \uC800\uC7A5\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4. (\uC124\uC815\uC744 \uD655\uC778\uD574\uC8FC\uC138\uC694)", PLEASE_TAG_NOTE: "\uB9AC\uBDF0\uB97C \uD558\uAE30\uC704\uD574 \uB178\uD2B8\uC5D0 \uC801\uC808\uD788 \uD0DC\uADF8\uD574\uC8FC\uC138\uC694. (\uC124\uC815\uC744 \uD655\uC778\uD574\uC8FC\uC138\uC694)", RESPONSE_RECEIVED: "\uC694\uCCAD\uC774 \uC644\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4", NO_DECK_EXISTS: "${deckName}\uC774\uB77C\uB294 \uC774\uB984\uC758 \uB371\uC774 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.", ALL_CAUGHT_UP: "\uBAA8\uB450 \uD655\uC778\uD588\uC2B5\uB2C8\uB2E4. :D", // scheduling.ts DAYS_STR_IVL: "${interval} \uC77C \uD6C4", MONTHS_STR_IVL: "${interval} \uAC1C\uC6D4 \uD6C4", YEARS_STR_IVL: "${interval} \uB144 \uD6C4", DAYS_STR_IVL_MOBILE: "${interval}d", MONTHS_STR_IVL_MOBILE: "${interval}m", YEARS_STR_IVL_MOBILE: "${interval}y", // settings.ts SETTINGS_HEADER: "Spaced Repetition Plugin - \uC124\uC815", CHECK_WIKI: '\uB354 \uB9CE\uC740 \uC815\uBCF4\uB97C \uC6D0\uD558\uC2DC\uBA74, wiki\uB97C \uD655\uC778\uD574\uC8FC\uC138\uC694.', FOLDERS_TO_IGNORE: "\uBB34\uC2DC\uD560 \uD3F4\uB354\uB4E4", FOLDERS_TO_IGNORE_DESC: "\uD3F4\uB354 \uACBD\uB85C\uB97C \uBE48 \uC904\uB85C \uAD6C\uBD84\uD574\uC11C \uC785\uB825\uD574\uC8FC\uC138\uC694. 'Templates Meta/Scripts' \uC640 \uAC19\uC774 \uC785\uB825\uD558\uB294 \uAC83\uC740 \uC720\uD6A8\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.", FLASHCARDS: "\uD50C\uB798\uC2DC\uCE74\uB4DC", FLASHCARD_EASY_LABEL: "Easy Button Text", FLASHCARD_GOOD_LABEL: "Good Button Text", FLASHCARD_HARD_LABEL: "Hard Button Text", FLASHCARD_EASY_DESC: 'Customize the label for the "Easy" Button', FLASHCARD_GOOD_DESC: 'Customize the label for the "Good" Button', FLASHCARD_HARD_DESC: 'Customize the label for the "Hard" Button', FLASHCARD_TAGS: "\uD50C\uB798\uC2DC\uCE74\uB4DC \uD0DC\uADF8", FLASHCARD_TAGS_DESC: "\uD0DC\uADF8\uB97C \uACF5\uBC31 \uB610\uB294 \uBE48 \uC904\uB85C \uAD6C\uBD84\uD574\uC11C \uC785\uB825\uD574\uC8FC\uC138\uC694. \uC608) '#flashcards #deck2 #deck3'", CONVERT_FOLDERS_TO_DECKS: "\uD3F4\uB354\uB97C \uB371\uACFC \uC11C\uBE0C\uB371\uC73C\uB85C \uC0AC\uC6A9\uD560\uAE4C\uC694?", CONVERT_FOLDERS_TO_DECKS_DESC: "\uC774 \uAE30\uB2A5\uC740 \uC704\uC758 \uD50C\uB798\uC2DC\uCE74\uB4DC \uD0DC\uADF8 \uC635\uC158\uC744 \uB300\uCCB4\uD569\uB2C8\uB2E4.", INLINE_SCHEDULING_COMMENTS: "\uD50C\uB798\uC2DC\uCE74\uB4DC\uC758 \uB9C8\uC9C0\uB9C9 \uC904\uACFC \uB3D9\uC77C\uD55C \uC904\uC5D0 \uC2A4\uCF00\uC904\uB9C1 \uCF54\uBA58\uD2B8\uB97C \uC800\uC7A5\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?", INLINE_SCHEDULING_COMMENTS_DESC: "\uC774 \uC635\uC158\uC744 \uC0AC\uC6A9\uD558\uBA74 HTML \uC8FC\uC11D\uC774 \uBAA9\uB85D\uC758 \uD3EC\uB9E4\uD305\uC744 \uBB34\uB108\uD2B8\uB9AC\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.", BURY_SIBLINGS_TILL_NEXT_DAY: "Sibling \uCE74\uB4DC\uB97C \uB2E4\uC74C\uB0A0\uAE4C\uC9C0 \uBB3B\uC5B4\uB450\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?", BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "Sibling \uCE74\uB4DC\uB294 \uB3D9\uC77C\uD55C \uCE74\uB4DC \uD14D\uC2A4\uD2B8\uC5D0\uC11C \uC0DD\uC131\uB41C \uCE74\uB4DC\uC785\uB2C8\uB2E4. i.e. cloze deletions", SHOW_CARD_CONTEXT: "\uCE74\uB4DC\uC758 \uBB38\uB9E5(context)\uC744 \uD45C\uC2DC\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?", SHOW_CARD_CONTEXT_DESC: "\uCE74\uB4DC\uC5D0\uC11C 'Title > Heading 1 > Subheading > ... > Subheading' \uC758 \uD45C\uC2DC\uB97C \uD560\uC9C0 \uC124\uC815\uD569\uB2C8\uB2E4.", CARD_MODAL_HEIGHT_PERCENT: "\uD50C\uB798\uC2DC\uCE74\uB4DC \uB192\uC774 \uBE44\uC728", CARD_MODAL_SIZE_PERCENT_DESC: "\uBAA8\uBC14\uC77C \uBC84\uC804 \uD639\uC740 \uB9E4\uC6B0 \uD070 \uC774\uBBF8\uC9C0\uAC00 \uC788\uB294 \uACBD\uC6B0 100%\uB85C \uC124\uC815\uD574\uC57C \uD569\uB2C8\uB2E4.", RESET_DEFAULT: "\uAE30\uBCF8\uAC12\uC73C\uB85C \uCD08\uAE30\uD654", CARD_MODAL_WIDTH_PERCENT: "\uD50C\uB798\uC2DC\uCE74\uB4DC \uB108\uBE44 \uBE44\uC728", RANDOMIZE_CARD_ORDER: "\uB9AC\uBDF0\uC911\uC778 \uCE74\uB4DC\uC758 \uC21C\uC11C\uB97C \uB79C\uB364\uC73C\uB85C \uB450\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?", DISABLE_CLOZE_CARDS: "\uBE48 \uCE78 \uCC44\uC6B0\uAE30 \uCE74\uB4DC\uB97C \uBE44\uD65C\uC131\uD654\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?", CONVERT_HIGHLIGHTS_TO_CLOZES: "==hightlights== \uB97C \uBE48 \uCE78 \uCC44\uC6B0\uAE30\uB85C \uC804\uD658\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?", CONVERT_BOLD_TEXT_TO_CLOZES: "**bolded text** \uB97C \uBE48 \uCE78 \uCC44\uC6B0\uAE30\uB85C \uC804\uD658\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?", CONVERT_CURLY_BRACKETS_TO_CLOZES: "{{curly brackets}} \uB97C \uBE48 \uCE78 \uCC44\uC6B0\uAE30\uB85C \uC804\uD658\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?", INLINE_CARDS_SEPARATOR: "\uC778\uB77C\uC778 \uD50C\uB798\uC2DC\uCE74\uB4DC \uAD6C\uBD84\uC790", FIX_SEPARATORS_MANUALLY_WARNING: "\uC8FC\uC758: \uC774 \uC635\uC158\uC744 \uC218\uC815\uD55C \uD6C4\uC5D0\uB294 \uC774\uBBF8 \uC791\uC131\uB41C \uD50C\uB798\uC2DC\uCE74\uB4DC\uB97C \uC218\uB3D9\uC73C\uB85C \uC218\uC815\uD574\uC57C \uD568\uC744 \uC8FC\uC758\uD558\uC2ED\uC2DC\uC624.", INLINE_REVERSED_CARDS_SEPARATOR: "\uC778\uB77C\uC778 \uBC18\uC804 \uD50C\uB798\uC2DC\uCE74\uB4DC \uAD6C\uBD84\uC790", MULTILINE_CARDS_SEPARATOR: "\uC5EC\uB7EC \uC904 \uD50C\uB798\uC2DC\uCE74\uB4DC \uAD6C\uBD84\uC790", MULTILINE_REVERSED_CARDS_SEPARATOR: "\uC5EC\uB7EC \uC904 \uBC18\uC804 \uD50C\uB798\uC2DC\uCE74\uB4DC \uAD6C\uBD84\uC790", NOTES: "\uB178\uD2B8", REVIEW_PANE_ON_STARTUP: "Enable note review pane on startup", TAGS_TO_REVIEW: "\uB9AC\uBDF0\uC5D0 \uC0AC\uC6A9\uD560 \uD0DC\uADF8", TAGS_TO_REVIEW_DESC: "\uD0DC\uADF8\uB97C \uACF5\uBC31 \uB610\uB294 \uBE48 \uC904\uB85C \uAD6C\uBD84\uD574\uC11C \uC785\uB825\uD574\uC8FC\uC138\uC694. \uC608) '#review #tag2 #tag3'", OPEN_RANDOM_NOTE: "\uB9AC\uBDF0\uB97C \uC704\uD574 \uB79C\uB364 \uB178\uD2B8\uB97C \uC5FD\uB2C8\uB2E4.", OPEN_RANDOM_NOTE_DESC: "\uC774 \uC635\uC158\uC774 \uAEBC\uC838\uC788\uC73C\uBA74, \uB178\uD2B8\uB294 \uC911\uC694\uB3C4(\uD398\uC774\uC9C0 \uB7AD\uD06C)\uC5D0 \uB530\uB77C \uC815\uB82C\uB429\uB2C8\uB2E4.", AUTO_NEXT_NOTE: "\uB9AC\uBDF0 \uD6C4\uC5D0 \uB2E4\uC74C \uB178\uD2B8\uB97C \uC790\uB3D9\uC73C\uB85C \uC5FD\uB2C8\uB2E4.", DISABLE_FILE_MENU_REVIEW_OPTIONS: "\uD30C\uC77C \uBA54\uB274\uC5D0\uC11C\uC758 \uB9AC\uBDF0 \uC635\uC158\uC744 \uBE44\uD65C\uC131\uD654 \uD569\uB2C8\uB2E4. \uC608) \uB9AC\uBDF0: Easy Good Hard", DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "\uC774 \uC635\uC158\uC744 \uBE44\uD65C\uC131\uD654 \uD55C \uD6C4, \uBA85\uB839 \uB2E8\uCD95\uD0A4\uB97C \uC774\uC6A9\uD574 \uB9AC\uBDF0\uD558\uC2E4 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uC774 \uC635\uC158\uC744 \uBCC0\uACBD\uD55C \uD6C4\uC5D0 \uC635\uC2DC\uB514\uC5B8\uC744 \uC0C8\uB85C\uACE0\uCE68 \uD558\uC2ED\uC2DC\uC624.", MAX_N_DAYS_REVIEW_QUEUE: "\uC624\uB978\uCABD \uD328\uB110\uC5D0 \uD45C\uC2DC\uD560 \uCD5C\uB300 \uC77C\uC218", MIN_ONE_DAY: "\uC801\uC5B4\uB3C4 1\uC774\uC0C1\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.", VALID_NUMBER_WARNING: "\uC720\uD6A8\uD55C \uC22B\uC790\uB97C \uC785\uB825\uD574\uC8FC\uC138\uC694.", UI_PREFERENCES: "\uC0AC\uC6A9\uC790 \uC778\uD130\uD398\uC774\uC2A4 \uAE30\uBCF8 \uC124\uC815", INITIALLY_EXPAND_SUBDECKS_IN_TREE: "\uB371 \uD2B8\uB9AC\uB294 \uCC98\uC74C\uC5D0 \uD655\uC7A5\uB41C \uAC83\uC73C\uB85C \uD45C\uC2DC\uB418\uC5B4\uC57C \uD569\uB2C8\uB2E4.", INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "\uAC19\uC740 \uCE74\uB4DC\uC5D0 \uC911\uCCA9\uB41C \uB371\uC744 \uC811\uC73C\uB824\uBA74 \uC774 \uC635\uC158\uC744 \uB044\uC2ED\uC2DC\uC624. \uAC19\uC740 \uD30C\uC77C\uC5D0 \uC5EC\uB7EC \uB371\uC5D0 \uC18D\uD55C \uCE74\uB4DC\uAC00 \uC788\uB294 \uACBD\uC6B0 \uC720\uC6A9\uD569\uB2C8\uB2E4.", ALGORITHM: "\uC54C\uACE0\uB9AC\uC998", CHECK_ALGORITHM_WIKI: '\uB354 \uB9CE\uC740 \uC815\uBCF4\uB97C \uC6D0\uD558\uC2DC\uBA74, algorithm implementation\uC744 \uD655\uC778\uD574\uC8FC\uC138\uC694.', BASE_EASE: "\uAE30\uBCF8 ease", BASE_EASE_DESC: "\uCD5C\uC19F\uAC12 = 130, \uC801\uC815\uCE58\uB294 \uB300\uB7B5 250\uC785\uB2C8\uB2E4.", BASE_EASE_MIN_WARNING: "\uAE30\uBCF8 ease\uB294 \uC801\uC5B4\uB3C4 130 \uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.", LAPSE_INTERVAL_CHANGE: "\uD50C\uB798\uC2DC\uCE74\uB4DC/\uB178\uD2B8\uB97C \uC5B4\uB824\uC6C0(Hard)\uC73C\uB85C \uB9AC\uBDF0\uD588\uC744 \uB54C\uC758 \uAC04\uACA9 \uBCC0\uACBD", LAPSE_INTERVAL_CHANGE_DESC: "\uC0C8\uB85C\uC6B4 \uAC04\uACA9 = \uC774\uC804 \uAC04\uACA9 * \uAC04\uACA9\uBCC0\uACBD \uAC12 / 100.", EASY_BONUS: "\uC26C\uC6C0(Easy) \uBCF4\uB108\uC2A4", EASY_BONUS_DESC: "\uC26C\uC6C0(Easy) \uBCF4\uB108\uC2A4\uB294 \uD50C\uB798\uC2DC\uCE74\uB4DC/\uB178\uD2B8\uC5D0\uC11C \uC88B\uC74C(Good)\uACFC \uC26C\uC6C0(Easy) \uC0AC\uC774\uC758 \uAC04\uACA9 \uCC28\uC774\uB97C \uC124\uC815\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. (\uCD5C\uC18C = 100%)", EASY_BONUS_MIN_WARNING: "\uC26C\uC6C0(Easy) \uBCF4\uB108\uC2A4\uB294 \uC801\uC5B4\uB3C4 100\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.", MAX_INTERVAL: "Maximum interval in days", MAX_INTERVAL_DESC: "\uAC04\uACA9\uC758 \uC0C1\uD55C\uC120\uC744 \uB458 \uC218 \uC788\uC2B5\uB2C8\uB2E4. (\uAE30\uBCF8\uAC12 = 100\uB144)", MAX_INTERVAL_MIN_WARNING: "\uCD5C\uB300 \uAC04\uACA9\uC740 \uC801\uC5B4\uB3C4 1\uC77C\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.", MAX_LINK_CONTRIB: "\uCD5C\uB300 \uC5F0\uACB0 \uAE30\uC5EC\uB3C4", MAX_LINK_CONTRIB_DESC: "\uB9C1\uD06C\uB41C \uB178\uD2B8\uC758 \uCD08\uAE30 ease\uC5D0 \uB300\uD55C \uAC00\uC911\uCE58\uAC00 \uC801\uC6A9\uB41C ease\uC758 \uCD5C\uB300 \uAE30\uC5EC\uB3C4\uC785\uB2C8\uB2E4.", LOGGING: "\uB85C\uAE45", DISPLAY_DEBUG_INFO: "\uB514\uBC84\uAE45 \uC815\uBCF4\uB97C \uAC1C\uBC1C\uC790 \uCF58\uC194\uC5D0 \uD45C\uC2DC\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?", // sidebar.ts NOTES_REVIEW_QUEUE: "\uB9AC\uBDF0\uD560 \uB178\uD2B8 \uB300\uAE30\uC5F4", CLOSE: "\uB2EB\uAE30", NEW: "New", YESTERDAY: "\uC5B4\uC81C", TODAY: "\uC624\uB298", TOMORROW: "\uB0B4\uC77C", // stats-modal.tsx STATS_TITLE: "\uD1B5\uACC4", MONTH: "\uC6D4", QUARTER: "\uBD84\uAE30", YEAR: "\uB144", LIFETIME: "\uD3C9\uC0DD", FORECAST: "\uC608\uCE21", FORECAST_DESC: "\uC774\uD6C4\uC5D0 \uD559\uC2B5\uD560 \uCE74\uB4DC\uC758 \uC218", SCHEDULED: "Scheduled", DAYS: "\uC77C", NUMBER_OF_CARDS: "\uCE74\uB4DC\uC758 \uC218", REVIEWS_PER_DAY: "\uD3C9\uADE0: ${avg} \uB9AC\uBDF0/\uC77C", INTERVALS: "\uAC04\uACA9", INTERVALS_DESC: "\uB9AC\uBDF0\uB97C \uB2E4\uC2DC \uD560 \uB54C \uAE4C\uC9C0\uC758 \uAE30\uAC04", COUNT: "Count", INTERVALS_SUMMARY: "\uD3C9\uADE0 \uAC04\uACA9: ${avg}, \uAC00\uC7A5 \uAE34 \uAC04\uACA9: ${longest}", EASES: "Eases", EASES_SUMMARY: "Average ease: ${avgEase}", CARD_TYPES: "\uCE74\uB4DC \uD0C0\uC785", CARD_TYPES_DESC: "\uC5EC\uAE30\uC5D0\uB294 \uBB3B\uC5B4\uB454 \uCE74\uB4DC\uB3C4 \uD3EC\uD568\uB429\uB2C8\uB2E4.", CARD_TYPE_NEW: "New", CARD_TYPE_YOUNG: "Young", CARD_TYPE_MATURE: "Mature", CARD_TYPES_SUMMARY: "\uC804\uCCB4 \uCE74\uB4DC \uC218: ${totalCardsCount}" }; // src/lang/locale/mr.ts var mr_default = {}; // src/lang/locale/nl.ts var nl_default = {}; // src/lang/locale/no.ts var no_default = {}; // src/lang/locale/pl.ts var pl_default = {}; // src/lang/locale/pt.ts var pt_default = {}; // src/lang/locale/pt-br.ts var pt_br_default = { // flashcard-modal.tsx DECKS: "Baralhos", DUE_CARDS: "Cartas para Colocar em Dia", NEW_CARDS: "Novas Cartas", TOTAL_CARDS: "Total de Cartas", BACK: "Back", SKIP: "Skip", EDIT_CARD: "Edit Card", RESET_CARD_PROGRESS: "Reiniciar o Progresso da Carta", HARD: "Dif\xEDcil", GOOD: "OK", EASY: "F\xE1cil", SHOW_ANSWER: "Mostrar Resposta", CARD_PROGRESS_RESET: "O Progresso da Carta foi reiniciado", SAVE: "Save", CANCEL: "Cancel", NO_INPUT: "No input provided.", CURRENT_EASE_HELP_TEXT: "Current Ease: ", CURRENT_INTERVAL_HELP_TEXT: "Current Interval: ", CARD_GENERATED_FROM: "Generated from: ${notePath}", // main.ts OPEN_NOTE_FOR_REVIEW: "Abrir uma nota para revisar", REVIEW_CARDS: "Revisar flashcards", REVIEW_EASY_FILE_MENU: "Revis\xE3o: F\xE1cil", REVIEW_GOOD_FILE_MENU: "Revis\xE3o: OK", REVIEW_HARD_FILE_MENU: "Revis\xE3o: Dif\xEDcil", REVIEW_NOTE_EASY_CMD: "Revisar nota como f\xE1cil", REVIEW_NOTE_GOOD_CMD: "Revisar nota como OK", REVIEW_NOTE_HARD_CMD: "Revisar nota como dif\xEDcil", REVIEW_ALL_CARDS: "Revisar flashcards de todas as notas", CRAM_ALL_CARDS: "Select a deck to cram", REVIEW_CARDS_IN_NOTE: "Revisar flashcards nessa nota", CRAM_CARDS_IN_NOTE: "Revisar todas as flashcards nessa nota", VIEW_STATS: "Ver estat\xEDsticas", STATUS_BAR: "Revis\xE3o: ${dueNotesCount} nota(s), ${dueFlashcardsCount} Carta(s) para colocar em dia", SYNC_TIME_TAKEN: "Sicroniza\xE7\xE3o levou ${t}ms", NOTE_IN_IGNORED_FOLDER: "Nota \xE9 salva na pasta ignorada (cheque as configura\xE7\xF5es).", PLEASE_TAG_NOTE: "Por favor etiquete a nota apropriadamente para revisar (nas configura\xE7\xF5es).", RESPONSE_RECEIVED: "Resposta recebida.", NO_DECK_EXISTS: "Nenhum baralho existe para ${deckName}", ALL_CAUGHT_UP: "Voc\xEA colocou tudo em prazo agora :D.", // scheduling.ts DAYS_STR_IVL: "${interval} dia(s)", MONTHS_STR_IVL: "${interval} m\xEAs(es)", YEARS_STR_IVL: "${interval} ano(s)", DAYS_STR_IVL_MOBILE: "${interval}d", MONTHS_STR_IVL_MOBILE: "${interval}m", YEARS_STR_IVL_MOBILE: "${interval}a", // settings.ts SETTINGS_HEADER: "Plguin Spaced Repetition - Configura\xE7\xE3o", CHECK_WIKI: 'Para mais informa\xE7\xF5es, checke o wiki.', FOLDERS_TO_IGNORE: "Pastas para ignorar", FOLDERS_TO_IGNORE_DESC: "Ensira o caminho das pastas separado por quebras de linha ex: Templates Meta/Scripts", FLASHCARDS: "Flashcards", FLASHCARD_EASY_LABEL: "Texto do Bot\xE3o de F\xE1cil", FLASHCARD_GOOD_LABEL: "Texto do Bot\xE3o de OK", FLASHCARD_HARD_LABEL: "Texto do Bot\xE3o de Dif\xEDcil", FLASHCARD_EASY_DESC: 'Costumize o r\xF3tulo para o bot\xE3o de "F\xE1cil"', FLASHCARD_GOOD_DESC: 'Costumize o r\xF3tulo para o bot\xE3o de "OK"', FLASHCARD_HARD_DESC: 'Customize o r\xF3tulo para o bot\xE3o de "Dif\xEDcil"', FLASHCARD_TAGS: "Etiquetas dos Flashcards", FLASHCARD_TAGS_DESC: "Ensira etiquetas separadas por espa\xE7os ou quebras de linha ex: #flashcards #baralho2 #baralho3.", CONVERT_FOLDERS_TO_DECKS: "Converter pastas para baralhos e sub-baralhos?", CONVERT_FOLDERS_TO_DECKS_DESC: "Isso \xE9 uma alternativa para a op\xE7\xE3o de etiqueta dos Flashcards em cima.", INLINE_SCHEDULING_COMMENTS: "Salvar coment\xE1rios de agendamento na mesma linha que a \xFAltima linha do flashcard?", INLINE_SCHEDULING_COMMENTS_DESC: "Ligar isso vai fazer com que os coment\xE1rios em HTML n\xE3o quebrem a formata\xE7\xE3o de listas.", BURY_SIBLINGS_TILL_NEXT_DAY: "Enterrar cartas irm\xE3s at\xE9 o pr\xF3ximo dia?", BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "Cartas irm\xE3s s\xE3o geradas pelo texto da mesma carta ex: omiss\xE3o de palavras", SHOW_CARD_CONTEXT: "Mostrar conxtexto nas cartas?", SHOW_CARD_CONTEXT_DESC: "ex: T\xEDtulo > Cabe\xE7alho 1 > Subcabe\xE7alho > ... > Subcabe\xE7alho", CARD_MODAL_HEIGHT_PERCENT: "Porcentagem da Altura do Flashcard", CARD_MODAL_SIZE_PERCENT_DESC: "Deveria estar configurado em 100% em dispositivos m\xF3veis ou se voc\xEA tem imagens muito grandes", RESET_DEFAULT: "Reiniciar para a pr\xE9-defini\xE7\xE3o", CARD_MODAL_WIDTH_PERCENT: "Porcentagem de Largura do Flashcard", RANDOMIZE_CARD_ORDER: "Aleatorizar a ordem das cartas durante a revis\xE3o?", DISABLE_CLOZE_CARDS: "Desabilitar cartas que usam omiss\xE3o de palavras?", CONVERT_HIGHLIGHTS_TO_CLOZES: "Converter ==marca-texto== em omiss\xF5es?", CONVERT_BOLD_TEXT_TO_CLOZES: "Converter **texto em negrito** em omiss\xF5es?", CONVERT_CURLY_BRACKETS_TO_CLOZES: "Converter {{chaves}} em omiss\xF5es?", INLINE_CARDS_SEPARATOR: "Separador para flashcards inline", FIX_SEPARATORS_MANUALLY_WARNING: "Note que depois de mudar isso voc\xEA vai ter que manualmente mudar quaisquer flashcards que voc\xEA tenha.", INLINE_REVERSED_CARDS_SEPARATOR: "Separador para flashcards inline reversos", MULTILINE_CARDS_SEPARATOR: "Separador para flashcards de m\xFAltiplas linhas", MULTILINE_REVERSED_CARDS_SEPARATOR: "Separador para flashcards de m\xFAltiplas linhas reversos", NOTES: "Notas", REVIEW_PANE_ON_STARTUP: "Enable note review pane on startup", TAGS_TO_REVIEW: "Etiquetas para revisar", TAGS_TO_REVIEW_DESC: "Ensira etiquetas separadas por espa\xE7os ou quebra de linhas ex: #revisar #etiqueta2 #etiqueta3.", OPEN_RANDOM_NOTE: "Abrir uma nota aleat\xF3ria para revisar", OPEN_RANDOM_NOTE_DESC: "Quando voc\xEA desabilitar isso, as notas v\xE3o ser ordenadas por import\xE2ncia (PageRank).", AUTO_NEXT_NOTE: "Abrir a pr\xF3xima nota automaticamente depois de uma revis\xE3o", DISABLE_FILE_MENU_REVIEW_OPTIONS: "Desabilitar op\xE7\xF5es de revis\xE3o no menu de arquivos ex: Revis\xE3o: F\xE1cil OK Dif\xEDcil", DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "Depois de desabilitar, voc\xEA pode revisar usando os atalhos de comando. Reinicie Obsidian depois de mudar isso.", MAX_N_DAYS_REVIEW_QUEUE: "N\xFAmero m\xE1ximo de dias para exibir no painel direito", MIN_ONE_DAY: "O n\xFAmero de dias deve ser pelo menos 1.", VALID_NUMBER_WARNING: "Por favor ensira um n\xFAmero v\xE1lido.", UI_PREFERENCES: "Prefer\xEAncias de UI", INITIALLY_EXPAND_SUBDECKS_IN_TREE: "\xC1rvores de baralhos devem inicialmente serem exibidas como expandidas", INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "Desabilite isso para colapsar baralhos que est\xE3o um dentro do outro na mesma carta. \xDAtil se voc\xEA tem cartas que pertencem a muitos baralhos em um mesmo arquivo.", ALGORITHM: "Algor\xEDtmo", CHECK_ALGORITHM_WIKI: 'Para mais informa\xE7\xF5es, cheque a implementa\xE7\xE3o do algor\xEDtmo.', BASE_EASE: "Facilidade base", BASE_EASE_DESC: "m\xEDnimo = 130, preferivelmente aproximadamente 250.", BASE_EASE_MIN_WARNING: "A facilidade base deve ser pelo menos 130.", LAPSE_INTERVAL_CHANGE: "Mudan\xE7a de intervalo quando voc\xEA revisa um(a) flashcard/nota como dif\xEDcil", LAPSE_INTERVAL_CHANGE_DESC: "novoIntervalo = velhoIntervalo * mudancaIntervalo / 100.", EASY_BONUS: "B\xF4nus de F\xE1cil", EASY_BONUS_DESC: "O b\xF4nus de f\xE1cil te permite mudar a difer\xEAncia entre intervalos de responder OK e F\xE1cil em um(a) flashcard/nota (m\xEDnimo = 100%).", EASY_BONUS_MIN_WARNING: "O b\xF4nus de f\xE1cil deve ser pelo menos 100.", MAX_INTERVAL: "Maximum interval in days", MAX_INTERVAL_DESC: "Te permite colocar um limite m\xE1ximo no intervalo (pr\xE9-defini\xE7\xE3o = 100 anos).", MAX_INTERVAL_MIN_WARNING: "O intervalo m\xE1ximo deve ser pelo menos 1 dia.", MAX_LINK_CONTRIB: "Contribui\xE7\xE3o M\xE1xima de Links", MAX_LINK_CONTRIB_DESC: "Contribui\xE7\xE3o m\xE1xima da facilidade ponderada das notas linkadas \xE0 facilidade inicial.", LOGGING: "Logging", DISPLAY_DEBUG_INFO: "Mostrar informa\xE7\xE3o de debugging no console de desenvolvimento?", // sidebar.ts NOTES_REVIEW_QUEUE: "Fila de Notas para Revisar", CLOSE: "Fechar", NEW: "Novo", YESTERDAY: "Ontem", TODAY: "Hoje", TOMORROW: "Amanh\xE3", // stats-modal.tsx STATS_TITLE: "Estat\xEDsticas", MONTH: "M\xEAs", QUARTER: "Quarto", YEAR: "Ano", LIFETIME: "Tempo Total", FORECAST: "Previs\xE3o", FORECAST_DESC: "O n\xFAmero de cartas a serem colocadas em dia no futuro", SCHEDULED: "Agendado", DAYS: "Dias", NUMBER_OF_CARDS: "N\xFAmero de cartas", REVIEWS_PER_DAY: "M\xE9dia: ${avg} revis\xF5es/dia", INTERVALS: "Intervalos", INTERVALS_DESC: "Atrasos at\xE9 que as revis\xF5es sejam exibidas de novo", COUNT: "Contagem", INTERVALS_SUMMARY: "Intervalo em m\xE9dia: ${avg}, Maior intervalo: ${longest}", EASES: "Facilidades", EASES_SUMMARY: "Facilidade em m\xE9dia: ${avgEase}", CARD_TYPES: "Tipos de Cartas", CARD_TYPES_DESC: "Isso tamb\xE9m inclui cartas enterrados, caso existam", CARD_TYPE_NEW: "Novo", CARD_TYPE_YOUNG: "Jovem", CARD_TYPE_MATURE: "Amadurecido", CARD_TYPES_SUMMARY: "Total de cartas: ${totalCardsCount}" }; // src/lang/locale/ro.ts var ro_default = {}; // src/lang/locale/ru.ts var ru_default = { // flashcard-modal.tsx DECKS: "\u041A\u043E\u043B\u043E\u0434\u044B", DUE_CARDS: "\u041F\u0440\u0435\u0434\u0441\u0442\u043E\u044F\u0449\u0438\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438", NEW_CARDS: "\u041D\u043E\u0432\u044B\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438", TOTAL_CARDS: "\u0412\u0441\u0435\u0433\u043E \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A", BACK: "\u041D\u0430\u0437\u0430\u0434", SKIP: "\u041F\u0440\u043E\u043F\u0443\u0441\u0442\u0438\u0442\u044C", EDIT_CARD: "\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0443", RESET_CARD_PROGRESS: "\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C \u043F\u0440\u043E\u0433\u0440\u0435\u0441\u0441 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438", HARD: "\u0421\u043B\u043E\u0436\u043D\u043E", GOOD: "\u041D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u043E", EASY: "\u041B\u0435\u0433\u043A\u043E", SHOW_ANSWER: "\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u043E\u0442\u0432\u0435\u0442", CARD_PROGRESS_RESET: "\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C \u043F\u0440\u043E\u0433\u0440\u0435\u0441\u0441 \u0438\u0437\u0443\u0447\u0435\u043D\u0438\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438", SAVE: "\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C", CANCEL: "\u041E\u0442\u043C\u0435\u043D\u0430", NO_INPUT: "\u041F\u0443\u0441\u0442\u043E\u0439 \u0432\u0432\u043E\u0434.", CURRENT_EASE_HELP_TEXT: "\u0422\u0435\u043A\u0443\u0449\u0430\u044F \u041B\u0435\u0433\u043A\u043E\u0441\u0442\u044C: ", CURRENT_INTERVAL_HELP_TEXT: "\u0422\u0435\u043A\u0443\u0449\u0438\u0439 \u0438\u043D\u0442\u0435\u0440\u0432\u0430\u043B: ", CARD_GENERATED_FROM: "\u0421\u0433\u0435\u043D\u0435\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u043E \u0438\u0437: ${notePath}", // main.ts OPEN_NOTE_FOR_REVIEW: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0437\u0430\u043C\u0435\u0442\u043A\u0443 \u0434\u043B\u044F \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F", REVIEW_CARDS: "\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u044C \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438", REVIEW_EASY_FILE_MENU: "\u041F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435: \u041B\u0435\u0433\u043A\u043E", REVIEW_GOOD_FILE_MENU: "\u041F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435: \u041D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u043E", REVIEW_HARD_FILE_MENU: "\u041F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435: \u0421\u043B\u043E\u0436\u043D\u043E", REVIEW_NOTE_EASY_CMD: "\u041F\u043E\u0432\u0442\u043E\u0440\u044F\u0442\u044C \u0437\u0430\u043C\u0435\u0442\u043A\u0443 \u043A\u0430\u043A \u041B\u0451\u0433\u043A\u0443\u044E", REVIEW_NOTE_GOOD_CMD: "\u041F\u043E\u0432\u0442\u043E\u0440\u044F\u0442\u044C \u0437\u0430\u043C\u0435\u0442\u043A\u0443 \u043A\u0430\u043A \u041D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u0443\u044E", REVIEW_NOTE_HARD_CMD: "\u041F\u043E\u0432\u0442\u043E\u0440\u044F\u0442\u044C \u0437\u0430\u043C\u0435\u0442\u043A\u0443 \u043A\u0430\u043A \u0421\u043B\u043E\u0436\u043D\u0443\u044E", CRAM_ALL_CARDS: "\u0417\u0443\u0431\u0440\u0438\u0442\u044C \u0432\u0441\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0432 \u044D\u0442\u043E\u0439 \u043A\u043E\u043B\u043E\u0434\u0435", REVIEW_ALL_CARDS: "\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u044C \u0432\u0441\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0432\u043E \u0432\u0441\u0435\u0445 \u0437\u0430\u043C\u0435\u0442\u043A\u0430\u0445", REVIEW_CARDS_IN_NOTE: "\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u044C \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0432 \u044D\u0442\u043E\u0439 \u0437\u0430\u043C\u0435\u0442\u043A\u0435", CRAM_CARDS_IN_NOTE: "\u0417\u0443\u0431\u0440\u0438\u0442\u044C \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0432 \u044D\u0442\u043E\u0439 \u0437\u0430\u043C\u0435\u0442\u043A\u0435", VIEW_STATS: "\u041F\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0443", STATUS_BAR: "\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u044C: ${dueNotesCount} \u0437\u0430\u043C\u0435\u0442\u043E\u043A(-\u043A\u0438), ${dueFlashcardsCount} \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A(-\u043A\u0438) \u043F\u0440\u0435\u0434\u0441\u0442\u043E\u0438\u0442", SYNC_TIME_TAKEN: "\u0421\u0438\u043D\u0445\u0440\u043E\u043D\u0438\u0437\u0430\u0446\u0438\u044F \u0437\u0430\u043D\u044F\u043B\u0430 ${t}\u043C\u0441", NOTE_IN_IGNORED_FOLDER: "\u0417\u0430\u043C\u0435\u0442\u043A\u0430 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0430 \u0432 \u0438\u0433\u043D\u043E\u0440\u0438\u0440\u0443\u0435\u043C\u0443\u044E \u043F\u0430\u043F\u043A\u0443 (\u0441\u043C. \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438).", PLEASE_TAG_NOTE: "\u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430 \u043F\u043E\u043C\u0435\u0442\u044C\u0442\u0435 \u0437\u0430\u043C\u0435\u0442\u043A\u0443 \u043A\u0430\u043A \u043D\u0430\u0434\u043E \u0434\u043B\u044F \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F (\u0441\u043C. \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438).", RESPONSE_RECEIVED: "\u041E\u0442\u0432\u0435\u0442 \u043F\u043E\u043B\u0443\u0447\u0435\u043D.", NO_DECK_EXISTS: "\u041D\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0443\u0440\u043E\u0432\u043D\u044F ${deckName}", ALL_CAUGHT_UP: "\u041C\u043E\u043B\u043E\u0434\u0435\u0446! \u0422\u044B \u0441\u043F\u0440\u0430\u0432\u0438\u043B\u0441\u044F \u0438 \u0434\u043E\u0448\u0435\u043B \u0434\u043E \u043A\u043E\u043D\u0446\u0430! :D", // scheduling.ts DAYS_STR_IVL: "${interval} \u0434\u043D\u0435\u0439", MONTHS_STR_IVL: "${interval} \u043C\u0435\u0441\u044F\u0446\u043E\u0432", YEARS_STR_IVL: "${interval} \u0433\u043E\u0434\u0430 (\u043B\u0435\u0442)", DAYS_STR_IVL_MOBILE: "${interval}\u0434.", MONTHS_STR_IVL_MOBILE: "${interval}\u043C.", YEARS_STR_IVL_MOBILE: "${interval}\u0433.", // settings.ts SETTINGS_HEADER: "\u041F\u043B\u0430\u0433\u0438\u043D Spaced Repetition - \u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438", CHECK_WIKI: '\u0414\u043B\u044F \u0434\u043E\u043F. \u0438\u043D\u0444\u044B, \u0441\u043C\u043E\u0442\u0440\u0438 wiki.', FOLDERS_TO_IGNORE: "\u0418\u0433\u043D\u043E\u0440\u0438\u0440\u0443\u0435\u043C\u044B\u0435 \u043F\u0430\u043F\u043A\u0438", FOLDERS_TO_IGNORE_DESC: "\u0412\u0435\u0434\u0438\u0442\u0435 \u043F\u0443\u0442\u0438 \u043F\u0430\u043F\u043E\u043A, \u043A\u0430\u0436\u0434\u0430\u044F \u043D\u0430 \u0441\u0432\u043E\u0435\u0439 \u0441\u0442\u0440\u043E\u043A\u0435, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440: Templates Meta/Scripts", FLASHCARDS: "\u041A\u0430\u0440\u0442\u043E\u0447\u043A\u0438", FLASHCARD_EASY_LABEL: "\u0422\u0435\u043A\u0441\u0442 \u043A\u043D\u043E\u043F\u043A\u0438 \u041B\u0435\u0433\u043A\u043E", FLASHCARD_GOOD_LABEL: "\u0422\u0435\u043A\u0441\u0442 \u043A\u043D\u043E\u043F\u043A\u0438 \u041D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u043E", FLASHCARD_HARD_LABEL: "\u0422\u0435\u043A\u0441\u0442 \u043A\u043D\u043E\u043F\u043A\u0438 \u0421\u043B\u043E\u0436\u043D\u043E", FLASHCARD_EASY_DESC: '\u041D\u0430\u0441\u0442\u0440\u043E\u0438\u0442\u044C \u044F\u0440\u043B\u044B\u043A \u0434\u043B\u044F \u043A\u043D\u043E\u043F\u043A\u0438 "\u041B\u0435\u0433\u043A\u043E"', FLASHCARD_GOOD_DESC: '\u041D\u0430\u0441\u0442\u0440\u043E\u0438\u0442\u044C \u044F\u0440\u043B\u044B\u043A \u0434\u043B\u044F \u043A\u043D\u043E\u043F\u043A\u0438 "\u041D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u043E"', FLASHCARD_HARD_DESC: '\u041D\u0430\u0441\u0442\u0440\u043E\u0438\u0442\u044C \u044F\u0440\u043B\u044B\u043A \u0434\u043B\u044F \u043A\u043D\u043E\u043F\u043A\u0438 "\u0421\u043B\u043E\u0436\u043D\u043E"', FLASHCARD_TAGS: "\u0422\u044D\u0433\u0438 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A", FLASHCARD_TAGS_DESC: "\u0412\u0435\u0434\u0438\u0442\u0435 \u0442\u044D\u0433\u0438 \u0440\u0430\u0437\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0435 Enter-\u043E\u043C \u0438\u043B\u0438 \u043F\u0440\u043E\u0431\u0435\u043B\u043E\u043C, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440: #flashcards #deck2 #deck3.", CONVERT_FOLDERS_TO_DECKS: "\u041A\u043E\u043D\u0432\u0435\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043F\u0430\u043F\u043A\u0438 \u0432 \u0443\u0440\u043E\u0432\u043D\u0438 \u0438 \u043F\u043E\u0434\u0443\u0440\u043E\u0432\u043D\u0438?", CONVERT_FOLDERS_TO_DECKS_DESC: "\u042D\u0442\u043E \u0430\u043B\u044C\u0442\u0435\u0440\u043D\u0430\u0442\u0438\u0432\u0430 \u0442\u044D\u0433\u0430\u043C \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A, \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430 \u0441\u0432\u0435\u0440\u0445\u0443.", INLINE_SCHEDULING_COMMENTS: "\u0421\u043E\u0445\u0440\u0430\u043D\u044F\u0442\u044C \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439 \u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u043D\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0439 \u0441\u0442\u0440\u043E\u043A\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438?", INLINE_SCHEDULING_COMMENTS_DESC: "\u0412\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435 \u044D\u0442\u043E\u0439 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0441\u0434\u0435\u043B\u0430\u0435\u0442 \u0442\u0430\u043A, \u0447\u0442\u043E HTML \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0438 \u043D\u0435 \u0431\u0443\u0434\u0443\u0442 \u043B\u043E\u043C\u0430\u0442\u044C \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0441\u043F\u0438\u0441\u043A\u0430.", BURY_SIBLINGS_TILL_NEXT_DAY: "\u041F\u0440\u044F\u0442\u0430\u0442\u044C \u0440\u043E\u0434\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0434\u043E \u0441\u043B\u0435\u0434. \u0434\u043D\u044F?", BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "\u0420\u043E\u0434\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 - \u0442\u0435, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043E\u0431\u0440\u0430\u0437\u043E\u0432\u0430\u043D\u044B \u0438\u0437 \u043E\u0434\u043D\u043E\u0433\u043E \u0442\u0435\u043A\u0441\u0442\u0430, \u043F\u0440\u0438\u043C\u0435\u0440: \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0441 \u043F\u0440\u043E\u043F\u0443\u0441\u043A\u0430\u043C\u0438 ([...])", SHOW_CARD_CONTEXT: "\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442(\u0443\u0440\u043E\u0432\u0435\u043D\u044C) \u0432 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0430\u0445(\u0432\u043E \u0432\u0440\u0435\u043C\u044F \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F)?", SHOW_CARD_CONTEXT_DESC: "\u043F\u0440\u0438\u043C\u0435\u0440: Title > Heading 1 > Subheading > ... > Subheading", CARD_MODAL_HEIGHT_PERCENT: "\u0412\u044B\u0441\u043E\u0442\u0430 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0432\u043F\u0440\u043E\u0446\u0435\u043D\u0442\u0430\u0445", CARD_MODAL_SIZE_PERCENT_DESC: "\u0415\u0441\u043B\u0438 \u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0435\u0441\u044C \u043C\u043E\u0431\u0438\u043B\u044C\u043D\u044B\u043C \u0442\u0435\u043B\u0435\u0444\u043E\u043D\u043E\u043C, \u0432\u044B\u0441\u0442\u0430\u0432\u044C\u0442\u0435 100% \u0438\u043B\u0438 \u0443 \u0432\u0430\u0441 \u0431\u0443\u0434\u0443\u0442 \u043E\u0433\u0440\u043E\u043C\u043D\u044B\u0435 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F", RESET_DEFAULT: "\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E", CARD_MODAL_WIDTH_PERCENT: "\u0428\u0438\u0440\u0438\u043D\u0430 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438 \u0432 \u043F\u0440\u043E\u0446\u0435\u043D\u0442\u0430\u0445", RANDOMIZE_CARD_ORDER: "\u0421\u043B\u0443\u0447\u0430\u0439\u043D\u044B\u0439 \u043F\u043E\u0440\u044F\u0434\u043E\u043A \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F?", DISABLE_CLOZE_CARDS: "\u0412\u044B\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043A\u0430\u0440\u0442\u044B \u0441 \u043F\u0440\u043E\u043F\u0443\u0441\u043A\u0430\u043C\u0438 (\u043F\u0440\u0438\u043C\u0435\u0440: [...])?", CONVERT_HIGHLIGHTS_TO_CLOZES: "\u041A\u043E\u043D\u0432\u0435\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C ==\u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0439 \u0442\u0435\u043A\u0441\u0442== \u0432 \u043F\u0440\u043E\u043F\u0443\u0441\u043A\u0438 (\u043F\u0440\u0438\u043C\u0435\u0440: [...])?", CONVERT_BOLD_TEXT_TO_CLOZES: "\u041A\u043E\u043D\u0432\u0435\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C **\u0436\u0438\u0440\u043D\u044B\u0439 \u0442\u0435\u043A\u0441\u0442** \u0432 \u043F\u0440\u043E\u043F\u0443\u0441\u043A\u0438 (\u043F\u0440\u0438\u043C\u0435\u0440: [...])?", CONVERT_CURLY_BRACKETS_TO_CLOZES: "\u041A\u043E\u043D\u0432\u0435\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C {{\u0444\u0438\u0433\u0443\u0440\u043D\u044B\u0435 \u0441\u043A\u043E\u0431\u043A\u0438}} \u0432 \u043F\u0440\u043E\u043F\u0443\u0441\u043A\u0438 (\u043F\u0440\u0438\u043C\u0435\u0440: [...])?", INLINE_CARDS_SEPARATOR: "\u0420\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C \u0434\u043B\u044F \u0432\u043D\u0443\u0442\u0440\u0438\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0445 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A", FIX_SEPARATORS_MANUALLY_WARNING: "\u0412\u043D\u0438\u043C\u0430\u043D\u0438\u0435! \u041F\u043E\u0441\u043B\u0435 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u044D\u0442\u043E\u0433\u043E \u0432\u0430\u043C \u043F\u0440\u0438\u0434\u0451\u0442\u0441\u044F \u0432\u0440\u0443\u0447\u043D\u0443\u044E \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044E\u0449\u0438\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438", INLINE_REVERSED_CARDS_SEPARATOR: "\u0420\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C \u0434\u043B\u044F \u043E\u0431\u0440\u0430\u0442\u043D\u044B\u0445 \u0432\u043D\u0443\u0442\u0440\u0438\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0445 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A", MULTILINE_CARDS_SEPARATOR: "\u0420\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C \u0434\u043B\u044F \u043C\u043D\u043E\u0433\u043E\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0445 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A", MULTILINE_REVERSED_CARDS_SEPARATOR: "\u0420\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C \u0434\u043B\u044F \u043E\u0431\u0440\u0430\u0442\u043D\u044B\u0445 \u043C\u043D\u043E\u0433\u043E\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0445 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A", NOTES: "\u0417\u0430\u043C\u0435\u0442\u043A\u0438", REVIEW_PANE_ON_STARTUP: "\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043F\u0430\u043D\u0435\u043B\u044C \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F \u043F\u0440\u0438 \u0437\u0430\u043F\u0443\u0441\u043A\u0435 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u044B", TAGS_TO_REVIEW: "\u0422\u044D\u0433\u0438 \u0434\u043B\u044F \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F", TAGS_TO_REVIEW_DESC: "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0442\u044D\u0433\u0438, \u0440\u0430\u0437\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0435 Enter-\u0430\u043C\u0438 \u0438\u043B\u0438 \u043F\u0440\u043E\u0431\u0435\u043B\u0430\u043C\u0438, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440: #review #tag2 #tag3.", OPEN_RANDOM_NOTE: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0441\u043B\u0443\u0447\u0430\u0439\u043D\u0443\u044E \u0437\u0430\u043C\u0435\u0442\u043A\u0443 \u0434\u043B\u044F \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F", OPEN_RANDOM_NOTE_DESC: "\u0415\u0441\u043B\u0438 \u0432\u044B\u043A\u043B\u044E\u0447\u0438\u0442\u044C, \u0442\u043E \u0437\u0430\u043C\u0435\u0442\u043A\u0438 \u0431\u0443\u0434\u0443\u0442 \u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u044C \u043F\u043E \u0432\u0430\u0436\u043D\u043E\u0441\u0442\u0438 (PageRank).", AUTO_NEXT_NOTE: "\u041F\u043E\u0441\u043B\u0435 \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u043E\u0442\u043A\u0440\u044B\u0432\u0430\u0442\u044C \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0443\u044E \u0437\u0430\u043C\u0435\u0442\u043A\u0443", DISABLE_FILE_MENU_REVIEW_OPTIONS: "\u0412\u044B\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0432\u044B\u0431\u043E\u0440 \u0441\u043B\u043E\u0436\u043D\u043E\u0441\u0442\u0438 \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F \u0432 \u043C\u0435\u043D\u044E \u0444\u0430\u0439\u043B\u0430, \u0442.\u0435.: \u041F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435: \u041B\u0435\u0433\u043A\u043E \u041D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u043E \u0421\u043B\u043E\u0436\u043D\u043E", DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "\u041F\u043E\u0441\u043B\u0435 \u0432\u044B\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u044F \u0432\u044B \u0441\u043C\u043E\u0436\u0435\u0442\u0435 \u043F\u043E\u0432\u0442\u043E\u0440\u044F\u0442\u044C \u043F\u0440\u0438 \u043F\u043E\u043C\u043E\u0449\u0438 \u0445\u043E\u0442\u043A\u0435\u0435\u0432. \u041F\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 Obsidian \u043F\u043E\u0441\u043B\u0435 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u044D\u0442\u043E\u0433\u043E.", MAX_N_DAYS_REVIEW_QUEUE: "\u041D\u0430\u0438\u0431\u043E\u043B\u044C\u0448\u0435\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0434\u043D\u0435\u0439 \u0434\u043B\u044F \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u043D\u0430 \u043F\u0430\u043D\u0435\u043B\u0438 \u0441\u043F\u0440\u0430\u0432\u0430", MIN_ONE_DAY: "\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0434\u043D\u0435\u0439 \u043D\u0435 \u043C\u0435\u043D\u044C\u0448\u0435 1.", VALID_NUMBER_WARNING: "\u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043F\u043E\u0434\u0445\u043E\u0434\u044F\u0449\u0435\u0435 \u0447\u0438\u0441\u043B\u043E.", UI_PREFERENCES: "\u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439 \u0438\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438", INITIALLY_EXPAND_SUBDECKS_IN_TREE: "\u0414\u0435\u0440\u0435\u0432\u044C\u044F \u043A\u043E\u043B\u043E\u0434 \u0434\u043E\u043B\u0436\u043D\u044B \u0438\u0437\u043D\u0430\u0447\u0430\u043B\u044C\u043D\u043E \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C\u0441\u044F \u043A\u0430\u043A \u0440\u0430\u0437\u0432\u0435\u0440\u043D\u0443\u0442\u044B\u0435", INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "\u041E\u0442\u043A\u043B\u044E\u0447\u0438\u0442\u0435 \u044D\u0442\u043E\u0442 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440, \u0447\u0442\u043E\u0431\u044B \u0441\u0432\u0435\u0440\u043D\u0443\u0442\u044C \u0432\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0435 \u043A\u043E\u043B\u043E\u0434\u044B \u043D\u0430 \u043E\u0434\u043D\u043E\u0439 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0435. \u041F\u043E\u043B\u0435\u0437\u043D\u043E, \u0435\u0441\u043B\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044C \u043A\u0430\u0440\u0442\u044B, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043F\u0440\u0438\u043D\u0430\u0434\u043B\u0435\u0436\u0430\u0442 \u043C\u043D\u043E\u0433\u0438\u043C \u043A\u043E\u043B\u043E\u0434\u0430\u043C \u0432 \u043E\u0434\u043D\u043E\u043C \u0444\u0430\u0439\u043B\u0435.", ALGORITHM: "\u0410\u043B\u0433\u043E\u0440\u0438\u0442\u043C", CHECK_ALGORITHM_WIKI: '\u0417\u0430 \u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0439 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u0435\u0439 \u043E\u0431\u0440\u0430\u0449\u0430\u0439\u0442\u0435\u0441\u044C \u043A \u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F \u0430\u043B\u0433\u043E\u0440\u0438\u0442\u043C\u0430.', BASE_EASE: "\u0411\u0430\u0437\u043E\u0432\u0430\u044F \u041B\u0451\u0433\u043A\u043E\u0441\u0442\u044C", BASE_EASE_DESC: "\u043C\u0438\u043D\u0438\u043C\u0443\u043C = 130, \u043F\u0440\u0435\u0434\u043F\u043E\u0447\u0442\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u043E\u043A\u043E\u043B\u043E 250.", BASE_EASE_MIN_WARNING: "\u041B\u0451\u0433\u043A\u043E\u0441\u0442\u044C \u0434\u043E\u043B\u0436\u043D\u0430 \u0431\u044B\u0442\u044C \u043C\u0438\u043D\u0438\u043C\u0443\u043C 130.", LAPSE_INTERVAL_CHANGE: "\u0418\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0435 \u043F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043A\u0430 \u043A\u043E\u0433\u0434\u0430 \u0432\u044B \u043E\u0442\u0432\u0435\u0447\u0430\u0435\u0442\u0435 \u0421\u043B\u043E\u0436\u043D\u043E \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438/\u0437\u0430\u043C\u0435\u0442\u043A\u0438", LAPSE_INTERVAL_CHANGE_DESC: "\u043D\u043E\u0432\u044B\u0439\u041F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043E\u043A = \u0441\u0442\u0430\u0440\u044B\u0439\u041F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043E\u043A * \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0435\u041F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043A\u0430 / 100.", EASY_BONUS: "\u041B\u0435\u0433\u043A\u043E: \u0431\u043E\u043D\u0443\u0441", EASY_BONUS_DESC: "\u0411\u043E\u043D\u0443\u0441 \u0437\u0430 \u041B\u0435\u0433\u043A\u043E \u043F\u043E\u0437\u0432\u043E\u043B\u044F\u0435\u0442 \u0432\u0430\u043C \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0440\u0430\u0437\u043D\u0438\u0446\u0443 \u0432 \u043F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043A\u0430\u0445 \u043C\u0435\u0436\u0434\u0443 \u043E\u0442\u0432\u0435\u0442\u0430\u043C\u0438 \u0425\u043E\u0440\u043E\u0448\u043E \u0438 \u041B\u0435\u0433\u043A\u043E \u043D\u0430 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0435/\u0437\u0430\u043C\u0435\u0442\u043A\u0435 (\u043C\u0438\u043D. = 100%).", EASY_BONUS_MIN_WARNING: "\u0411\u043E\u043D\u0443\u0441 \u0437\u0430 \u041B\u0435\u0433\u043A\u043E \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043D\u0435 \u043C\u0435\u043D\u044C\u0448\u0435 100.", MAX_INTERVAL: "Maximum interval in days", MAX_INTERVAL_DESC: "\u041F\u043E\u0437\u0432\u043E\u043B\u044F\u0435\u0442 \u0432\u0430\u043C \u0443\u0441\u0442\u0430\u043D\u0430\u0432\u043B\u0438\u0432\u0430\u0442\u044C \u0432\u0435\u0440\u0445\u043D\u044E\u044E \u0433\u0440\u0430\u043D\u0438\u0446\u0443 \u043D\u0430 \u043F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043E\u043A (\u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E = 100 \u043B\u0435\u0442).", MAX_INTERVAL_MIN_WARNING: "\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u043F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043E\u043A \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043D\u0435 \u043C\u0435\u043D\u044C\u0448\u0435 1.", MAX_LINK_CONTRIB: "\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0432\u043A\u043B\u0430\u0434 \u0441\u0432\u044F\u0437\u0438 (\u0441\u0441\u044B\u043B\u043A\u0438)", MAX_LINK_CONTRIB_DESC: "\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0432\u043A\u043B\u0430\u0434 \u0432\u0437\u0432\u0435\u0448\u0435\u043D\u043D\u043E\u0439 \u041B\u0451\u0433\u043A\u043E\u0441\u0442\u0438 \u0441\u0432\u044F\u0437\u0430\u043D\u043D\u044B\u0445 \u0437\u0430\u043C\u0435\u0442\u043E\u043A \u0432 \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u0443\u044E \u041B\u0451\u0433\u043A\u043E\u0441\u0442\u044C.", LOGGING: "\u0412\u0435\u0434\u0435\u043D\u0438\u0435 \u043B\u043E\u0433\u0430", DISPLAY_DEBUG_INFO: "\u041E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u044C \u043E\u0442\u043B\u0430\u0434\u043E\u0447\u043D\u0443\u044E \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044E \u0432 \u043A\u043E\u043D\u0441\u043E\u043B\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u0430 (developer console)?", // sidebar.ts NOTES_REVIEW_QUEUE: "\u041E\u0447\u0435\u0440\u0435\u0434\u044C \u0437\u0430\u043C\u0435\u0442\u043E\u043A \u043D\u0430 \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435", CLOSE: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C", NEW: "\u041D\u043E\u0432\u044B\u0435", YESTERDAY: "\u0412\u0447\u0435\u0440\u0430\u0448\u043D\u0438\u0435", TODAY: "\u0421\u0435\u0433\u043E\u0434\u043D\u044F\u0448\u043D\u0438\u0435", TOMORROW: "\u0417\u0430\u0432\u0442\u0440\u0430\u0448\u043D\u0438\u0435", // stats-modal.tsx STATS_TITLE: "\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0430", MONTH: "\u041C\u0435\u0441\u044F\u0446", QUARTER: "\u0427\u0435\u0442\u0432\u0435\u0440\u0442\u044C", YEAR: "\u0413\u043E\u0434", LIFETIME: "\u0412\u0441\u0451 \u0432\u0440\u0435\u043C\u044F", FORECAST: "\u041F\u0440\u043E\u0433\u043D\u043E\u0437", FORECAST_DESC: "\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A \u043F\u0440\u0435\u0434\u0441\u0442\u043E\u044F\u0449\u0438\u0445 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043C", SCHEDULED: "\u0417\u0430\u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u043E", DAYS: "\u0414\u043D\u0435\u0439", NUMBER_OF_CARDS: "\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A", REVIEWS_PER_DAY: "\u0421\u0440\u0435\u0434\u043D\u0435\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E: ${avg} \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0439 \u0432 \u0434\u0435\u043D\u044C", //!!! INTERVALS: "\u0418\u043D\u0442\u0435\u0440\u0432\u0430\u043B\u044B", INTERVALS_DESC: "\u041F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043A\u0438 \u0432\u0440\u0435\u043C\u0435\u043D\u0438 \u0434\u043E \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u0433\u043E \u043F\u043E\u043A\u0430\u0437\u0430 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F", COUNT: "\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E", INTERVALS_SUMMARY: "\u0421\u0440\u0435\u0434\u043D\u0438\u0439 \u043F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043E\u043A: ${avg}, \u0421\u0430\u043C\u044B\u0439 \u0434\u043B\u0438\u043D\u043D\u044B\u0439 \u043F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043E\u043A: ${longest}", EASES: "\u041B\u0451\u0433\u043A\u043E\u0441\u0442\u044C (\u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0432 \u0430\u043B\u0433\u043E\u0440\u0438\u0442\u043C\u0435, \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u0432\u043B\u0438\u044F\u0435\u0442 \u043D\u0430 \u043F\u0440\u0438\u043E\u0440\u0438\u0442\u0435\u0442 \u0438 \u0432\u0440\u0435\u043C\u044F \u043F\u043E\u043A\u0430\u0437\u0430 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A) \n (\u043E\u0442 \u0430\u043D\u0433\u043B. ease, \u0441\u043C. \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0430\u043B\u0433\u043E\u0440\u0438\u0442\u043C\u0430)", EASES_SUMMARY: "\u0421\u0440\u0435\u0434\u043D\u0435\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u041B\u0451\u0433\u043A\u043E\u0441\u0442\u0438: ${avgEase}", CARD_TYPES: "\u0422\u0438\u043F\u044B \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A", CARD_TYPES_DESC: "\u0412\u043A\u043B\u044E\u0447\u0430\u044F \u0441\u043F\u0440\u044F\u0442\u0430\u043D\u043D\u044B\u0435 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0438, \u0435\u0441\u043B\u0438 \u0442\u0430\u043A\u0438\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044E\u0442.", CARD_TYPE_NEW: "\u041D\u043E\u0432\u044B\u0445", CARD_TYPE_YOUNG: "\u041C\u043E\u043B\u043E\u0434\u044B\u0445", CARD_TYPE_MATURE: "\u0412\u0437\u0440\u043E\u0441\u043B\u044B\u0445", CARD_TYPES_SUMMARY: "\u0412\u0441\u0435\u0433\u043E \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A: ${totalCardsCount}" }; // src/lang/locale/ta.ts var ta_default = {}; // src/lang/locale/te.ts var te_default = {}; // src/lang/locale/th.ts var th_default = {}; // src/lang/locale/tr.ts var tr_default = {}; // src/lang/locale/uk.ts var uk_default = {}; // src/lang/locale/ur.ts var ur_default = {}; // src/lang/locale/vi.ts var vi_default = {}; // src/lang/locale/zh-cn.ts var zh_cn_default = { // flashcard-modal.tsx DECKS: "\u5361\u7EC4", DUE_CARDS: "\u5230\u671F\u5361\u7247", NEW_CARDS: "\u65B0\u5361\u7247", TOTAL_CARDS: "\u5168\u90E8\u5361\u7247", BACK: "\u8FD4\u56DE", SKIP: "\u7565\u8FC7", EDIT_CARD: "\u7F16\u8F91\u5361\u7247", RESET_CARD_PROGRESS: "\u91CD\u7F6E\u5361\u7247", HARD: "\u8F83\u96BE", GOOD: "\u8BB0\u5F97", EASY: "\u7B80\u5355", SHOW_ANSWER: "\u663E\u793A\u7B54\u6848", CARD_PROGRESS_RESET: "\u5361\u7247\u5DF2\u88AB\u91CD\u7F6E\u3002", SAVE: "\u50A8\u5B58", CANCEL: "\u53D6\u6D88", NO_INPUT: "\u6CA1\u6709\u63D0\u4F9B\u8F93\u5165\u3002", CURRENT_EASE_HELP_TEXT: "\u76EE\u524D\u638C\u63E1\u7A0B\u5EA6\uFF1A", CURRENT_INTERVAL_HELP_TEXT: "\u76EE\u524D\u95F4\u9694\uFF1A", CARD_GENERATED_FROM: "\u751F\u6210\u81EA\uFF1A${notePath}", // main.ts OPEN_NOTE_FOR_REVIEW: "\u6253\u5F00\u4E00\u4E2A\u7B14\u8BB0\u5F00\u59CB\u590D\u4E60", REVIEW_CARDS: "\u590D\u4E60\u5361\u7247", REVIEW_EASY_FILE_MENU: "\u590D\u4E60\uFF1A\u7B80\u5355", REVIEW_GOOD_FILE_MENU: "\u590D\u4E60\uFF1A\u8BB0\u5F97", REVIEW_HARD_FILE_MENU: "\u590D\u4E60\uFF1A\u8F83\u96BE", REVIEW_NOTE_EASY_CMD: "\u6807\u8BB0\u4E3A\u201C\u7B80\u5355\u201D", REVIEW_NOTE_GOOD_CMD: "\u6807\u8BB0\u4E3A\u201C\u8BB0\u5F97\u201D", REVIEW_NOTE_HARD_CMD: "\u6807\u8BB0\u4E3A\u201C\u8F83\u96BE\u201D", REVIEW_ALL_CARDS: "\u590D\u4E60\u6240\u6709\u7B14\u8BB0\u4E2D\u7684\u5361\u7247", CRAM_ALL_CARDS: "\u9009\u62E9\u8981\u96C6\u4E2D\u590D\u4E60\u7684\u5361\u7EC4", REVIEW_CARDS_IN_NOTE: "\u590D\u4E60\u6B64\u7B14\u8BB0\u4E2D\u7684\u5361\u7247", CRAM_CARDS_IN_NOTE: "\u96C6\u4E2D\u590D\u4E60\u6B64\u7B14\u8BB0\u4E2D\u7684\u5361\u7247", VIEW_STATS: "\u67E5\u770B\u6570\u636E", STATUS_BAR: "\u590D\u4E60: ${dueNotesCount} \u7B14\u8BB0, ${dueFlashcardsCount} \u5361\u7247\u5DF2\u5230\u671F", SYNC_TIME_TAKEN: "\u540C\u6B65\u65F6\u95F4 ${t}ms", NOTE_IN_IGNORED_FOLDER: "\u7B14\u8BB0\u4FDD\u5B58\u5728\u5DF2\u88AB\u5FFD\u7565\u7684\u8DEF\u5F84\u4E2D\uFF08\u68C0\u67E5\u8BBE\u7F6E\u9009\u9879\uFF09\u3002", PLEASE_TAG_NOTE: "\u8BF7\u5C06\u9700\u8981\u590D\u4E60\u7684\u7B14\u8BB0\u4E2D\u52A0\u5165\u6B63\u786E\u7684\u6807\u7B7E\uFF08\u68C0\u67E5\u8BBE\u7F6E\u9009\u9879\uFF09\u3002", RESPONSE_RECEIVED: "\u53CD\u9988\u5DF2\u6536\u5230", NO_DECK_EXISTS: "\u6CA1\u6709 ${deckName} \u5361\u7EC4", ALL_CAUGHT_UP: "\u90FD\u590D\u4E60\u5B8C\u5566\uFF0C\u4F60\u771F\u68D2\uFF01", // scheduling.ts DAYS_STR_IVL: "${interval}\u5929", MONTHS_STR_IVL: "${interval}\u6708", YEARS_STR_IVL: "${interval}\u5E74", DAYS_STR_IVL_MOBILE: "${interval}\u5929", MONTHS_STR_IVL_MOBILE: "${interval}\u6708", YEARS_STR_IVL_MOBILE: "${interval}\u5E74", // settings.ts SETTINGS_HEADER: "\u95F4\u9694\u91CD\u590D\u63D2\u4EF6 - \u8BBE\u7F6E", CHECK_WIKI: '\u4E86\u89E3\u66F4\u591A, \u8BF7\u70B9\u51FBwiki.', FOLDERS_TO_IGNORE: "\u5FFD\u7565\u6B64\u6587\u4EF6\u5939", FOLDERS_TO_IGNORE_DESC: "\u8F93\u5165\u6587\u4EF6\u5939\u8DEF\u5F84\uFF0C\u7528\u65B0\u5EFA\u884C\u5206\u9694\uFF0C\u4F8B\u5982\uFF1ATemplates Meta/Scripts", FLASHCARDS: "\u5361\u7247", FLASHCARD_EASY_LABEL: "\u201C\u7B80\u5355\u201D\u6309\u94AE\u6587\u672C", FLASHCARD_GOOD_LABEL: "\u201C\u8BB0\u5F97\u201D\u6309\u94AE\u6587\u672C", FLASHCARD_HARD_LABEL: "\u201C\u8F83\u96BE\u201D\u6309\u94AE\u6587\u672C", FLASHCARD_EASY_DESC: "\u81EA\u5B9A\u4E49\u201C\u7B80\u5355\u201D\u6309\u94AE\u7684\u6807\u7B7E", FLASHCARD_GOOD_DESC: "\u81EA\u5B9A\u4E49\u201C\u8BB0\u5F97\u201D\u6309\u94AE\u7684\u6807\u7B7E", FLASHCARD_HARD_DESC: "\u81EA\u5B9A\u4E49\u201C\u8F83\u96BE\u201D\u6309\u94AE\u7684\u6807\u7B7E", FLASHCARD_TAGS: "\u5361\u7247\u6807\u7B7E", FLASHCARD_TAGS_DESC: "\u8F93\u5165\u6807\u7B7E\uFF0C\u7528\u7A7A\u683C\u6216\u65B0\u5EFA\u884C\u5206\u9694\uFF0C\u4F8B\u5982\uFF1A#flashcards #deck2 #deck3.", CONVERT_FOLDERS_TO_DECKS: "\u662F\u5426\u5C06\u6587\u4EF6\u5939\u5185\u5BB9\u8F6C\u6362\u4E3A\u5361\u7247\u7EC4\u548C\u5B50\u5361\u7247\u7EC4\uFF1F", CONVERT_FOLDERS_TO_DECKS_DESC: "\u6B64\u9009\u9879\u4E3A\u5361\u7247\u6807\u7B7E\u9009\u9879\u7684\u66FF\u4EE3\u9009\u9879\u3002", INLINE_SCHEDULING_COMMENTS: "\u662F\u5426\u5C06\u8BA1\u5212\u91CD\u590D\u65F6\u95F4\u4FDD\u5B58\u5728\u5361\u7247\u6700\u540E\u4E00\u884C\u7684\u540C\u4E00\u884C\uFF1F", INLINE_SCHEDULING_COMMENTS_DESC: "HTML\u6CE8\u91CA\u4E0D\u518D\u7834\u574F\u5217\u8868\u683C\u5F0F", BURY_SIBLINGS_TILL_NEXT_DAY: "\u5C06\u5173\u8054\u5361\u7247\u9690\u85CF\u81F3\u4E0B\u4E00\u5929\uFF1F", BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "\u5173\u8054\u5361\u7247\u662F\u6765\u81EA\u540C\u4E00\u5361\u7247\u7684\u4E0D\u540C\u5F62\u5F0F\uFF0C \u4F8B\u5982\uFF1A\u5B8C\u5F62\u586B\u7A7A\u5361\u7247", SHOW_CARD_CONTEXT: "\u5728\u5361\u7247\u4E2D\u663E\u793A\u4E0A\u4E0B\u6587\uFF1F", SHOW_CARD_CONTEXT_DESC: "\u4F8B\u5982\uFF1A\u6807\u9898 > \u526F\u6807\u9898 > \u5C0F\u6807\u9898 > ... > \u5C0F\u6807\u9898", CARD_MODAL_HEIGHT_PERCENT: "\u5361\u7247\u9AD8\u5EA6\u767E\u5206\u6BD4", CARD_MODAL_SIZE_PERCENT_DESC: "\u8BF7\u5728\u79FB\u52A8\u7AEF\u4F7F\u7528\u5E76\u9700\u8981\u6D4F\u89C8\u8F83\u5927\u56FE\u7247\u65F6\u8BBE\u4E3A100%", RESET_DEFAULT: "\u91CD\u7F6E\u4E3A\u9ED8\u8BA4", CARD_MODAL_WIDTH_PERCENT: "\u5361\u7247\u5BBD\u5EA6\u767E\u5206\u6BD4", RANDOMIZE_CARD_ORDER: "\u590D\u4E60\u65F6\u968F\u673A\u663E\u793A\u5361\u7247\uFF1F", DISABLE_CLOZE_CARDS: "\u4E0D\u8FDB\u884C\u5B8C\u5F62\u586B\u7A7A\uFF1F", CONVERT_HIGHLIGHTS_TO_CLOZES: "\u5C06 ==\u9AD8\u4EAE== \u8F6C\u6362\u4E3A\u5B8C\u5F62\u586B\u7A7A\uFF1F", CONVERT_BOLD_TEXT_TO_CLOZES: "\u5C06 **\u7C97\u4F53** \u8F6C\u6362\u4E3A\u5B8C\u5F62\u586B\u7A7A\uFF1F", CONVERT_CURLY_BRACKETS_TO_CLOZES: "\u5C06 {{\u5927\u62EC\u53F7}} \u8F6C\u6362\u4E3A\u5B8C\u5F62\u586B\u7A7A\uFF1F", INLINE_CARDS_SEPARATOR: "\u5355\u884C\u5361\u7247\u7684\u5206\u9694\u7B26", FIX_SEPARATORS_MANUALLY_WARNING: "\u6CE8\u610F\uFF1A\u66F4\u6539\u6B64\u9009\u9879\u540E\u4F60\u5C06\u9700\u8981\u81EA\u884C\u66F4\u6539\u5DF2\u5B58\u5728\u5361\u7247\u7684\u5206\u9694\u7B26\u3002", INLINE_REVERSED_CARDS_SEPARATOR: "\u5355\u884C\u7FFB\u8F6C\u5361\u7247\u7684\u5206\u9694\u7B26", MULTILINE_CARDS_SEPARATOR: "\u591A\u884C\u5361\u7247\u7684\u5206\u9694\u7B26", MULTILINE_REVERSED_CARDS_SEPARATOR: "\u591A\u884C\u7FFB\u8F6C\u5361\u7247\u7684\u5206\u9694\u7B26", NOTES: "\u7B14\u8BB0", REVIEW_PANE_ON_STARTUP: "\u542F\u52A8\u65F6\u5F00\u542F\u7B14\u8BB0\u590D\u4E60\u7A97\u683C", TAGS_TO_REVIEW: "\u590D\u4E60\u6807\u7B7E", TAGS_TO_REVIEW_DESC: "\u8F93\u5165\u6807\u7B7E\uFF0C\u7528\u7A7A\u683C\u6216\u65B0\u5EFA\u884C\u5206\u9694\uFF0C\u4F8B\u5982\uFF1A#review #tag2 #tag3.", OPEN_RANDOM_NOTE: "\u590D\u4E60\u968F\u673A\u7B14\u8BB0", OPEN_RANDOM_NOTE_DESC: "\u5173\u95ED\u6B64\u9009\u9879\uFF0C\u7B14\u8BB0\u5C06\u4EE5\u91CD\u8981\u5EA6(PageRank)\u6392\u5E8F\u3002", AUTO_NEXT_NOTE: "\u590D\u4E60\u540E\u81EA\u52A8\u6253\u5F00\u4E0B\u4E00\u4E2A\u7B14\u8BB0", DISABLE_FILE_MENU_REVIEW_OPTIONS: "\u5173\u95ED\u6587\u4EF6\u9009\u5355\u4E2D\u7684\u590D\u4E60\u9009\u9879 \u4F8B\u5982\uFF1A\u590D\u4E60\uFF1A\u7B80\u5355 \u8BB0\u5F97 \u8F83\u96BE", DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "\u5173\u95ED\u6B64\u9009\u9879\u540E\u4F60\u53EF\u4EE5\u4F7F\u7528\u5FEB\u6377\u952E\u5F00\u59CB\u590D\u4E60\u3002\u91CD\u65B0\u542F\u52A8Obsidian\u4F7F\u672C\u9009\u9879\u751F\u6548\u3002", MAX_N_DAYS_REVIEW_QUEUE: "\u53F3\u8FB9\u680F\u4E2D\u663E\u793A\u7684\u6700\u5927\u5929\u6570", MIN_ONE_DAY: "\u5929\u6570\u6700\u5C0F\u503C\u4E3A1", VALID_NUMBER_WARNING: "\u8BF7\u8F93\u5165\u6709\u6548\u7684\u6570\u5B57\u3002", UI_PREFERENCES: "\u7528\u6237\u754C\u9762\u9996\u9009\u9879", INITIALLY_EXPAND_SUBDECKS_IN_TREE: "\u7532\u677F\u6811\u6700\u521D\u5E94\u663E\u793A\u4E3A\u5C55\u5F00", INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "\u5173\u95ED\u6B64\u9009\u9879\u53EF\u6298\u53E0\u540C\u4E00\u5F20\u5361\u7247\u4E2D\u7684\u5D4C\u5957\u724C\u7EC4\u3002\u5982\u679C\u60A8\u7684\u5361\u7247\u5C5E\u4E8E\u540C\u4E00\u6587\u4EF6\u4E2D\u7684\u8BB8\u591A\u5957\u724C\uFF0C\u5219\u5F88\u6709\u7528\u3002", ALGORITHM: "\u7B97\u6CD5", CHECK_ALGORITHM_WIKI: '\u4E86\u89E3\u66F4\u591A, \u8BF7\u70B9\u51FB\u7B97\u6CD5\u5B9E\u73B0.', BASE_EASE: "\u57FA\u7840\u638C\u63E1\u7A0B\u5EA6", BASE_EASE_DESC: "\u6700\u5C0F\u503C130\uFF0C\u63A8\u8350\u503C\u7EA6250.", BASE_EASE_MIN_WARNING: "\u57FA\u7840\u638C\u63E1\u7A0B\u5EA6\u7684\u6700\u5C0F\u503C\u4E3A130\u3002", LAPSE_INTERVAL_CHANGE: "\u5C06\u590D\u4E60\u65F6\u6807\u6CE8\u4E3A\u201C\u8F83\u96BE\u201D\u7684\u5361\u7247\u6216\u7B14\u8BB0\u590D\u4E60\u95F4\u9694\u7F29\u77ED", LAPSE_INTERVAL_CHANGE_DESC: "\u65B0\u590D\u4E60\u95F4\u9694 = \u539F\u590D\u4E60\u95F4\u9694 * \u95F4\u9694\u6539\u53D8\u7CFB\u6570 / 100.", EASY_BONUS: "\u7B80\u5355\u5956\u52B1", EASY_BONUS_DESC: "\u7B80\u5355\u5956\u52B1\u8BBE\u5B9A\u201C\u8BB0\u5F97\u201D\u548C\u201C\u7B80\u5355\u201D\u5361\u7247\u6216\u7B14\u8BB0\u7684\u590D\u4E60\u95F4\u9694\u5DEE\u8DDD\uFF08\u6700\u5C0F\u503C100%\uFF09\u3002", EASY_BONUS_MIN_WARNING: "\u7B80\u5355\u5956\u52B1\u81F3\u5C11\u4E3A100\u3002", MAX_INTERVAL: "\u6700\u5927\u95F4\u9694\uFF08\u5929\uFF09", MAX_INTERVAL_DESC: "\u8BBE\u5B9A\u590D\u4E60\u7684\u6700\u5927\u95F4\u9694\u65F6\u95F4\uFF08\u9ED8\u8BA4\u503C100\u5E74\uFF09\u3002", MAX_INTERVAL_MIN_WARNING: "\u6700\u5927\u95F4\u9694\u81F3\u5C11\u4E3A1\u5929", MAX_LINK_CONTRIB: "\u6700\u5927\u94FE\u63A5\u6536\u76CA", MAX_LINK_CONTRIB_DESC: "\u94FE\u63A5\u7B14\u8BB0\u7684\u52A0\u6743\u638C\u63E1\u7A0B\u5EA6\u5BF9\u539F\u59CB\u638C\u63E1\u7A0B\u5EA6\u7684\u6700\u5927\u8D21\u732E\u3002", LOGGING: "\u8BB0\u5F55\u4E2D", DISPLAY_DEBUG_INFO: "\u5728\u5F00\u53D1\u8005\u63A7\u5236\u53F0\u4E2D\u663E\u793A\u8C03\u8BD5\u4FE1\u606F\uFF1F", // sidebar.ts NOTES_REVIEW_QUEUE: "\u7B14\u8BB0\u590D\u4E60\u5E8F\u5217", CLOSE: "\u4E34\u8FD1", NEW: "\u65B0", YESTERDAY: "\u6628\u5929", TODAY: "\u4ECA\u5929", TOMORROW: "\u660E\u5929", // stats-modal.tsx STATS_TITLE: "\u6570\u636E", MONTH: "\u6708", QUARTER: "\u5B63", YEAR: "\u5E74", LIFETIME: "\u5168\u90E8", FORECAST: "\u9884\u671F", FORECAST_DESC: "\u5C06\u8981\u5230\u671F\u7684\u5361\u7247\u6570\u91CF", SCHEDULED: "\u5DF2\u6392\u671F", DAYS: "\u5929", NUMBER_OF_CARDS: "\u5361\u7247\u6570\u91CF", REVIEWS_PER_DAY: "\u5E73\u5747: \u590D\u4E60${avg} /\u5929", INTERVALS: "\u95F4\u9694", INTERVALS_DESC: "\u5230\u4E0B\u4E00\u6B21\u590D\u4E60\u7684\u65F6\u95F4\u95F4\u9694", COUNT: "\u8BA1\u6570", INTERVALS_SUMMARY: "\u5E73\u5747\u95F4\u9694\u65F6\u95F4: ${avg}, \u6700\u957F\u95F4\u9694\u65F6\u95F4: ${longest}", EASES: "\u638C\u63E1\u7A0B\u5EA6", EASES_SUMMARY: "\u5E73\u5747\u638C\u63E1\u7A0B\u5EA6: ${avgEase}", CARD_TYPES: "\u5361\u7247\u7C7B\u578B", CARD_TYPES_DESC: "\u5982\u6709\uFF0C\u5C06\u663E\u793A\u9690\u85CF\u7684\u5361\u7247", CARD_TYPE_NEW: "\u65B0", CARD_TYPE_YOUNG: "\u8F83\u65B0", CARD_TYPE_MATURE: "\u719F\u6089", CARD_TYPES_SUMMARY: "\u603B\u5361\u7247\u6570: ${totalCardsCount}" }; // src/lang/locale/zh-tw.ts var zh_tw_default = { // flashcard-modal.tsx DECKS: "\u724C\u7D44", DUE_CARDS: "\u5230\u671F\u5361\u7247", NEW_CARDS: "\u65B0\u5361\u7247", TOTAL_CARDS: "\u5168\u90E8\u5361\u7247", BACK: "\u8FD4\u56DE", SKIP: "\u7565\u904E", EDIT_CARD: "\u7DE8\u8F2F\u5361\u7247", RESET_CARD_PROGRESS: "\u91CD\u7F6E\u5361\u7247", HARD: "\u8F03\u96E3", GOOD: "\u8A18\u5F97", EASY: "\u7C21\u55AE", SHOW_ANSWER: "\u986F\u793A\u7B54\u6848", CARD_PROGRESS_RESET: "\u5361\u7247\u5DF2\u88AB\u91CD\u7F6E\u3002", SAVE: "\u5132\u5B58", CANCEL: "\u53D6\u6D88", NO_INPUT: "\u6C92\u6709\u63D0\u4F9B\u8F38\u5165\u3002", CURRENT_EASE_HELP_TEXT: "\u76EE\u524D\u638C\u63E1\u7A0B\u5EA6\uFF1A", CURRENT_INTERVAL_HELP_TEXT: "\u76EE\u524D\u9593\u9694\u6642\u9593\uFF1A", CARD_GENERATED_FROM: "\u751F\u6210\u81EA\uFF1A${notePath}", // main.ts OPEN_NOTE_FOR_REVIEW: "\u6253\u958B\u4E00\u500B\u7B46\u8A18\u958B\u59CB\u5FA9\u7FD2", REVIEW_CARDS: "\u5FA9\u7FD2\u5361\u7247", REVIEW_EASY_FILE_MENU: "\u5FA9\u7FD2\uFF1A\u7C21\u55AE", REVIEW_GOOD_FILE_MENU: "\u5FA9\u7FD2\uFF1A\u8A18\u5F97", REVIEW_HARD_FILE_MENU: "\u5FA9\u7FD2\uFF1A\u8F03\u96E3", REVIEW_NOTE_EASY_CMD: "\u6A19\u8A18\u70BA\u300C\u7C21\u55AE\u300D", REVIEW_NOTE_GOOD_CMD: "\u6A19\u8A18\u70BA\u300C\u8A18\u5F97\u300D", REVIEW_NOTE_HARD_CMD: "\u6A19\u8A18\u70BA\u300C\u8F03\u96E3\u300D", REVIEW_CARDS_IN_NOTE: "\u5FA9\u7FD2\u6B64\u7B46\u8A18\u4E2D\u7684\u5361\u7247", CRAM_ALL_CARDS: "\u9078\u64C7\u8981\u4E0D\u8A08\u96E3\u6613\u5EA6\u5FA9\u7FD2\u7684\u724C\u7D44", REVIEW_ALL_CARDS: "\u5FA9\u7FD2\u6240\u6709\u7B46\u8A18\u4E2D\u7684\u5361\u7247", CRAM_CARDS_IN_NOTE: "\u4E0D\u8A08\u96E3\u6613\u5EA6\u5FA9\u7FD2\u6B64\u7B46\u8A18\u4E2D\u7684\u5361\u7247", VIEW_STATS: "\u6AA2\u8996\u6578\u64DA", STATUS_BAR: "\u5FA9\u7FD2: ${dueNotesCount} \u7B46\u8A18, ${dueFlashcardsCount} \u5361\u7247\u5DF2\u5230\u671F", SYNC_TIME_TAKEN: "\u540C\u6B65\u6642\u9593 ${t}ms", NOTE_IN_IGNORED_FOLDER: "\u7B46\u8A18\u5132\u5B58\u5728\u5DF2\u88AB\u5FFD\u7565\u7684\u8DEF\u5F91\u4E2D\uFF08\u6AA2\u67E5\u8A2D\u5B9A\u9078\u9805\uFF09\u3002", PLEASE_TAG_NOTE: "\u8ACB\u5C07\u9700\u8981\u5FA9\u7FD2\u7684\u7B46\u8A18\u4E2D\u52A0\u5165\u6B63\u78BA\u7684\u6A19\u7C64\uFF08\u6AA2\u67E5\u8A2D\u5B9A\u9078\u9805\uFF09\u3002", RESPONSE_RECEIVED: "\u56DE\u994B\u5DF2\u6536\u5230", NO_DECK_EXISTS: "\u6C92\u6709 ${deckName} \u724C\u7D44", ALL_CAUGHT_UP: "\u90FD\u5FA9\u7FD2\u5B8C\u5566\uFF0C\u4F60\u771F\u68D2\uFF01", // scheduling.ts DAYS_STR_IVL: "${interval}\u5929", MONTHS_STR_IVL: "${interval}\u6708", YEARS_STR_IVL: "${interval}\u5E74", DAYS_STR_IVL_MOBILE: "${interval}\u5929", MONTHS_STR_IVL_MOBILE: "${interval}\u6708", YEARS_STR_IVL_MOBILE: "${interval}\u5E74", // settings.ts SETTINGS_HEADER: "\u9593\u9694\u91CD\u8907\u5916\u639B - \u8A2D\u5B9A", CHECK_WIKI: '\u77AD\u89E3\u66F4\u591A, \u8ACB\u9EDE\u9078wiki.', FOLDERS_TO_IGNORE: "\u5FFD\u7565\u6B64\u8CC7\u6599\u593E", FOLDERS_TO_IGNORE_DESC: "\u8F38\u5165\u8CC7\u6599\u593E\u8DEF\u5F91\uFF08\u7528\u63DB\u884C\u5B57\u5143\u5206\u9694\uFF09\uFF0C\u4F8B\u5982\uFF1ATemplates Meta/Scripts", FLASHCARDS: "\u5361\u7247", FLASHCARD_EASY_LABEL: "\u7C21\u55AE\u6309\u9215\u6587\u5B57", FLASHCARD_GOOD_LABEL: "\u8A18\u5F97\u6309\u9215\u6587\u5B57", FLASHCARD_HARD_LABEL: "\u8F03\u96E3\u6309\u9215\u6587\u5B57", FLASHCARD_EASY_DESC: "\u81EA\u8A02\u300C\u7C21\u55AE\u300D\u6309\u9215\u7684\u6A19\u7C64", FLASHCARD_GOOD_DESC: "\u81EA\u8A02\u300C\u8A18\u5F97\u300D\u6309\u9215\u7684\u6A19\u7C64", FLASHCARD_HARD_DESC: "\u81EA\u8A02\u300C\u8F03\u96E3\u300D\u6309\u9215\u7684\u6A19\u7C64", FLASHCARD_TAGS: "\u5361\u7247\u6A19\u7C64", FLASHCARD_TAGS_DESC: "\u8F38\u5165\u6A19\u7C64\uFF08\u7528\u7A7A\u767D\u6216\u63DB\u884C\u5B57\u5143\u5206\u9694\uFF09\uFF0C\u4F8B\u5982\uFF1A#flashcards #deck2 #deck3.", CONVERT_FOLDERS_TO_DECKS: "\u662F\u5426\u5C07\u8CC7\u6599\u593E\u5167\u5BB9\u8F49\u63DB\u70BA\u724C\u7D44\u548C\u5B50\u724C\u7D44\uFF1F", CONVERT_FOLDERS_TO_DECKS_DESC: "\u6B64\u9078\u9805\u70BA\u5361\u7247\u6A19\u7C64\u9078\u9805\u7684\u66FF\u4EE3\u9078\u9805\u3002", INLINE_SCHEDULING_COMMENTS: "\u662F\u5426\u5C07\u8A08\u5283\u91CD\u8907\u6642\u9593\u5132\u5B58\u5728\u5361\u7247\u6700\u5F8C\u4E00\u884C\u7684\u540C\u4E00\u884C\uFF1F", INLINE_SCHEDULING_COMMENTS_DESC: "\u52FE\u9078\u5F8CHTML\u8A3B\u89E3\u4E0D\u6703\u7834\u58DE\u5217\u8868\u683C\u5F0F\u554F\u984C\u3002", BURY_SIBLINGS_TILL_NEXT_DAY: "\u5C07\u53CD\u8F49\u5361\u7247\u96B1\u85CF\u81F3\u4E0B\u4E00\u5929\uFF1F", BURY_SIBLINGS_TILL_NEXT_DAY_DESC: "\u53CD\u8F49\u5361\u7247\u7531\u540C\u4E00\u5361\u7247\u6587\u5B57\u7522\u751F\uFF0C\u4F8B\u5982\uFF1A\u586B\u7A7A\u514B\u6F0F\u5B57", SHOW_CARD_CONTEXT: "\u5728\u5361\u7247\u4E2D\u986F\u793A\u4E0A\u4E0B\u6587\uFF1F", SHOW_CARD_CONTEXT_DESC: "\u4F8B\u5982\uFF1A\u6A19\u984C > \u526F\u6A19\u984C > \u5C0F\u6A19\u984C > ... > \u5C0F\u6A19\u984C", CARD_MODAL_HEIGHT_PERCENT: "\u5361\u7247\u9AD8\u5EA6\u767E\u5206\u6BD4", CARD_MODAL_SIZE_PERCENT_DESC: "\u5728\u79FB\u52D5\u7AEF\u6216\u9700\u8981\u8F03\u5927\u5716\u7247\u6642\u61C9\u8A2D\u5B9A\u70BA100%", RESET_DEFAULT: "\u91CD\u7F6E\u70BA\u9810\u8A2D\u503C", CARD_MODAL_WIDTH_PERCENT: "\u5361\u7247\u5BEC\u5EA6\u767E\u5206\u6BD4", RANDOMIZE_CARD_ORDER: "\u5FA9\u7FD2\u6642\u96A8\u6A5F\u986F\u793A\u5361\u7247\uFF1F", DISABLE_CLOZE_CARDS: "\u505C\u7528\u586B\u7A7A\u514B\u6F0F\u5B57\u5361\u7247\uFF1F", CONVERT_HIGHLIGHTS_TO_CLOZES: "\u5C07 ==\u9AD8\u4EAE== \u8F49\u63DB\u70BA\u586B\u7A7A\u514B\u6F0F\u5B57\uFF1F", CONVERT_BOLD_TEXT_TO_CLOZES: "\u5C07 **\u7C97\u9AD4** \u8F49\u63DB\u70BA\u586B\u7A7A\u514B\u6F0F\u5B57\uFF1F", CONVERT_CURLY_BRACKETS_TO_CLOZES: "\u5C07 {{\u5927\u62EC\u865F}} \u8F49\u63DB\u70BA\u586B\u7A7A\u514B\u6F0F\u5B57\uFF1F", INLINE_CARDS_SEPARATOR: "\u55AE\u884C\u5361\u7247\u7684\u5206\u9694\u5B57\u5143", FIX_SEPARATORS_MANUALLY_WARNING: "\u6CE8\u610F\uFF1A\u66F4\u6539\u6B64\u9078\u9805\u5F8C\u4F60\u5C07\u9700\u8981\u81EA\u884C\u66F4\u6539\u5DF2\u5B58\u5728\u5361\u7247\u7684\u5206\u9694\u5B57\u5143\u3002", INLINE_REVERSED_CARDS_SEPARATOR: "\u55AE\u884C\u53CD\u8F49\u5361\u7247\u7684\u5206\u9694\u5B57\u5143", MULTILINE_CARDS_SEPARATOR: "\u591A\u884C\u5361\u7247\u7684\u5206\u9694\u5B57\u5143", MULTILINE_REVERSED_CARDS_SEPARATOR: "\u591A\u884C\u7FFB\u8F49\u5361\u7247\u7684\u5206\u9694\u5B57\u5143", NOTES: "\u7B46\u8A18", REVIEW_PANE_ON_STARTUP: "\u555F\u52D5\u6642\u958B\u555F\u7B46\u8A18\u5FA9\u7FD2\u7A97\u683C", TAGS_TO_REVIEW: "\u5FA9\u7FD2\u6A19\u7C64", TAGS_TO_REVIEW_DESC: "\u8F38\u5165\u6A19\u7C64\uFF0C\u7528\u7A7A\u683C\u6216\u63DB\u884C\u5B57\u5143\u5206\u9694\uFF0C\u4F8B\u5982\uFF1A#review #tag2 #tag3.", OPEN_RANDOM_NOTE: "\u5FA9\u7FD2\u96A8\u6A5F\u7B46\u8A18", OPEN_RANDOM_NOTE_DESC: "\u95DC\u9589\u6B64\u9078\u9805\uFF0C\u7B46\u8A18\u5C07\u4EE5\u91CD\u8981\u5EA6(PageRank)\u6392\u5E8F\u3002", AUTO_NEXT_NOTE: "\u5FA9\u7FD2\u5F8C\u81EA\u52D5\u6253\u958B\u4E0B\u4E00\u500B\u7B46\u8A18", DISABLE_FILE_MENU_REVIEW_OPTIONS: "\u95DC\u9589\u6A94\u6848\u9078\u55AE\u4E2D\u7684\u5FA9\u7FD2\u9078\u9805 \u4F8B\u5982\uFF1A\u5FA9\u7FD2\uFF1A\u7C21\u55AE \u8A18\u5F97 \u8F03\u96E3", DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC: "\u95DC\u9589\u6A94\u6848\u9078\u55AE\u7684\u5FA9\u7FD2\u9078\u9805\uFF0C\u4F8B\u5982\uFF1A\u5FA9\u7FD2: \u7C21\u55AE \u8A18\u5F97 \u8F03\u96E3\u3002", MAX_N_DAYS_REVIEW_QUEUE: "\u53F3\u908A\u9762\u677F\u986F\u793A\u7684\u6700\u5927\u5929\u6578", MIN_ONE_DAY: "\u5929\u6578\u6700\u5C0F\u503C\u70BA1", VALID_NUMBER_WARNING: "\u8ACB\u8F38\u5165\u6709\u6548\u7684\u6578\u5B57\u3002", UI_PREFERENCES: "\u7528\u6236\u4ECB\u9762\u9996\u9078\u9805", INITIALLY_EXPAND_SUBDECKS_IN_TREE: "\u724C\u7D44\u6A39\u6700\u521D\u61C9\u986F\u793A\u70BA\u5C55\u958B", INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC: "\u95DC\u9589\u6B64\u9078\u9805\u53EF\u647A\u758A\u540C\u4E00\u5F35\u5361\u7247\u4E2D\u7684\u5DE2\u72C0\u724C\u7D44\u3002\u5982\u679C\u60A8\u7684\u5361\u7247\u5C6C\u65BC\u540C\u4E00\u6A94\u6848\u4E2D\u7684\u8A31\u591A\u5957\u724C\uFF0C\u5247\u5F88\u6709\u7528\u3002", ALGORITHM: "\u6F14\u7B97\u6CD5", CHECK_ALGORITHM_WIKI: '\u77AD\u89E3\u66F4\u591A, \u8ACB\u9EDE\u9078\u7B97\u6CD5\u5BE6\u73FE.', BASE_EASE: "\u57FA\u790E\u638C\u63E1\u7A0B\u5EA6", BASE_EASE_DESC: "\u6700\u5C0F\u503C130\uFF0C\u63A8\u85A6\u503C\u7D04250.", BASE_EASE_MIN_WARNING: "\u57FA\u790E\u638C\u63E1\u7A0B\u5EA6\u7684\u6700\u5C0F\u503C\u70BA130\u3002", LAPSE_INTERVAL_CHANGE: "\u5C07\u5FA9\u7FD2\u6642\u6A19\u8A3B\u70BA\u300C\u8F03\u96E3\u300D\u7684\u5361\u7247\u6216\u7B46\u8A18\u5FA9\u7FD2\u9593\u9694\u7E2E\u77ED", LAPSE_INTERVAL_CHANGE_DESC: "\u65B0\u5FA9\u7FD2\u9593\u9694 = \u539F\u5FA9\u7FD2\u9593\u9694 * \u9593\u9694\u6539\u8B8A\u4FC2\u6578 / 100.", EASY_BONUS: "\u7C21\u55AE\u734E\u52F5", EASY_BONUS_DESC: "\u7C21\u55AE\u734E\u52F5\u8A2D\u5B9A\u300C\u8A18\u5F97\u300D\u548C\u300C\u7C21\u55AE\u300D\u5361\u7247\u6216\u7B46\u8A18\u7684\u5FA9\u7FD2\u9593\u9694\u5DEE\u8DDD\uFF08\u6700\u5C0F\u503C100%\uFF09\u3002", EASY_BONUS_MIN_WARNING: "\u7C21\u55AE\u734E\u52F5\u81F3\u5C11\u70BA100\u3002", MAX_INTERVAL: "\u6700\u5927\u9593\u9694\uFF08\u5929\uFF09", MAX_INTERVAL_DESC: "\u8A2D\u5B9A\u5FA9\u7FD2\u7684\u6700\u5927\u9593\u9694\u6642\u9593\uFF08\u9810\u8A2D\u503C100\u5E74\uFF09\u3002", MAX_INTERVAL_MIN_WARNING: "\u6700\u5927\u9593\u9694\u81F3\u5C11\u70BA1\u5929", MAX_LINK_CONTRIB: "\u6700\u5927\u93C8\u63A5\u8CA2\u737B", MAX_LINK_CONTRIB_DESC: "\u93C8\u63A5\u7B46\u8A18\u7684\u52A0\u6B0A\u638C\u63E1\u7A0B\u5EA6\u5C0D\u539F\u59CB\u638C\u63E1\u7A0B\u5EA6\u7684\u6700\u5927\u8CA2\u737B\u3002", LOGGING: "\u8A18\u9304\u4E2D", DISPLAY_DEBUG_INFO: "\u5728\u958B\u767C\u8005\u63A7\u5236\u53F0\u4E2D\u986F\u793A\u9664\u932F\u8CC7\u8A0A\uFF1F", // sidebar.ts NOTES_REVIEW_QUEUE: "\u7B46\u8A18\u5FA9\u7FD2\u5E8F\u5217", CLOSE: "\u81E8\u8FD1", NEW: "\u65B0", YESTERDAY: "\u6628\u5929", TODAY: "\u4ECA\u5929", TOMORROW: "\u660E\u5929", // stats-modal.tsx STATS_TITLE: "\u7D71\u8A08", MONTH: "\u6708", QUARTER: "\u5B63", YEAR: "\u5E74", LIFETIME: "\u5168\u90E8", FORECAST: "\u9810\u6E2C", FORECAST_DESC: "\u5C07\u8981\u5230\u671F\u7684\u5361\u7247\u6578\u91CF", SCHEDULED: "\u5DF2\u6392\u7A0B", DAYS: "\u5929", NUMBER_OF_CARDS: "\u5361\u7247\u6578\u91CF", REVIEWS_PER_DAY: "\u5E73\u5747: \u5FA9\u7FD2${avg} /\u5929", INTERVALS: "\u9593\u9694", INTERVALS_DESC: "\u5230\u4E0B\u4E00\u6B21\u5FA9\u7FD2\u7684\u6642\u9593\u9593\u9694", COUNT: "\u8A08\u6578", INTERVALS_SUMMARY: "\u5E73\u5747\u9593\u9694\u6642\u9593: ${avg}, \u6700\u9577\u9593\u9694\u6642\u9593: ${longest}", EASES: "\u638C\u63E1\u7A0B\u5EA6", EASES_SUMMARY: "\u5E73\u5747\u638C\u63E1\u7A0B\u5EA6: ${avgEase}", CARD_TYPES: "\u5361\u7247\u578B\u5225", CARD_TYPES_DESC: "\u5982\u6709\uFF0C\u5C07\u986F\u793A\u96B1\u85CF\u7684\u5361\u7247", CARD_TYPE_NEW: "\u65B0", CARD_TYPE_YOUNG: "\u8F03\u65B0", CARD_TYPE_MATURE: "\u719F\u6089", CARD_TYPES_SUMMARY: "\u7E3D\u5361\u7247\u6578: ${totalCardsCount}" }; // src/lang/helpers.ts var localeMap = { af: af_default, ar: ar_default, bn: bn_default, cs: cz_default, da: da_default, de: de_default, en: en_default, "en-gb": en_gb_default, es: es_default, fr: fr_default, hi: hi_default, id: id_default, it: it_default, ja: ja_default, ko: ko_default, mr: mr_default, nl: nl_default, nn: no_default, pl: pl_default, pt: pt_default, "pt-br": pt_br_default, ro: ro_default, ru: ru_default, ta: ta_default, te: te_default, th: th_default, tr: tr_default, uk: uk_default, ur: ur_default, vi: vi_default, "zh-cn": zh_cn_default, "zh-tw": zh_tw_default }; var locale = localeMap[import_obsidian.moment.locale()]; function interpolate(str, params) { const names2 = Object.keys(params); const vals = Object.values(params); return new Function(...names2, `return \`${str}\`;`)(...vals); } function t(str, params) { if (!locale) { console.error(`SRS error: Locale ${import_obsidian.moment.locale()} not found.`); } const result = locale && locale[str] || en_default[str]; if (params) { return interpolate(result, params); } return result; } // src/settings.ts var DEFAULT_SETTINGS = { // flashcards flashcardEasyText: t("EASY"), flashcardGoodText: t("GOOD"), flashcardHardText: t("HARD"), flashcardTags: ["#flashcards"], convertFoldersToDecks: false, cardCommentOnSameLine: false, burySiblingCards: false, showContextInCards: true, flashcardHeightPercentage: import_obsidian2.Platform.isMobile ? 100 : 80, flashcardWidthPercentage: import_obsidian2.Platform.isMobile ? 100 : 40, randomizeCardOrder: true, convertHighlightsToClozes: true, convertBoldTextToClozes: false, convertCurlyBracketsToClozes: false, singleLineCardSeparator: "::", singleLineReversedCardSeparator: ":::", multilineCardSeparator: "?", multilineReversedCardSeparator: "??", editLaterTag: "#edit-later", // notes enableNoteReviewPaneOnStartup: true, tagsToReview: ["#review"], noteFoldersToIgnore: [], openRandomNote: false, autoNextNote: false, disableFileMenuReviewOptions: false, maxNDaysNotesReviewQueue: 365, // UI settings initiallyExpandAllSubdecksInTree: false, // algorithm baseEase: 250, lapsesIntervalChange: 0.5, easyBonus: 1.3, maximumInterval: 36525, maxLinkFactor: 1, // logging showDebugMessages: false }; var applyDebounceTimer = 0; function applySettingsUpdate(callback2) { clearTimeout(applyDebounceTimer); applyDebounceTimer = window.setTimeout(callback2, 512); } var SRSettingTab = class extends import_obsidian2.PluginSettingTab { constructor(app2, plugin) { super(app2, plugin); this.plugin = plugin; } display() { const { containerEl } = this; containerEl.empty(); const header = containerEl.createEl("h1", { text: `${t("SETTINGS_HEADER")}` }); header.addClass("sr-centered"); containerEl.createDiv().innerHTML = t("CHECK_WIKI", { wiki_url: "https://www.stephenmwangi.com/obsidian-spaced-repetition/" }); new import_obsidian2.Setting(containerEl).setName(t("FOLDERS_TO_IGNORE")).setDesc(t("FOLDERS_TO_IGNORE_DESC")).addTextArea( (text) => text.setValue(this.plugin.data.settings.noteFoldersToIgnore.join("\n")).onChange((value) => { applySettingsUpdate(async () => { this.plugin.data.settings.noteFoldersToIgnore = value.split(/\n+/).map((v) => v.trim()).filter((v) => v); await this.plugin.savePluginData(); }); }) ); containerEl.createEl("h3", { text: `${t("FLASHCARDS")}` }); new import_obsidian2.Setting(containerEl).setName(t("FLASHCARD_TAGS")).setDesc(t("FLASHCARD_TAGS_DESC")).addTextArea( (text) => text.setValue(this.plugin.data.settings.flashcardTags.join(" ")).onChange((value) => { applySettingsUpdate(async () => { this.plugin.data.settings.flashcardTags = value.split(/\s+/); await this.plugin.savePluginData(); }); }) ); new import_obsidian2.Setting(containerEl).setName(t("CONVERT_FOLDERS_TO_DECKS")).setDesc(t("CONVERT_FOLDERS_TO_DECKS_DESC")).addToggle( (toggle) => toggle.setValue(this.plugin.data.settings.convertFoldersToDecks).onChange(async (value) => { this.plugin.data.settings.convertFoldersToDecks = value; await this.plugin.savePluginData(); }) ); new import_obsidian2.Setting(containerEl).setName(t("INLINE_SCHEDULING_COMMENTS")).setDesc(t("INLINE_SCHEDULING_COMMENTS_DESC")).addToggle( (toggle) => toggle.setValue(this.plugin.data.settings.cardCommentOnSameLine).onChange(async (value) => { this.plugin.data.settings.cardCommentOnSameLine = value; await this.plugin.savePluginData(); }) ); new import_obsidian2.Setting(containerEl).setName(t("BURY_SIBLINGS_TILL_NEXT_DAY")).setDesc(t("BURY_SIBLINGS_TILL_NEXT_DAY_DESC")).addToggle( (toggle) => toggle.setValue(this.plugin.data.settings.burySiblingCards).onChange(async (value) => { this.plugin.data.settings.burySiblingCards = value; await this.plugin.savePluginData(); }) ); new import_obsidian2.Setting(containerEl).setName(t("SHOW_CARD_CONTEXT")).setDesc(t("SHOW_CARD_CONTEXT_DESC")).addToggle( (toggle) => toggle.setValue(this.plugin.data.settings.showContextInCards).onChange(async (value) => { this.plugin.data.settings.showContextInCards = value; await this.plugin.savePluginData(); }) ); new import_obsidian2.Setting(containerEl).setName(t("CARD_MODAL_HEIGHT_PERCENT")).setDesc(t("CARD_MODAL_SIZE_PERCENT_DESC")).addSlider( (slider) => slider.setLimits(10, 100, 5).setValue(this.plugin.data.settings.flashcardHeightPercentage).setDynamicTooltip().onChange(async (value) => { this.plugin.data.settings.flashcardHeightPercentage = value; await this.plugin.savePluginData(); }) ).addExtraButton((button) => { button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => { this.plugin.data.settings.flashcardHeightPercentage = DEFAULT_SETTINGS.flashcardHeightPercentage; await this.plugin.savePluginData(); this.display(); }); }); new import_obsidian2.Setting(containerEl).setName(t("CARD_MODAL_WIDTH_PERCENT")).setDesc(t("CARD_MODAL_SIZE_PERCENT_DESC")).addSlider( (slider) => slider.setLimits(10, 100, 5).setValue(this.plugin.data.settings.flashcardWidthPercentage).setDynamicTooltip().onChange(async (value) => { this.plugin.data.settings.flashcardWidthPercentage = value; await this.plugin.savePluginData(); }) ).addExtraButton((button) => { button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => { this.plugin.data.settings.flashcardWidthPercentage = DEFAULT_SETTINGS.flashcardWidthPercentage; await this.plugin.savePluginData(); this.display(); }); }); new import_obsidian2.Setting(containerEl).setName(t("RANDOMIZE_CARD_ORDER")).addToggle( (toggle) => toggle.setValue(this.plugin.data.settings.randomizeCardOrder).onChange(async (value) => { this.plugin.data.settings.randomizeCardOrder = value; await this.plugin.savePluginData(); }) ); new import_obsidian2.Setting(containerEl).setName(t("CONVERT_HIGHLIGHTS_TO_CLOZES")).addToggle( (toggle) => toggle.setValue(this.plugin.data.settings.convertHighlightsToClozes).onChange(async (value) => { this.plugin.data.settings.convertHighlightsToClozes = value; await this.plugin.savePluginData(); }) ); new import_obsidian2.Setting(containerEl).setName(t("CONVERT_BOLD_TEXT_TO_CLOZES")).addToggle( (toggle) => toggle.setValue(this.plugin.data.settings.convertBoldTextToClozes).onChange(async (value) => { this.plugin.data.settings.convertBoldTextToClozes = value; await this.plugin.savePluginData(); }) ); new import_obsidian2.Setting(containerEl).setName(t("CONVERT_CURLY_BRACKETS_TO_CLOZES")).addToggle( (toggle) => toggle.setValue(this.plugin.data.settings.convertCurlyBracketsToClozes).onChange(async (value) => { this.plugin.data.settings.convertCurlyBracketsToClozes = value; await this.plugin.savePluginData(); }) ); new import_obsidian2.Setting(containerEl).setName(t("INLINE_CARDS_SEPARATOR")).setDesc(t("FIX_SEPARATORS_MANUALLY_WARNING")).addText( (text) => text.setValue(this.plugin.data.settings.singleLineCardSeparator).onChange((value) => { applySettingsUpdate(async () => { this.plugin.data.settings.singleLineCardSeparator = value; await this.plugin.savePluginData(); }); }) ).addExtraButton((button) => { button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => { this.plugin.data.settings.singleLineCardSeparator = DEFAULT_SETTINGS.singleLineCardSeparator; await this.plugin.savePluginData(); this.display(); }); }); new import_obsidian2.Setting(containerEl).setName(t("INLINE_REVERSED_CARDS_SEPARATOR")).setDesc(t("FIX_SEPARATORS_MANUALLY_WARNING")).addText( (text) => text.setValue(this.plugin.data.settings.singleLineReversedCardSeparator).onChange((value) => { applySettingsUpdate(async () => { this.plugin.data.settings.singleLineReversedCardSeparator = value; await this.plugin.savePluginData(); }); }) ).addExtraButton((button) => { button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => { this.plugin.data.settings.singleLineReversedCardSeparator = DEFAULT_SETTINGS.singleLineReversedCardSeparator; await this.plugin.savePluginData(); this.display(); }); }); new import_obsidian2.Setting(containerEl).setName(t("MULTILINE_CARDS_SEPARATOR")).setDesc(t("FIX_SEPARATORS_MANUALLY_WARNING")).addText( (text) => text.setValue(this.plugin.data.settings.multilineCardSeparator).onChange((value) => { applySettingsUpdate(async () => { this.plugin.data.settings.multilineCardSeparator = value; await this.plugin.savePluginData(); }); }) ).addExtraButton((button) => { button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => { this.plugin.data.settings.multilineCardSeparator = DEFAULT_SETTINGS.multilineCardSeparator; await this.plugin.savePluginData(); this.display(); }); }); new import_obsidian2.Setting(containerEl).setName(t("MULTILINE_REVERSED_CARDS_SEPARATOR")).setDesc(t("FIX_SEPARATORS_MANUALLY_WARNING")).addText( (text) => text.setValue(this.plugin.data.settings.multilineReversedCardSeparator).onChange((value) => { applySettingsUpdate(async () => { this.plugin.data.settings.multilineReversedCardSeparator = value; await this.plugin.savePluginData(); }); }) ).addExtraButton((button) => { button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => { this.plugin.data.settings.multilineReversedCardSeparator = DEFAULT_SETTINGS.multilineReversedCardSeparator; await this.plugin.savePluginData(); this.display(); }); }); new import_obsidian2.Setting(containerEl).setName(t("FLASHCARD_EASY_LABEL")).setDesc(t("FLASHCARD_EASY_DESC")).addText( (text) => text.setValue(this.plugin.data.settings.flashcardEasyText).onChange((value) => { applySettingsUpdate(async () => { this.plugin.data.settings.flashcardEasyText = value; await this.plugin.savePluginData(); }); }) ).addExtraButton((button) => { button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => { this.plugin.data.settings.flashcardEasyText = DEFAULT_SETTINGS.flashcardEasyText; await this.plugin.savePluginData(); this.display(); }); }); new import_obsidian2.Setting(containerEl).setName(t("FLASHCARD_GOOD_LABEL")).setDesc(t("FLASHCARD_GOOD_DESC")).addText( (text) => text.setValue(this.plugin.data.settings.flashcardGoodText).onChange((value) => { applySettingsUpdate(async () => { this.plugin.data.settings.flashcardGoodText = value; await this.plugin.savePluginData(); }); }) ).addExtraButton((button) => { button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => { this.plugin.data.settings.flashcardGoodText = DEFAULT_SETTINGS.flashcardGoodText; await this.plugin.savePluginData(); this.display(); }); }); new import_obsidian2.Setting(containerEl).setName(t("FLASHCARD_HARD_LABEL")).setDesc(t("FLASHCARD_HARD_DESC")).addText( (text) => text.setValue(this.plugin.data.settings.flashcardHardText).onChange((value) => { applySettingsUpdate(async () => { this.plugin.data.settings.flashcardHardText = value; await this.plugin.savePluginData(); }); }) ).addExtraButton((button) => { button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => { this.plugin.data.settings.flashcardHardText = DEFAULT_SETTINGS.flashcardHardText; await this.plugin.savePluginData(); this.display(); }); }); containerEl.createEl("h3", { text: `${t("NOTES")}` }); new import_obsidian2.Setting(containerEl).setName(t("REVIEW_PANE_ON_STARTUP")).addToggle( (toggle) => toggle.setValue(this.plugin.data.settings.enableNoteReviewPaneOnStartup).onChange(async (value) => { this.plugin.data.settings.enableNoteReviewPaneOnStartup = value; await this.plugin.savePluginData(); }) ); new import_obsidian2.Setting(containerEl).setName(t("TAGS_TO_REVIEW")).setDesc(t("TAGS_TO_REVIEW_DESC")).addTextArea( (text) => text.setValue(this.plugin.data.settings.tagsToReview.join(" ")).onChange((value) => { applySettingsUpdate(async () => { this.plugin.data.settings.tagsToReview = value.split(/\s+/); await this.plugin.savePluginData(); }); }) ); new import_obsidian2.Setting(containerEl).setName(t("OPEN_RANDOM_NOTE")).setDesc(t("OPEN_RANDOM_NOTE_DESC")).addToggle( (toggle) => toggle.setValue(this.plugin.data.settings.openRandomNote).onChange(async (value) => { this.plugin.data.settings.openRandomNote = value; await this.plugin.savePluginData(); }) ); new import_obsidian2.Setting(containerEl).setName(t("AUTO_NEXT_NOTE")).addToggle( (toggle) => toggle.setValue(this.plugin.data.settings.autoNextNote).onChange(async (value) => { this.plugin.data.settings.autoNextNote = value; await this.plugin.savePluginData(); }) ); new import_obsidian2.Setting(containerEl).setName(t("DISABLE_FILE_MENU_REVIEW_OPTIONS")).setDesc(t("DISABLE_FILE_MENU_REVIEW_OPTIONS_DESC")).addToggle( (toggle) => toggle.setValue(this.plugin.data.settings.disableFileMenuReviewOptions).onChange(async (value) => { this.plugin.data.settings.disableFileMenuReviewOptions = value; await this.plugin.savePluginData(); }) ); new import_obsidian2.Setting(containerEl).setName(t("MAX_N_DAYS_REVIEW_QUEUE")).addText( (text) => text.setValue(this.plugin.data.settings.maxNDaysNotesReviewQueue.toString()).onChange((value) => { applySettingsUpdate(async () => { const numValue = Number.parseInt(value); if (!isNaN(numValue)) { if (numValue < 1) { new import_obsidian2.Notice(t("MIN_ONE_DAY")); text.setValue( this.plugin.data.settings.maxNDaysNotesReviewQueue.toString() ); return; } this.plugin.data.settings.maxNDaysNotesReviewQueue = numValue; await this.plugin.savePluginData(); } else { new import_obsidian2.Notice(t("VALID_NUMBER_WARNING")); } }); }) ).addExtraButton((button) => { button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => { this.plugin.data.settings.maxNDaysNotesReviewQueue = DEFAULT_SETTINGS.maxNDaysNotesReviewQueue; await this.plugin.savePluginData(); this.display(); }); }); containerEl.createEl("h3", { text: `${t("UI_PREFERENCES")}` }); new import_obsidian2.Setting(containerEl).setName(t("INITIALLY_EXPAND_SUBDECKS_IN_TREE")).setDesc(t("INITIALLY_EXPAND_SUBDECKS_IN_TREE_DESC")).addToggle( (toggle) => toggle.setValue(this.plugin.data.settings.initiallyExpandAllSubdecksInTree).onChange(async (value) => { this.plugin.data.settings.initiallyExpandAllSubdecksInTree = value; await this.plugin.savePluginData(); }) ); containerEl.createEl("h3", { text: `${t("ALGORITHM")}` }); containerEl.createDiv().innerHTML = t("CHECK_ALGORITHM_WIKI", { algo_url: "https://www.stephenmwangi.com/obsidian-spaced-repetition/algorithms/" }); new import_obsidian2.Setting(containerEl).setName(t("BASE_EASE")).setDesc(t("BASE_EASE_DESC")).addText( (text) => text.setValue(this.plugin.data.settings.baseEase.toString()).onChange((value) => { applySettingsUpdate(async () => { const numValue = Number.parseInt(value); if (!isNaN(numValue)) { if (numValue < 130) { new import_obsidian2.Notice(t("BASE_EASE_MIN_WARNING")); text.setValue(this.plugin.data.settings.baseEase.toString()); return; } this.plugin.data.settings.baseEase = numValue; await this.plugin.savePluginData(); } else { new import_obsidian2.Notice(t("VALID_NUMBER_WARNING")); } }); }) ).addExtraButton((button) => { button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => { this.plugin.data.settings.baseEase = DEFAULT_SETTINGS.baseEase; await this.plugin.savePluginData(); this.display(); }); }); new import_obsidian2.Setting(containerEl).setName(t("LAPSE_INTERVAL_CHANGE")).setDesc(t("LAPSE_INTERVAL_CHANGE_DESC")).addSlider( (slider) => slider.setLimits(1, 99, 1).setValue(this.plugin.data.settings.lapsesIntervalChange * 100).setDynamicTooltip().onChange(async (value) => { this.plugin.data.settings.lapsesIntervalChange = value / 100; await this.plugin.savePluginData(); }) ).addExtraButton((button) => { button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => { this.plugin.data.settings.lapsesIntervalChange = DEFAULT_SETTINGS.lapsesIntervalChange; await this.plugin.savePluginData(); this.display(); }); }); new import_obsidian2.Setting(containerEl).setName(t("EASY_BONUS")).setDesc(t("EASY_BONUS_DESC")).addText( (text) => text.setValue((this.plugin.data.settings.easyBonus * 100).toString()).onChange((value) => { applySettingsUpdate(async () => { const numValue = Number.parseInt(value) / 100; if (!isNaN(numValue)) { if (numValue < 1) { new import_obsidian2.Notice(t("EASY_BONUS_MIN_WARNING")); text.setValue( (this.plugin.data.settings.easyBonus * 100).toString() ); return; } this.plugin.data.settings.easyBonus = numValue; await this.plugin.savePluginData(); } else { new import_obsidian2.Notice(t("VALID_NUMBER_WARNING")); } }); }) ).addExtraButton((button) => { button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => { this.plugin.data.settings.easyBonus = DEFAULT_SETTINGS.easyBonus; await this.plugin.savePluginData(); this.display(); }); }); new import_obsidian2.Setting(containerEl).setName(t("MAX_INTERVAL")).setDesc(t("MAX_INTERVAL_DESC")).addText( (text) => text.setValue(this.plugin.data.settings.maximumInterval.toString()).onChange((value) => { applySettingsUpdate(async () => { const numValue = Number.parseInt(value); if (!isNaN(numValue)) { if (numValue < 1) { new import_obsidian2.Notice(t("MAX_INTERVAL_MIN_WARNING")); text.setValue( this.plugin.data.settings.maximumInterval.toString() ); return; } this.plugin.data.settings.maximumInterval = numValue; await this.plugin.savePluginData(); } else { new import_obsidian2.Notice(t("VALID_NUMBER_WARNING")); } }); }) ).addExtraButton((button) => { button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => { this.plugin.data.settings.maximumInterval = DEFAULT_SETTINGS.maximumInterval; await this.plugin.savePluginData(); this.display(); }); }); new import_obsidian2.Setting(containerEl).setName(t("MAX_LINK_CONTRIB")).setDesc(t("MAX_LINK_CONTRIB_DESC")).addSlider( (slider) => slider.setLimits(0, 100, 1).setValue(this.plugin.data.settings.maxLinkFactor * 100).setDynamicTooltip().onChange(async (value) => { this.plugin.data.settings.maxLinkFactor = value / 100; await this.plugin.savePluginData(); }) ).addExtraButton((button) => { button.setIcon("reset").setTooltip(t("RESET_DEFAULT")).onClick(async () => { this.plugin.data.settings.maxLinkFactor = DEFAULT_SETTINGS.maxLinkFactor; await this.plugin.savePluginData(); this.display(); }); }); containerEl.createEl("h3", { text: `${t("LOGGING")}` }); new import_obsidian2.Setting(containerEl).setName(t("DISPLAY_DEBUG_INFO")).addToggle( (toggle) => toggle.setValue(this.plugin.data.settings.showDebugMessages).onChange(async (value) => { this.plugin.data.settings.showDebugMessages = value; await this.plugin.savePluginData(); }) ); } }; // src/flashcard-modal.tsx var import_obsidian3 = require("obsidian"); var import_vhtml = __toESM(require_vhtml()); // src/scheduling.ts function schedule(response, interval, ease, delayBeforeReview, settingsObj, dueDates) { delayBeforeReview = Math.max(0, Math.floor(delayBeforeReview / (24 * 3600 * 1e3))); if (response === 0 /* Easy */) { ease += 20; interval = (interval + delayBeforeReview) * ease / 100; interval *= settingsObj.easyBonus; } else if (response === 1 /* Good */) { interval = (interval + delayBeforeReview / 2) * ease / 100; } else if (response === 2 /* Hard */) { ease = Math.max(130, ease - 20); interval = Math.max( 1, (interval + delayBeforeReview / 4) * settingsObj.lapsesIntervalChange ); } if (dueDates !== void 0) { interval = Math.round(interval); if (!Object.prototype.hasOwnProperty.call(dueDates, interval)) { dueDates[interval] = 0; } else { if (interval > 4) { let fuzz = 0; if (interval < 7) fuzz = 1; else if (interval < 30) fuzz = Math.max(2, Math.floor(interval * 0.15)); else fuzz = Math.max(4, Math.floor(interval * 0.05)); const originalInterval = interval; outer: for (let i = 1; i <= fuzz; i++) { for (const ivl of [originalInterval - i, originalInterval + i]) { if (!Object.prototype.hasOwnProperty.call(dueDates, ivl)) { dueDates[ivl] = 0; interval = ivl; break outer; } if (dueDates[ivl] < dueDates[interval]) interval = ivl; } } } } dueDates[interval]++; } interval = Math.min(interval, settingsObj.maximumInterval); return { interval: Math.round(interval * 10) / 10, ease }; } function textInterval(interval, isMobile) { if (interval === void 0) { return t("NEW"); } const m = Math.round(interval / 3.04375) / 10, y = Math.round(interval / 36.525) / 10; if (isMobile) { if (m < 1) return t("DAYS_STR_IVL_MOBILE", { interval }); else if (y < 1) return t("MONTHS_STR_IVL_MOBILE", { interval: m }); else return t("YEARS_STR_IVL_MOBILE", { interval: y }); } else { if (m < 1) return t("DAYS_STR_IVL", { interval }); else if (y < 1) return t("MONTHS_STR_IVL", { interval: m }); else return t("YEARS_STR_IVL", { interval: y }); } } // src/constants.ts var SCHEDULING_INFO_REGEX = /^---\n((?:.*\n)*)sr-due: (.+)\nsr-interval: (\d+)\nsr-ease: (\d+)\n((?:.*\n)?)---/; var YAML_FRONT_MATTER_REGEX = /^---\n((?:.*\n)*?)---/; var MULTI_SCHEDULING_EXTRACTOR = /!([\d-]+),(\d+),(\d+)/gm; var LEGACY_SCHEDULING_EXTRACTOR = //gm; var IMAGE_FORMATS = [ "jpg", "jpeg", "gif", "png", "svg", "webp", "apng", "avif", "jfif", "pjpeg", "pjp", "bmp" ]; var AUDIO_FORMATS = ["mp3", "webm", "m4a", "wav", "ogg"]; var VIDEO_FORMATS = ["mp4", "mkv", "avi", "mov"]; var COLLAPSE_ICON = ''; // src/utils.ts function getTypedObjectEntries(obj) { return Object.entries(obj); } var getKeysPreserveType = Object.keys; var escapeRegexString = (text) => text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); function cyrb53(str, seed = 0) { let h12 = 3735928559 ^ seed, h22 = 1103547991 ^ seed; for (let i = 0, ch; i < str.length; i++) { ch = str.charCodeAt(i); h12 = Math.imul(h12 ^ ch, 2654435761); h22 = Math.imul(h22 ^ ch, 1597334677); } h12 = Math.imul(h12 ^ h12 >>> 16, 2246822507) ^ Math.imul(h22 ^ h22 >>> 13, 3266489909); h22 = Math.imul(h22 ^ h22 >>> 16, 2246822507) ^ Math.imul(h12 ^ h12 >>> 13, 3266489909); return (4294967296 * (2097151 & h22) + (h12 >>> 0)).toString(16); } // src/flashcard-modal.tsx var FlashcardEditModal = class extends import_obsidian3.Modal { constructor(app2, plugin, existingText) { super(app2); this.didSubmit = false; this.submitClickCallback = (_) => this.submit(); this.cancelClickCallback = (_) => this.cancel(); this.submitEnterCallback = (evt) => { if ((evt.ctrlKey || evt.metaKey) && evt.key === "Enter") { evt.preventDefault(); this.submit(); } }; this.plugin = plugin; this.titleEl.setText(t("EDIT_CARD")); this.titleEl.addClass("sr-centered"); this.modalText = existingText; this.waitForClose = new Promise((resolve2, reject) => { this.resolvePromise = resolve2; this.rejectPromise = reject; }); this.display(); this.open(); } static Prompt(app2, plugin, placeholder) { const newPromptModal = new FlashcardEditModal(app2, plugin, placeholder); return newPromptModal.waitForClose; } display() { this.contentEl.empty(); this.modalEl.addClass("sr-flashcard-input-modal"); const mainContentContainer = this.contentEl.createDiv(); mainContentContainer.addClass("sr-flashcard-input-area"); this.inputComponent = this.createInputField(mainContentContainer, this.modalText); this.createButtonBar(mainContentContainer); } createButton(container, text, callback2) { const btn = new import_obsidian3.ButtonComponent(container); btn.setButtonText(text).onClick(callback2); return btn; } createButtonBar(mainContentContainer) { const buttonBarContainer = mainContentContainer.createDiv(); buttonBarContainer.addClass("sr-flashcard-edit-button-bar"); this.createButton( buttonBarContainer, t("SAVE"), this.submitClickCallback ).setCta().buttonEl.style.marginRight = "0"; this.createButton(buttonBarContainer, t("CANCEL"), this.cancelClickCallback); } createInputField(container, value) { const textComponent = new import_obsidian3.TextAreaComponent(container); textComponent.inputEl.style.width = "100%"; textComponent.setValue(value != null ? value : "").onChange((value2) => this.input = value2).inputEl.addEventListener("keydown", this.submitEnterCallback); return textComponent; } submit() { this.didSubmit = true; this.close(); } cancel() { this.close(); } onOpen() { super.onOpen(); this.inputComponent.inputEl.focus(); } onClose() { super.onClose(); this.resolveInput(); this.removeInputListener(); } resolveInput() { if (!this.didSubmit) this.rejectPromise(t("NO_INPUT")); else this.resolvePromise(this.input); } removeInputListener() { this.inputComponent.inputEl.removeEventListener("keydown", this.submitEnterCallback); } }; var FlashcardModal = class extends import_obsidian3.Modal { constructor(app2, plugin, ignoreStats = false) { super(app2); this.plugin = plugin; this.ignoreStats = ignoreStats; this.titleEl.setText(t("DECKS")); this.titleEl.addClass("sr-centered"); if (import_obsidian3.Platform.isMobile) { this.contentEl.style.display = "block"; } this.modalEl.style.height = this.plugin.data.settings.flashcardHeightPercentage + "%"; this.modalEl.style.width = this.plugin.data.settings.flashcardWidthPercentage + "%"; this.contentEl.style.position = "relative"; this.contentEl.style.height = "92%"; this.contentEl.addClass("sr-modal-content"); document.body.onkeydown = (e) => { if (document.activeElement.nodeName !== "TEXTAREA" && this.mode !== 0 /* DecksList */) { const consume = () => { e.preventDefault(); e.stopPropagation(); }; if (this.mode !== 3 /* Closed */ && e.code === "KeyS") { this.skipCurrentCard(); consume(); } else if (this.mode === 1 /* Front */ && (e.code === "Space" || e.code === "Enter")) { this.showAnswer(); consume(); } else if (this.mode === 2 /* Back */) { if (e.code === "Numpad1" || e.code === "Digit1") { this.processReview(2 /* Hard */); consume(); } else if (e.code === "Numpad2" || e.code === "Digit2" || e.code === "Space") { this.processReview(1 /* Good */); consume(); } else if (e.code === "Numpad3" || e.code === "Digit3") { this.processReview(0 /* Easy */); consume(); } else if (e.code === "Numpad0" || e.code === "Digit0") { this.processReview(3 /* Reset */); consume(); } } } }; } onOpen() { this.decksList(); } onClose() { this.mode = 3 /* Closed */; } decksList() { const aimDeck = this.plugin.deckTree.subdecks.filter( (deck) => deck.deckName === this.plugin.data.historyDeck ); if (this.plugin.data.historyDeck && aimDeck.length > 0) { const deck = aimDeck[0]; this.currentDeck = deck; this.checkDeck = deck.parent; this.setupCardsView(); deck.nextCard(this); return; } this.mode = 0 /* DecksList */; this.titleEl.setText(t("DECKS")); this.titleEl.innerHTML += /* @__PURE__ */ (0, import_vhtml.default)("p", { style: "margin:0px;line-height:12px;" }, /* @__PURE__ */ (0, import_vhtml.default)( "span", { style: "background-color:#4caf50;color:#ffffff;", "aria-label": t("DUE_CARDS"), class: "tag-pane-tag-count tree-item-flair sr-deck-counts" }, this.plugin.deckTree.dueFlashcardsCount.toString() ), /* @__PURE__ */ (0, import_vhtml.default)( "span", { style: "background-color:#2196f3;", "aria-label": t("NEW_CARDS"), class: "tag-pane-tag-count tree-item-flair sr-deck-counts" }, this.plugin.deckTree.newFlashcardsCount.toString() ), /* @__PURE__ */ (0, import_vhtml.default)( "span", { style: "background-color:#ff7043;", "aria-label": t("TOTAL_CARDS"), class: "tag-pane-tag-count tree-item-flair sr-deck-counts" }, this.plugin.deckTree.totalFlashcards.toString() )); this.contentEl.empty(); this.contentEl.setAttribute("id", "sr-flashcard-view"); for (const deck of this.plugin.deckTree.subdecks) { deck.render(this.contentEl, this); } } setupCardsView() { this.contentEl.empty(); const flashCardMenu = this.contentEl.createDiv("sr-flashcard-menu"); const backButton = flashCardMenu.createEl("button"); backButton.addClass("sr-flashcard-menu-item"); (0, import_obsidian3.setIcon)(backButton, "arrow-left"); backButton.setAttribute("aria-label", t("BACK")); backButton.addEventListener("click", () => { this.plugin.data.historyDeck = ""; this.decksList(); }); this.editButton = flashCardMenu.createEl("button"); this.editButton.addClass("sr-flashcard-menu-item"); (0, import_obsidian3.setIcon)(this.editButton, "edit"); this.editButton.setAttribute("aria-label", t("EDIT_CARD")); this.editButton.addEventListener("click", async () => { const textPromptArr = this.currentCard.cardText.split("\n"); let textPrompt = ""; if (textPromptArr[textPromptArr.length - 1].startsWith("`; } else { let scheduling = [ ...this.currentCard.cardText.matchAll(MULTI_SCHEDULING_EXTRACTOR) ]; if (scheduling.length === 0) { scheduling = [...this.currentCard.cardText.matchAll(LEGACY_SCHEDULING_EXTRACTOR)]; } const currCardSched = ["0", dueString, interval.toString(), ease.toString()]; if (this.currentCard.isDue) { scheduling[this.currentCard.siblingIdx] = currCardSched; } else { scheduling.push(currCardSched); } this.currentCard.cardText = this.currentCard.cardText.replace(//gm, ""); this.currentCard.cardText += ""; } fileText = fileText.replace(replacementRegex, () => this.currentCard.cardText); for (const sibling of this.currentCard.siblings) { sibling.cardText = this.currentCard.cardText; } if (this.plugin.data.settings.burySiblingCards) { this.burySiblingCards(true); } await this.app.vault.modify(this.currentCard.note, fileText); this.currentDeck.nextCard(this); } async burySiblingCards(tillNextDay) { if (tillNextDay) { this.plugin.data.buryList.push(cyrb53(this.currentCard.cardText)); await this.plugin.savePluginData(); } for (const sibling of this.currentCard.siblings) { const dueIdx = this.currentDeck.dueFlashcards.indexOf(sibling); const newIdx = this.currentDeck.newFlashcards.indexOf(sibling); if (dueIdx !== -1) { this.currentDeck.deleteFlashcardAtIndex( dueIdx, this.currentDeck.dueFlashcards[dueIdx].isDue ); } else if (newIdx !== -1) { this.currentDeck.deleteFlashcardAtIndex( newIdx, this.currentDeck.newFlashcards[newIdx].isDue ); } } } skipCurrentCard() { this.currentDeck.deleteFlashcardAtIndex(this.currentCardIdx, this.currentCard.isDue); this.burySiblingCards(false); this.currentDeck.nextCard(this); } // slightly modified version of the renderMarkdown function in // https://github.com/mgmeyers/obsidian-kanban/blob/main/src/KanbanView.tsx async renderMarkdownWrapper(markdownString, containerEl, recursiveDepth = 0) { if (recursiveDepth > 4) return; import_obsidian3.MarkdownRenderer.renderMarkdown( markdownString, containerEl, this.currentCard.note.path, this.plugin ); containerEl.findAll(".internal-embed").forEach((el) => { const link2 = this.parseLink(el.getAttribute("src")); if (!link2.target) { el.innerText = link2.text; } else if (link2.target instanceof import_obsidian3.TFile) { if (link2.target.extension !== "md") { this.embedMediaFile(el, link2.target); } else { el.innerText = ""; this.renderTransclude(el, link2, recursiveDepth); } } }); } parseLink(src) { const linkComponentsRegex = /^(?[^#^]+)?(?:#(?!\^)(?.+)|#\^(?.+)|#)?$/; const matched = typeof src === "string" && src.match(linkComponentsRegex); const file = matched.groups.file || this.currentCard.note.path; const target = this.plugin.app.metadataCache.getFirstLinkpathDest( file, this.currentCard.note.path ); return { text: matched[0], file: matched.groups.file, heading: matched.groups.heading, blockId: matched.groups.blockId, target }; } embedMediaFile(el, target) { el.innerText = ""; if (IMAGE_FORMATS.includes(target.extension)) { el.createEl( "img", { attr: { src: this.plugin.app.vault.getResourcePath(target) } }, (img) => { if (el.hasAttribute("width")) img.setAttribute("width", el.getAttribute("width")); else img.setAttribute("width", "100%"); if (el.hasAttribute("alt")) img.setAttribute("alt", el.getAttribute("alt")); el.addEventListener( "click", (ev) => ev.target.style.minWidth = ev.target.style.minWidth === "100%" ? null : "100%" ); } ); el.addClasses(["image-embed", "is-loaded"]); } else if (AUDIO_FORMATS.includes(target.extension) || VIDEO_FORMATS.includes(target.extension)) { el.createEl( AUDIO_FORMATS.includes(target.extension) ? "audio" : "video", { attr: { controls: "", src: this.plugin.app.vault.getResourcePath(target) } }, (audio) => { if (el.hasAttribute("alt")) audio.setAttribute("alt", el.getAttribute("alt")); } ); el.addClasses(["media-embed", "is-loaded"]); } else { el.innerText = target.path; } } async renderTransclude(el, link2, recursiveDepth) { var _a, _b, _c, _d; const cache = this.app.metadataCache.getCache(link2.target.path); const text = await this.app.vault.cachedRead(link2.target); let blockText; if (link2.heading) { const clean = (s) => s.replace(/[\W\s]/g, ""); const headingIndex = (_a = cache.headings) == null ? void 0 : _a.findIndex( (h4) => clean(h4.heading) === clean(link2.heading) ); const heading = cache.headings[headingIndex]; const startAt = heading.position.start.offset; const endAt = ((_d = (_c = (_b = cache.headings.slice(headingIndex + 1).find((h4) => h4.level <= heading.level)) == null ? void 0 : _b.position) == null ? void 0 : _c.start) == null ? void 0 : _d.offset) || text.length; blockText = text.substring(startAt, endAt); } else if (link2.blockId) { const block = cache.blocks[link2.blockId]; const startAt = block.position.start.offset; const endAt = block.position.end.offset; blockText = text.substring(startAt, endAt); } else { blockText = text; } this.renderMarkdownWrapper(blockText, el, recursiveDepth + 1); } }; var Deck = class { constructor(deckName, parent) { this.newFlashcardsCount = 0; this.dueFlashcardsCount = 0; // counts those in subdecks too this.totalFlashcards = 0; this.deckName = deckName; this.newFlashcards = []; this.newFlashcardsCount = 0; this.dueFlashcards = []; this.dueFlashcardsCount = 0; this.totalFlashcards = 0; this.subdecks = []; this.parent = parent; } createDeck(deckPath) { if (deckPath.length === 0) { return; } const deckName = deckPath.shift(); for (const deck2 of this.subdecks) { if (deckName === deck2.deckName) { deck2.createDeck(deckPath); return; } } const deck = new Deck(deckName, this); this.subdecks.push(deck); deck.createDeck(deckPath); } insertFlashcard(deckPath, cardObj) { if (cardObj.isDue) { this.dueFlashcardsCount++; } else { this.newFlashcardsCount++; } this.totalFlashcards++; if (deckPath.length === 0) { if (cardObj.isDue) { this.dueFlashcards.push(cardObj); } else { this.newFlashcards.push(cardObj); } return; } const deckName = deckPath.shift(); for (const deck of this.subdecks) { if (deckName === deck.deckName) { deck.insertFlashcard(deckPath, cardObj); return; } } } // count flashcards that have either been buried // or aren't due yet countFlashcard(deckPath, n = 1) { this.totalFlashcards += n; const deckName = deckPath.shift(); for (const deck of this.subdecks) { if (deckName === deck.deckName) { deck.countFlashcard(deckPath, n); return; } } } deleteFlashcardAtIndex(index, cardIsDue) { if (cardIsDue) { this.dueFlashcards.splice(index, 1); this.dueFlashcardsCount--; } else { this.newFlashcards.splice(index, 1); this.newFlashcardsCount--; } let deck = this.parent; while (deck !== null) { if (cardIsDue) { deck.dueFlashcardsCount--; } else { deck.newFlashcardsCount--; } deck = deck.parent; } } sortSubdecksList() { this.subdecks.sort((a, b) => { if (a.deckName < b.deckName) { return -1; } else if (a.deckName > b.deckName) { return 1; } return 0; }); for (const deck of this.subdecks) { deck.sortSubdecksList(); } } render(containerEl, modal) { const deckView = containerEl.createDiv("tree-item"); const deckViewSelf = deckView.createDiv( "tree-item-self tag-pane-tag is-clickable" ); const shouldBeInitiallyExpanded = modal.plugin.data.settings.initiallyExpandAllSubdecksInTree; let collapsed = !shouldBeInitiallyExpanded; let collapseIconEl = null; if (this.subdecks.length > 0) { collapseIconEl = deckViewSelf.createDiv("tree-item-icon collapse-icon"); collapseIconEl.innerHTML = COLLAPSE_ICON; collapseIconEl.childNodes[0].style.transform = collapsed ? "rotate(-90deg)" : ""; } const deckViewInner = deckViewSelf.createDiv("tree-item-inner"); deckViewInner.addEventListener("click", () => { modal.plugin.data.historyDeck = this.deckName; modal.currentDeck = this; modal.checkDeck = this.parent; modal.setupCardsView(); this.nextCard(modal); }); const deckViewInnerText = deckViewInner.createDiv("tag-pane-tag-text"); deckViewInnerText.innerHTML += /* @__PURE__ */ (0, import_vhtml.default)("span", { class: "tag-pane-tag-self" }, this.deckName); const deckViewOuter = deckViewSelf.createDiv("tree-item-flair-outer"); deckViewOuter.innerHTML += /* @__PURE__ */ (0, import_vhtml.default)("span", null, /* @__PURE__ */ (0, import_vhtml.default)( "span", { style: "background-color:#4caf50;", class: "tag-pane-tag-count tree-item-flair sr-deck-counts" }, this.dueFlashcardsCount.toString() ), /* @__PURE__ */ (0, import_vhtml.default)( "span", { style: "background-color:#2196f3;", class: "tag-pane-tag-count tree-item-flair sr-deck-counts" }, this.newFlashcardsCount.toString() ), /* @__PURE__ */ (0, import_vhtml.default)( "span", { style: "background-color:#ff7043;", class: "tag-pane-tag-count tree-item-flair sr-deck-counts" }, this.totalFlashcards.toString() )); const deckViewChildren = deckView.createDiv("tree-item-children"); deckViewChildren.style.display = collapsed ? "none" : "block"; if (this.subdecks.length > 0) { collapseIconEl.addEventListener("click", () => { if (collapsed) { collapseIconEl.childNodes[0].style.transform = ""; deckViewChildren.style.display = "block"; } else { collapseIconEl.childNodes[0].style.transform = "rotate(-90deg)"; deckViewChildren.style.display = "none"; } collapsed = !collapsed; }); } for (const deck of this.subdecks) { deck.render(deckViewChildren, modal); } } nextCard(modal) { if (this.newFlashcards.length + this.dueFlashcards.length === 0) { if (this.dueFlashcardsCount + this.newFlashcardsCount > 0) { for (const deck of this.subdecks) { if (deck.dueFlashcardsCount + deck.newFlashcardsCount > 0) { modal.currentDeck = deck; deck.nextCard(modal); return; } } } if (this.parent == modal.checkDeck) { modal.plugin.data.historyDeck = ""; modal.decksList(); } else { this.parent.nextCard(modal); } return; } modal.responseDiv.style.display = "none"; modal.resetButton.disabled = true; modal.titleEl.setText( `${this.deckName}: ${this.dueFlashcardsCount + this.newFlashcardsCount}` ); modal.answerBtn.style.display = "initial"; modal.flashcardView.empty(); modal.mode = 1 /* Front */; let interval = 1, ease = modal.plugin.data.settings.baseEase, delayBeforeReview = 0; if (this.dueFlashcards.length > 0) { if (modal.plugin.data.settings.randomizeCardOrder) { modal.currentCardIdx = Math.floor(Math.random() * this.dueFlashcards.length); } else { modal.currentCardIdx = 0; } modal.currentCard = this.dueFlashcards[modal.currentCardIdx]; modal.renderMarkdownWrapper(modal.currentCard.front, modal.flashcardView); interval = modal.currentCard.interval; ease = modal.currentCard.ease; delayBeforeReview = modal.currentCard.delayBeforeReview; } else if (this.newFlashcards.length > 0) { if (modal.plugin.data.settings.randomizeCardOrder) { const pickedCardIdx = Math.floor(Math.random() * this.newFlashcards.length); modal.currentCardIdx = pickedCardIdx; const pickedCard = this.newFlashcards[pickedCardIdx]; let idx = pickedCardIdx; while (idx >= 0 && pickedCard.siblings.includes(this.newFlashcards[idx])) { if (!this.newFlashcards[idx].isDue) { modal.currentCardIdx = idx; } idx--; } } else { modal.currentCardIdx = 0; } modal.currentCard = this.newFlashcards[modal.currentCardIdx]; modal.renderMarkdownWrapper(modal.currentCard.front, modal.flashcardView); if (Object.prototype.hasOwnProperty.call( modal.plugin.easeByPath, modal.currentCard.note.path )) { ease = modal.plugin.easeByPath[modal.currentCard.note.path]; } } const hardInterval = schedule( 2 /* Hard */, interval, ease, delayBeforeReview, modal.plugin.data.settings ).interval; const goodInterval = schedule( 1 /* Good */, interval, ease, delayBeforeReview, modal.plugin.data.settings ).interval; const easyInterval = schedule( 0 /* Easy */, interval, ease, delayBeforeReview, modal.plugin.data.settings ).interval; if (modal.ignoreStats) { modal.hardBtn.setText(`${modal.plugin.data.settings.flashcardHardText}`); modal.easyBtn.setText(`${modal.plugin.data.settings.flashcardEasyText}`); } else if (import_obsidian3.Platform.isMobile) { modal.hardBtn.setText(textInterval(hardInterval, true)); modal.goodBtn.setText(textInterval(goodInterval, true)); modal.easyBtn.setText(textInterval(easyInterval, true)); } else { modal.hardBtn.setText( `${modal.plugin.data.settings.flashcardHardText} - ${textInterval( hardInterval, false )}` ); modal.goodBtn.setText( `${modal.plugin.data.settings.flashcardGoodText} - ${textInterval( goodInterval, false )}` ); modal.easyBtn.setText( `${modal.plugin.data.settings.flashcardEasyText} - ${textInterval( easyInterval, false )}` ); } if (modal.plugin.data.settings.showContextInCards) modal.contextView.setText(modal.currentCard.context); } }; // src/stats-modal.tsx var import_obsidian4 = require("obsidian"); var import_vhtml2 = __toESM(require_vhtml()); // node_modules/@kurkle/color/dist/color.esm.js function round(v) { return v + 0.5 | 0; } var lim = (v, l, h4) => Math.max(Math.min(v, h4), l); function p2b(v) { return lim(round(v * 2.55), 0, 255); } function n2b(v) { return lim(round(v * 255), 0, 255); } function b2n(v) { return lim(round(v / 2.55) / 100, 0, 1); } function n2p(v) { return lim(round(v * 100), 0, 100); } var map$1 = { 0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15 }; var hex = [..."0123456789ABCDEF"]; var h1 = (b) => hex[b & 15]; var h2 = (b) => hex[(b & 240) >> 4] + hex[b & 15]; var eq = (b) => (b & 240) >> 4 === (b & 15); var isShort = (v) => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a); function hexParse(str) { var len = str.length; var ret; if (str[0] === "#") { if (len === 4 || len === 5) { ret = { r: 255 & map$1[str[1]] * 17, g: 255 & map$1[str[2]] * 17, b: 255 & map$1[str[3]] * 17, a: len === 5 ? map$1[str[4]] * 17 : 255 }; } else if (len === 7 || len === 9) { ret = { r: map$1[str[1]] << 4 | map$1[str[2]], g: map$1[str[3]] << 4 | map$1[str[4]], b: map$1[str[5]] << 4 | map$1[str[6]], a: len === 9 ? map$1[str[7]] << 4 | map$1[str[8]] : 255 }; } } return ret; } var alpha = (a, f) => a < 255 ? f(a) : ""; function hexString(v) { var f = isShort(v) ? h1 : h2; return v ? "#" + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f) : void 0; } var HUE_RE = /^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/; function hsl2rgbn(h4, s, l) { const a = s * Math.min(l, 1 - l); const f = (n, k = (n + h4 / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1); return [f(0), f(8), f(4)]; } function hsv2rgbn(h4, s, v) { const f = (n, k = (n + h4 / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0); return [f(5), f(3), f(1)]; } function hwb2rgbn(h4, w, b) { const rgb = hsl2rgbn(h4, 1, 0.5); let i; if (w + b > 1) { i = 1 / (w + b); w *= i; b *= i; } for (i = 0; i < 3; i++) { rgb[i] *= 1 - w - b; rgb[i] += w; } return rgb; } function hueValue(r, g, b, d, max) { if (r === max) { return (g - b) / d + (g < b ? 6 : 0); } if (g === max) { return (b - r) / d + 2; } return (r - g) / d + 4; } function rgb2hsl(v) { const range = 255; const r = v.r / range; const g = v.g / range; const b = v.b / range; const max = Math.max(r, g, b); const min = Math.min(r, g, b); const l = (max + min) / 2; let h4, s, d; if (max !== min) { d = max - min; s = l > 0.5 ? d / (2 - max - min) : d / (max + min); h4 = hueValue(r, g, b, d, max); h4 = h4 * 60 + 0.5; } return [h4 | 0, s || 0, l]; } function calln(f, a, b, c) { return (Array.isArray(a) ? f(a[0], a[1], a[2]) : f(a, b, c)).map(n2b); } function hsl2rgb(h4, s, l) { return calln(hsl2rgbn, h4, s, l); } function hwb2rgb(h4, w, b) { return calln(hwb2rgbn, h4, w, b); } function hsv2rgb(h4, s, v) { return calln(hsv2rgbn, h4, s, v); } function hue(h4) { return (h4 % 360 + 360) % 360; } function hueParse(str) { const m = HUE_RE.exec(str); let a = 255; let v; if (!m) { return; } if (m[5] !== v) { a = m[6] ? p2b(+m[5]) : n2b(+m[5]); } const h4 = hue(+m[2]); const p1 = +m[3] / 100; const p2 = +m[4] / 100; if (m[1] === "hwb") { v = hwb2rgb(h4, p1, p2); } else if (m[1] === "hsv") { v = hsv2rgb(h4, p1, p2); } else { v = hsl2rgb(h4, p1, p2); } return { r: v[0], g: v[1], b: v[2], a }; } function rotate(v, deg) { var h4 = rgb2hsl(v); h4[0] = hue(h4[0] + deg); h4 = hsl2rgb(h4); v.r = h4[0]; v.g = h4[1]; v.b = h4[2]; } function hslString(v) { if (!v) { return; } const a = rgb2hsl(v); const h4 = a[0]; const s = n2p(a[1]); const l = n2p(a[2]); return v.a < 255 ? `hsla(${h4}, ${s}%, ${l}%, ${b2n(v.a)})` : `hsl(${h4}, ${s}%, ${l}%)`; } var map = { x: "dark", Z: "light", Y: "re", X: "blu", W: "gr", V: "medium", U: "slate", A: "ee", T: "ol", S: "or", B: "ra", C: "lateg", D: "ights", R: "in", Q: "turquois", E: "hi", P: "ro", O: "al", N: "le", M: "de", L: "yello", F: "en", K: "ch", G: "arks", H: "ea", I: "ightg", J: "wh" }; var names$1 = { OiceXe: "f0f8ff", antiquewEte: "faebd7", aqua: "ffff", aquamarRe: "7fffd4", azuY: "f0ffff", beige: "f5f5dc", bisque: "ffe4c4", black: "0", blanKedOmond: "ffebcd", Xe: "ff", XeviTet: "8a2be2", bPwn: "a52a2a", burlywood: "deb887", caMtXe: "5f9ea0", KartYuse: "7fff00", KocTate: "d2691e", cSO: "ff7f50", cSnflowerXe: "6495ed", cSnsilk: "fff8dc", crimson: "dc143c", cyan: "ffff", xXe: "8b", xcyan: "8b8b", xgTMnPd: "b8860b", xWay: "a9a9a9", xgYF: "6400", xgYy: "a9a9a9", xkhaki: "bdb76b", xmagFta: "8b008b", xTivegYF: "556b2f", xSange: "ff8c00", xScEd: "9932cc", xYd: "8b0000", xsOmon: "e9967a", xsHgYF: "8fbc8f", xUXe: "483d8b", xUWay: "2f4f4f", xUgYy: "2f4f4f", xQe: "ced1", xviTet: "9400d3", dAppRk: "ff1493", dApskyXe: "bfff", dimWay: "696969", dimgYy: "696969", dodgerXe: "1e90ff", fiYbrick: "b22222", flSOwEte: "fffaf0", foYstWAn: "228b22", fuKsia: "ff00ff", gaRsbSo: "dcdcdc", ghostwEte: "f8f8ff", gTd: "ffd700", gTMnPd: "daa520", Way: "808080", gYF: "8000", gYFLw: "adff2f", gYy: "808080", honeyMw: "f0fff0", hotpRk: "ff69b4", RdianYd: "cd5c5c", Rdigo: "4b0082", ivSy: "fffff0", khaki: "f0e68c", lavFMr: "e6e6fa", lavFMrXsh: "fff0f5", lawngYF: "7cfc00", NmoncEffon: "fffacd", ZXe: "add8e6", ZcSO: "f08080", Zcyan: "e0ffff", ZgTMnPdLw: "fafad2", ZWay: "d3d3d3", ZgYF: "90ee90", ZgYy: "d3d3d3", ZpRk: "ffb6c1", ZsOmon: "ffa07a", ZsHgYF: "20b2aa", ZskyXe: "87cefa", ZUWay: "778899", ZUgYy: "778899", ZstAlXe: "b0c4de", ZLw: "ffffe0", lime: "ff00", limegYF: "32cd32", lRF: "faf0e6", magFta: "ff00ff", maPon: "800000", VaquamarRe: "66cdaa", VXe: "cd", VScEd: "ba55d3", VpurpN: "9370db", VsHgYF: "3cb371", VUXe: "7b68ee", VsprRggYF: "fa9a", VQe: "48d1cc", VviTetYd: "c71585", midnightXe: "191970", mRtcYam: "f5fffa", mistyPse: "ffe4e1", moccasR: "ffe4b5", navajowEte: "ffdead", navy: "80", Tdlace: "fdf5e6", Tive: "808000", TivedBb: "6b8e23", Sange: "ffa500", SangeYd: "ff4500", ScEd: "da70d6", pOegTMnPd: "eee8aa", pOegYF: "98fb98", pOeQe: "afeeee", pOeviTetYd: "db7093", papayawEp: "ffefd5", pHKpuff: "ffdab9", peru: "cd853f", pRk: "ffc0cb", plum: "dda0dd", powMrXe: "b0e0e6", purpN: "800080", YbeccapurpN: "663399", Yd: "ff0000", Psybrown: "bc8f8f", PyOXe: "4169e1", saddNbPwn: "8b4513", sOmon: "fa8072", sandybPwn: "f4a460", sHgYF: "2e8b57", sHshell: "fff5ee", siFna: "a0522d", silver: "c0c0c0", skyXe: "87ceeb", UXe: "6a5acd", UWay: "708090", UgYy: "708090", snow: "fffafa", sprRggYF: "ff7f", stAlXe: "4682b4", tan: "d2b48c", teO: "8080", tEstN: "d8bfd8", tomato: "ff6347", Qe: "40e0d0", viTet: "ee82ee", JHt: "f5deb3", wEte: "ffffff", wEtesmoke: "f5f5f5", Lw: "ffff00", LwgYF: "9acd32" }; function unpack() { const unpacked = {}; const keys = Object.keys(names$1); const tkeys = Object.keys(map); let i, j, k, ok, nk; for (i = 0; i < keys.length; i++) { ok = nk = keys[i]; for (j = 0; j < tkeys.length; j++) { k = tkeys[j]; nk = nk.replace(k, map[k]); } k = parseInt(names$1[ok], 16); unpacked[nk] = [k >> 16 & 255, k >> 8 & 255, k & 255]; } return unpacked; } var names; function nameParse(str) { if (!names) { names = unpack(); names.transparent = [0, 0, 0, 0]; } const a = names[str.toLowerCase()]; return a && { r: a[0], g: a[1], b: a[2], a: a.length === 4 ? a[3] : 255 }; } var RGB_RE = /^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/; function rgbParse(str) { const m = RGB_RE.exec(str); let a = 255; let r, g, b; if (!m) { return; } if (m[7] !== r) { const v = +m[7]; a = m[8] ? p2b(v) : lim(v * 255, 0, 255); } r = +m[1]; g = +m[3]; b = +m[5]; r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255)); g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255)); b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255)); return { r, g, b, a }; } function rgbString(v) { return v && (v.a < 255 ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})` : `rgb(${v.r}, ${v.g}, ${v.b})`); } var to = (v) => v <= 31308e-7 ? v * 12.92 : Math.pow(v, 1 / 2.4) * 1.055 - 0.055; var from = (v) => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4); function interpolate2(rgb1, rgb2, t2) { const r = from(b2n(rgb1.r)); const g = from(b2n(rgb1.g)); const b = from(b2n(rgb1.b)); return { r: n2b(to(r + t2 * (from(b2n(rgb2.r)) - r))), g: n2b(to(g + t2 * (from(b2n(rgb2.g)) - g))), b: n2b(to(b + t2 * (from(b2n(rgb2.b)) - b))), a: rgb1.a + t2 * (rgb2.a - rgb1.a) }; } function modHSL(v, i, ratio) { if (v) { let tmp = rgb2hsl(v); tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1)); tmp = hsl2rgb(tmp); v.r = tmp[0]; v.g = tmp[1]; v.b = tmp[2]; } } function clone(v, proto) { return v ? Object.assign(proto || {}, v) : v; } function fromObject(input) { var v = { r: 0, g: 0, b: 0, a: 255 }; if (Array.isArray(input)) { if (input.length >= 3) { v = { r: input[0], g: input[1], b: input[2], a: 255 }; if (input.length > 3) { v.a = n2b(input[3]); } } } else { v = clone(input, { r: 0, g: 0, b: 0, a: 1 }); v.a = n2b(v.a); } return v; } function functionParse(str) { if (str.charAt(0) === "r") { return rgbParse(str); } return hueParse(str); } var Color = class { constructor(input) { if (input instanceof Color) { return input; } const type = typeof input; let v; if (type === "object") { v = fromObject(input); } else if (type === "string") { v = hexParse(input) || nameParse(input) || functionParse(input); } this._rgb = v; this._valid = !!v; } get valid() { return this._valid; } get rgb() { var v = clone(this._rgb); if (v) { v.a = b2n(v.a); } return v; } set rgb(obj) { this._rgb = fromObject(obj); } rgbString() { return this._valid ? rgbString(this._rgb) : void 0; } hexString() { return this._valid ? hexString(this._rgb) : void 0; } hslString() { return this._valid ? hslString(this._rgb) : void 0; } mix(color2, weight) { if (color2) { const c1 = this.rgb; const c2 = color2.rgb; let w2; const p = weight === w2 ? 0.5 : weight; const w = 2 * p - 1; const a = c1.a - c2.a; const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2; w2 = 1 - w1; c1.r = 255 & w1 * c1.r + w2 * c2.r + 0.5; c1.g = 255 & w1 * c1.g + w2 * c2.g + 0.5; c1.b = 255 & w1 * c1.b + w2 * c2.b + 0.5; c1.a = p * c1.a + (1 - p) * c2.a; this.rgb = c1; } return this; } interpolate(color2, t2) { if (color2) { this._rgb = interpolate2(this._rgb, color2._rgb, t2); } return this; } clone() { return new Color(this.rgb); } alpha(a) { this._rgb.a = n2b(a); return this; } clearer(ratio) { const rgb = this._rgb; rgb.a *= 1 - ratio; return this; } greyscale() { const rgb = this._rgb; const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11); rgb.r = rgb.g = rgb.b = val; return this; } opaquer(ratio) { const rgb = this._rgb; rgb.a *= 1 + ratio; return this; } negate() { const v = this._rgb; v.r = 255 - v.r; v.g = 255 - v.g; v.b = 255 - v.b; return this; } lighten(ratio) { modHSL(this._rgb, 2, ratio); return this; } darken(ratio) { modHSL(this._rgb, 2, -ratio); return this; } saturate(ratio) { modHSL(this._rgb, 1, ratio); return this; } desaturate(ratio) { modHSL(this._rgb, 1, -ratio); return this; } rotate(deg) { rotate(this._rgb, deg); return this; } }; // node_modules/chart.js/dist/chunks/helpers.segment.js function noop() { } var uid = (() => { let id = 0; return () => id++; })(); function isNullOrUndef(value) { return value === null || typeof value === "undefined"; } function isArray(value) { if (Array.isArray && Array.isArray(value)) { return true; } const type = Object.prototype.toString.call(value); if (type.slice(0, 7) === "[object" && type.slice(-6) === "Array]") { return true; } return false; } function isObject(value) { return value !== null && Object.prototype.toString.call(value) === "[object Object]"; } function isNumberFinite(value) { return (typeof value === "number" || value instanceof Number) && isFinite(+value); } function finiteOrDefault(value, defaultValue) { return isNumberFinite(value) ? value : defaultValue; } function valueOrDefault(value, defaultValue) { return typeof value === "undefined" ? defaultValue : value; } var toPercentage = (value, dimension) => typeof value === "string" && value.endsWith("%") ? parseFloat(value) / 100 : +value / dimension; var toDimension = (value, dimension) => typeof value === "string" && value.endsWith("%") ? parseFloat(value) / 100 * dimension : +value; function callback(fn, args, thisArg) { if (fn && typeof fn.call === "function") { return fn.apply(thisArg, args); } } function each(loopable, fn, thisArg, reverse) { let i, len, keys; if (isArray(loopable)) { len = loopable.length; if (reverse) { for (i = len - 1; i >= 0; i--) { fn.call(thisArg, loopable[i], i); } } else { for (i = 0; i < len; i++) { fn.call(thisArg, loopable[i], i); } } } else if (isObject(loopable)) { keys = Object.keys(loopable); len = keys.length; for (i = 0; i < len; i++) { fn.call(thisArg, loopable[keys[i]], keys[i]); } } } function _elementsEqual(a0, a1) { let i, ilen, v0, v1; if (!a0 || !a1 || a0.length !== a1.length) { return false; } for (i = 0, ilen = a0.length; i < ilen; ++i) { v0 = a0[i]; v1 = a1[i]; if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) { return false; } } return true; } function clone2(source) { if (isArray(source)) { return source.map(clone2); } if (isObject(source)) { const target = /* @__PURE__ */ Object.create(null); const keys = Object.keys(source); const klen = keys.length; let k = 0; for (; k < klen; ++k) { target[keys[k]] = clone2(source[keys[k]]); } return target; } return source; } function isValidKey(key) { return [ "__proto__", "prototype", "constructor" ].indexOf(key) === -1; } function _merger(key, target, source, options) { if (!isValidKey(key)) { return; } const tval = target[key]; const sval = source[key]; if (isObject(tval) && isObject(sval)) { merge(tval, sval, options); } else { target[key] = clone2(sval); } } function merge(target, source, options) { const sources = isArray(source) ? source : [ source ]; const ilen = sources.length; if (!isObject(target)) { return target; } options = options || {}; const merger = options.merger || _merger; let current; for (let i = 0; i < ilen; ++i) { current = sources[i]; if (!isObject(current)) { continue; } const keys = Object.keys(current); for (let k = 0, klen = keys.length; k < klen; ++k) { merger(keys[k], target, current, options); } } return target; } function mergeIf(target, source) { return merge(target, source, { merger: _mergerIf }); } function _mergerIf(key, target, source) { if (!isValidKey(key)) { return; } const tval = target[key]; const sval = source[key]; if (isObject(tval) && isObject(sval)) { mergeIf(tval, sval); } else if (!Object.prototype.hasOwnProperty.call(target, key)) { target[key] = clone2(sval); } } var keyResolvers = { // Chart.helpers.core resolveObjectKey should resolve empty key to root object "": (v) => v, // default resolvers x: (o) => o.x, y: (o) => o.y }; function _splitKey(key) { const parts = key.split("."); const keys = []; let tmp = ""; for (const part of parts) { tmp += part; if (tmp.endsWith("\\")) { tmp = tmp.slice(0, -1) + "."; } else { keys.push(tmp); tmp = ""; } } return keys; } function _getKeyResolver(key) { const keys = _splitKey(key); return (obj) => { for (const k of keys) { if (k === "") { break; } obj = obj && obj[k]; } return obj; }; } function resolveObjectKey(obj, key) { const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key)); return resolver(obj); } function _capitalize(str) { return str.charAt(0).toUpperCase() + str.slice(1); } var defined = (value) => typeof value !== "undefined"; var isFunction = (value) => typeof value === "function"; var setsEqual = (a, b) => { if (a.size !== b.size) { return false; } for (const item of a) { if (!b.has(item)) { return false; } } return true; }; function _isClickEvent(e) { return e.type === "mouseup" || e.type === "click" || e.type === "contextmenu"; } var PI = Math.PI; var TAU = 2 * PI; var PITAU = TAU + PI; var INFINITY = Number.POSITIVE_INFINITY; var RAD_PER_DEG = PI / 180; var HALF_PI = PI / 2; var QUARTER_PI = PI / 4; var TWO_THIRDS_PI = PI * 2 / 3; var log10 = Math.log10; var sign = Math.sign; function almostEquals(x, y, epsilon) { return Math.abs(x - y) < epsilon; } function niceNum(range) { const roundedRange = Math.round(range); range = almostEquals(range, roundedRange, range / 1e3) ? roundedRange : range; const niceRange = Math.pow(10, Math.floor(log10(range))); const fraction = range / niceRange; const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10; return niceFraction * niceRange; } function _factorize(value) { const result = []; const sqrt = Math.sqrt(value); let i; for (i = 1; i < sqrt; i++) { if (value % i === 0) { result.push(i); result.push(value / i); } } if (sqrt === (sqrt | 0)) { result.push(sqrt); } result.sort((a, b) => a - b).pop(); return result; } function isNumber(n) { return !isNaN(parseFloat(n)) && isFinite(n); } function almostWhole(x, epsilon) { const rounded = Math.round(x); return rounded - epsilon <= x && rounded + epsilon >= x; } function _setMinAndMaxByKey(array, target, property) { let i, ilen, value; for (i = 0, ilen = array.length; i < ilen; i++) { value = array[i][property]; if (!isNaN(value)) { target.min = Math.min(target.min, value); target.max = Math.max(target.max, value); } } } function toRadians(degrees) { return degrees * (PI / 180); } function toDegrees(radians) { return radians * (180 / PI); } function _decimalPlaces(x) { if (!isNumberFinite(x)) { return; } let e = 1; let p = 0; while (Math.round(x * e) / e !== x) { e *= 10; p++; } return p; } function getAngleFromPoint(centrePoint, anglePoint) { const distanceFromXCenter = anglePoint.x - centrePoint.x; const distanceFromYCenter = anglePoint.y - centrePoint.y; const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter); let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter); if (angle < -0.5 * PI) { angle += TAU; } return { angle, distance: radialDistanceFromCenter }; } function distanceBetweenPoints(pt1, pt2) { return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2)); } function _normalizeAngle(a) { return (a % TAU + TAU) % TAU; } function _angleBetween(angle, start, end, sameAngleIsFullCircle) { const a = _normalizeAngle(angle); const s = _normalizeAngle(start); const e = _normalizeAngle(end); const angleToStart = _normalizeAngle(s - a); const angleToEnd = _normalizeAngle(e - a); const startToAngle = _normalizeAngle(a - s); const endToAngle = _normalizeAngle(a - e); return a === s || a === e || sameAngleIsFullCircle && s === e || angleToStart > angleToEnd && startToAngle < endToAngle; } function _limitValue(value, min, max) { return Math.max(min, Math.min(max, value)); } function _int16Range(value) { return _limitValue(value, -32768, 32767); } function _isBetween(value, start, end, epsilon = 1e-6) { return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon; } function _lookup(table, value, cmp) { cmp = cmp || ((index) => table[index] < value); let hi = table.length - 1; let lo = 0; let mid; while (hi - lo > 1) { mid = lo + hi >> 1; if (cmp(mid)) { lo = mid; } else { hi = mid; } } return { lo, hi }; } var _lookupByKey = (table, key, value, last) => _lookup(table, value, last ? (index) => { const ti = table[index][key]; return ti < value || ti === value && table[index + 1][key] === value; } : (index) => table[index][key] < value); var _rlookupByKey = (table, key, value) => _lookup(table, value, (index) => table[index][key] >= value); function _filterBetween(values, min, max) { let start = 0; let end = values.length; while (start < end && values[start] < min) { start++; } while (end > start && values[end - 1] > max) { end--; } return start > 0 || end < values.length ? values.slice(start, end) : values; } var arrayEvents = [ "push", "pop", "shift", "splice", "unshift" ]; function listenArrayEvents(array, listener) { if (array._chartjs) { array._chartjs.listeners.push(listener); return; } Object.defineProperty(array, "_chartjs", { configurable: true, enumerable: false, value: { listeners: [ listener ] } }); arrayEvents.forEach((key) => { const method = "_onData" + _capitalize(key); const base = array[key]; Object.defineProperty(array, key, { configurable: true, enumerable: false, value(...args) { const res = base.apply(this, args); array._chartjs.listeners.forEach((object) => { if (typeof object[method] === "function") { object[method](...args); } }); return res; } }); }); } function unlistenArrayEvents(array, listener) { const stub = array._chartjs; if (!stub) { return; } const listeners = stub.listeners; const index = listeners.indexOf(listener); if (index !== -1) { listeners.splice(index, 1); } if (listeners.length > 0) { return; } arrayEvents.forEach((key) => { delete array[key]; }); delete array._chartjs; } function _arrayUnique(items) { const set2 = new Set(items); if (set2.size === items.length) { return items; } return Array.from(set2); } var requestAnimFrame = function() { if (typeof window === "undefined") { return function(callback2) { return callback2(); }; } return window.requestAnimationFrame; }(); function throttled(fn, thisArg) { let argsToUse = []; let ticking = false; return function(...args) { argsToUse = args; if (!ticking) { ticking = true; requestAnimFrame.call(window, () => { ticking = false; fn.apply(thisArg, argsToUse); }); } }; } function debounce(fn, delay) { let timeout; return function(...args) { if (delay) { clearTimeout(timeout); timeout = setTimeout(fn, delay, args); } else { fn.apply(this, args); } return delay; }; } var _toLeftRightCenter = (align) => align === "start" ? "left" : align === "end" ? "right" : "center"; var _alignStartEnd = (align, start, end) => align === "start" ? start : align === "end" ? end : (start + end) / 2; var _textX = (align, left, right, rtl) => { const check = rtl ? "left" : "right"; return align === check ? right : align === "center" ? (left + right) / 2 : left; }; var atEdge = (t2) => t2 === 0 || t2 === 1; var elasticIn = (t2, s, p) => -(Math.pow(2, 10 * (t2 -= 1)) * Math.sin((t2 - s) * TAU / p)); var elasticOut = (t2, s, p) => Math.pow(2, -10 * t2) * Math.sin((t2 - s) * TAU / p) + 1; var effects = { linear: (t2) => t2, easeInQuad: (t2) => t2 * t2, easeOutQuad: (t2) => -t2 * (t2 - 2), easeInOutQuad: (t2) => (t2 /= 0.5) < 1 ? 0.5 * t2 * t2 : -0.5 * (--t2 * (t2 - 2) - 1), easeInCubic: (t2) => t2 * t2 * t2, easeOutCubic: (t2) => (t2 -= 1) * t2 * t2 + 1, easeInOutCubic: (t2) => (t2 /= 0.5) < 1 ? 0.5 * t2 * t2 * t2 : 0.5 * ((t2 -= 2) * t2 * t2 + 2), easeInQuart: (t2) => t2 * t2 * t2 * t2, easeOutQuart: (t2) => -((t2 -= 1) * t2 * t2 * t2 - 1), easeInOutQuart: (t2) => (t2 /= 0.5) < 1 ? 0.5 * t2 * t2 * t2 * t2 : -0.5 * ((t2 -= 2) * t2 * t2 * t2 - 2), easeInQuint: (t2) => t2 * t2 * t2 * t2 * t2, easeOutQuint: (t2) => (t2 -= 1) * t2 * t2 * t2 * t2 + 1, easeInOutQuint: (t2) => (t2 /= 0.5) < 1 ? 0.5 * t2 * t2 * t2 * t2 * t2 : 0.5 * ((t2 -= 2) * t2 * t2 * t2 * t2 + 2), easeInSine: (t2) => -Math.cos(t2 * HALF_PI) + 1, easeOutSine: (t2) => Math.sin(t2 * HALF_PI), easeInOutSine: (t2) => -0.5 * (Math.cos(PI * t2) - 1), easeInExpo: (t2) => t2 === 0 ? 0 : Math.pow(2, 10 * (t2 - 1)), easeOutExpo: (t2) => t2 === 1 ? 1 : -Math.pow(2, -10 * t2) + 1, easeInOutExpo: (t2) => atEdge(t2) ? t2 : t2 < 0.5 ? 0.5 * Math.pow(2, 10 * (t2 * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t2 * 2 - 1)) + 2), easeInCirc: (t2) => t2 >= 1 ? t2 : -(Math.sqrt(1 - t2 * t2) - 1), easeOutCirc: (t2) => Math.sqrt(1 - (t2 -= 1) * t2), easeInOutCirc: (t2) => (t2 /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t2 * t2) - 1) : 0.5 * (Math.sqrt(1 - (t2 -= 2) * t2) + 1), easeInElastic: (t2) => atEdge(t2) ? t2 : elasticIn(t2, 0.075, 0.3), easeOutElastic: (t2) => atEdge(t2) ? t2 : elasticOut(t2, 0.075, 0.3), easeInOutElastic(t2) { const s = 0.1125; const p = 0.45; return atEdge(t2) ? t2 : t2 < 0.5 ? 0.5 * elasticIn(t2 * 2, s, p) : 0.5 + 0.5 * elasticOut(t2 * 2 - 1, s, p); }, easeInBack(t2) { const s = 1.70158; return t2 * t2 * ((s + 1) * t2 - s); }, easeOutBack(t2) { const s = 1.70158; return (t2 -= 1) * t2 * ((s + 1) * t2 + s) + 1; }, easeInOutBack(t2) { let s = 1.70158; if ((t2 /= 0.5) < 1) { return 0.5 * (t2 * t2 * (((s *= 1.525) + 1) * t2 - s)); } return 0.5 * ((t2 -= 2) * t2 * (((s *= 1.525) + 1) * t2 + s) + 2); }, easeInBounce: (t2) => 1 - effects.easeOutBounce(1 - t2), easeOutBounce(t2) { const m = 7.5625; const d = 2.75; if (t2 < 1 / d) { return m * t2 * t2; } if (t2 < 2 / d) { return m * (t2 -= 1.5 / d) * t2 + 0.75; } if (t2 < 2.5 / d) { return m * (t2 -= 2.25 / d) * t2 + 0.9375; } return m * (t2 -= 2.625 / d) * t2 + 0.984375; }, easeInOutBounce: (t2) => t2 < 0.5 ? effects.easeInBounce(t2 * 2) * 0.5 : effects.easeOutBounce(t2 * 2 - 1) * 0.5 + 0.5 }; function isPatternOrGradient(value) { if (value && typeof value === "object") { const type = value.toString(); return type === "[object CanvasPattern]" || type === "[object CanvasGradient]"; } return false; } function color(value) { return isPatternOrGradient(value) ? value : new Color(value); } function getHoverColor(value) { return isPatternOrGradient(value) ? value : new Color(value).saturate(0.5).darken(0.1).hexString(); } var numbers = [ "x", "y", "borderWidth", "radius", "tension" ]; var colors = [ "color", "borderColor", "backgroundColor" ]; function applyAnimationsDefaults(defaults2) { defaults2.set("animation", { delay: void 0, duration: 1e3, easing: "easeOutQuart", fn: void 0, from: void 0, loop: void 0, to: void 0, type: void 0 }); defaults2.describe("animation", { _fallback: false, _indexable: false, _scriptable: (name) => name !== "onProgress" && name !== "onComplete" && name !== "fn" }); defaults2.set("animations", { colors: { type: "color", properties: colors }, numbers: { type: "number", properties: numbers } }); defaults2.describe("animations", { _fallback: "animation" }); defaults2.set("transitions", { active: { animation: { duration: 400 } }, resize: { animation: { duration: 0 } }, show: { animations: { colors: { from: "transparent" }, visible: { type: "boolean", duration: 0 } } }, hide: { animations: { colors: { to: "transparent" }, visible: { type: "boolean", easing: "linear", fn: (v) => v | 0 } } } }); } function applyLayoutsDefaults(defaults2) { defaults2.set("layout", { autoPadding: true, padding: { top: 0, right: 0, bottom: 0, left: 0 } }); } var intlCache = /* @__PURE__ */ new Map(); function getNumberFormat(locale2, options) { options = options || {}; const cacheKey = locale2 + JSON.stringify(options); let formatter = intlCache.get(cacheKey); if (!formatter) { formatter = new Intl.NumberFormat(locale2, options); intlCache.set(cacheKey, formatter); } return formatter; } function formatNumber(num, locale2, options) { return getNumberFormat(locale2, options).format(num); } var formatters = { values(value) { return isArray(value) ? value : "" + value; }, numeric(tickValue, index, ticks) { if (tickValue === 0) { return "0"; } const locale2 = this.chart.options.locale; let notation; let delta = tickValue; if (ticks.length > 1) { const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value)); if (maxTick < 1e-4 || maxTick > 1e15) { notation = "scientific"; } delta = calculateDelta(tickValue, ticks); } const logDelta = log10(Math.abs(delta)); const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0); const options = { notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal }; Object.assign(options, this.options.ticks.format); return formatNumber(tickValue, locale2, options); }, logarithmic(tickValue, index, ticks) { if (tickValue === 0) { return "0"; } const remain = ticks[index].significand || tickValue / Math.pow(10, Math.floor(log10(tickValue))); if ([ 1, 2, 3, 5, 10, 15 ].includes(remain) || index > 0.8 * ticks.length) { return formatters.numeric.call(this, tickValue, index, ticks); } return ""; } }; function calculateDelta(tickValue, ticks) { let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value; if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) { delta = tickValue - Math.floor(tickValue); } return delta; } var Ticks = { formatters }; function applyScaleDefaults(defaults2) { defaults2.set("scale", { display: true, offset: false, reverse: false, beginAtZero: false, bounds: "ticks", grace: 0, grid: { display: true, lineWidth: 1, drawOnChartArea: true, drawTicks: true, tickLength: 8, tickWidth: (_ctx, options) => options.lineWidth, tickColor: (_ctx, options) => options.color, offset: false }, border: { display: true, dash: [], dashOffset: 0, width: 1 }, title: { display: false, text: "", padding: { top: 4, bottom: 4 } }, ticks: { minRotation: 0, maxRotation: 50, mirror: false, textStrokeWidth: 0, textStrokeColor: "", padding: 3, display: true, autoSkip: true, autoSkipPadding: 3, labelOffset: 0, callback: Ticks.formatters.values, minor: {}, major: {}, align: "center", crossAlign: "near", showLabelBackdrop: false, backdropColor: "rgba(255, 255, 255, 0.75)", backdropPadding: 2 } }); defaults2.route("scale.ticks", "color", "", "color"); defaults2.route("scale.grid", "color", "", "borderColor"); defaults2.route("scale.border", "color", "", "borderColor"); defaults2.route("scale.title", "color", "", "color"); defaults2.describe("scale", { _fallback: false, _scriptable: (name) => !name.startsWith("before") && !name.startsWith("after") && name !== "callback" && name !== "parser", _indexable: (name) => name !== "borderDash" && name !== "tickBorderDash" && name !== "dash" }); defaults2.describe("scales", { _fallback: "scale" }); defaults2.describe("scale.ticks", { _scriptable: (name) => name !== "backdropPadding" && name !== "callback", _indexable: (name) => name !== "backdropPadding" }); } var overrides = /* @__PURE__ */ Object.create(null); var descriptors = /* @__PURE__ */ Object.create(null); function getScope$1(node, key) { if (!key) { return node; } const keys = key.split("."); for (let i = 0, n = keys.length; i < n; ++i) { const k = keys[i]; node = node[k] || (node[k] = /* @__PURE__ */ Object.create(null)); } return node; } function set(root, scope, values) { if (typeof scope === "string") { return merge(getScope$1(root, scope), values); } return merge(getScope$1(root, ""), scope); } var Defaults = class { constructor(_descriptors2, _appliers) { this.animation = void 0; this.backgroundColor = "rgba(0,0,0,0.1)"; this.borderColor = "rgba(0,0,0,0.1)"; this.color = "#666"; this.datasets = {}; this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio(); this.elements = {}; this.events = [ "mousemove", "mouseout", "click", "touchstart", "touchmove" ]; this.font = { family: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif", size: 12, style: "normal", lineHeight: 1.2, weight: null }; this.hover = {}; this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor); this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor); this.hoverColor = (ctx, options) => getHoverColor(options.color); this.indexAxis = "x"; this.interaction = { mode: "nearest", intersect: true, includeInvisible: false }; this.maintainAspectRatio = true; this.onHover = null; this.onClick = null; this.parsing = true; this.plugins = {}; this.responsive = true; this.scale = void 0; this.scales = {}; this.showLine = true; this.drawActiveElementsOnTop = true; this.describe(_descriptors2); this.apply(_appliers); } set(scope, values) { return set(this, scope, values); } get(scope) { return getScope$1(this, scope); } describe(scope, values) { return set(descriptors, scope, values); } override(scope, values) { return set(overrides, scope, values); } route(scope, name, targetScope, targetName) { const scopeObject = getScope$1(this, scope); const targetScopeObject = getScope$1(this, targetScope); const privateName = "_" + name; Object.defineProperties(scopeObject, { [privateName]: { value: scopeObject[name], writable: true }, [name]: { enumerable: true, get() { const local = this[privateName]; const target = targetScopeObject[targetName]; if (isObject(local)) { return Object.assign({}, target, local); } return valueOrDefault(local, target); }, set(value) { this[privateName] = value; } } }); } apply(appliers) { appliers.forEach((apply) => apply(this)); } }; var defaults = /* @__PURE__ */ new Defaults({ _scriptable: (name) => !name.startsWith("on"), _indexable: (name) => name !== "events", hover: { _fallback: "interaction" }, interaction: { _scriptable: false, _indexable: false } }, [ applyAnimationsDefaults, applyLayoutsDefaults, applyScaleDefaults ]); function toFontString(font) { if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) { return null; } return (font.style ? font.style + " " : "") + (font.weight ? font.weight + " " : "") + font.size + "px " + font.family; } function _measureText(ctx, data, gc, longest, string) { let textWidth = data[string]; if (!textWidth) { textWidth = data[string] = ctx.measureText(string).width; gc.push(string); } if (textWidth > longest) { longest = textWidth; } return longest; } function _longestText(ctx, font, arrayOfThings, cache) { cache = cache || {}; let data = cache.data = cache.data || {}; let gc = cache.garbageCollect = cache.garbageCollect || []; if (cache.font !== font) { data = cache.data = {}; gc = cache.garbageCollect = []; cache.font = font; } ctx.save(); ctx.font = font; let longest = 0; const ilen = arrayOfThings.length; let i, j, jlen, thing, nestedThing; for (i = 0; i < ilen; i++) { thing = arrayOfThings[i]; if (thing !== void 0 && thing !== null && !isArray(thing)) { longest = _measureText(ctx, data, gc, longest, thing); } else if (isArray(thing)) { for (j = 0, jlen = thing.length; j < jlen; j++) { nestedThing = thing[j]; if (nestedThing !== void 0 && nestedThing !== null && !isArray(nestedThing)) { longest = _measureText(ctx, data, gc, longest, nestedThing); } } } } ctx.restore(); const gcLen = gc.length / 2; if (gcLen > arrayOfThings.length) { for (i = 0; i < gcLen; i++) { delete data[gc[i]]; } gc.splice(0, gcLen); } return longest; } function _alignPixel(chart, pixel, width) { const devicePixelRatio = chart.currentDevicePixelRatio; const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0; return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth; } function clearCanvas(canvas, ctx) { ctx = ctx || canvas.getContext("2d"); ctx.save(); ctx.resetTransform(); ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.restore(); } function drawPoint(ctx, options, x, y) { drawPointLegend(ctx, options, x, y, null); } function drawPointLegend(ctx, options, x, y, w) { let type, xOffset, yOffset, size, cornerRadius, width, xOffsetW, yOffsetW; const style = options.pointStyle; const rotation = options.rotation; const radius = options.radius; let rad = (rotation || 0) * RAD_PER_DEG; if (style && typeof style === "object") { type = style.toString(); if (type === "[object HTMLImageElement]" || type === "[object HTMLCanvasElement]") { ctx.save(); ctx.translate(x, y); ctx.rotate(rad); ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height); ctx.restore(); return; } } if (isNaN(radius) || radius <= 0) { return; } ctx.beginPath(); switch (style) { default: if (w) { ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU); } else { ctx.arc(x, y, radius, 0, TAU); } ctx.closePath(); break; case "triangle": width = w ? w / 2 : radius; ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius); rad += TWO_THIRDS_PI; ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius); rad += TWO_THIRDS_PI; ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius); ctx.closePath(); break; case "rectRounded": cornerRadius = radius * 0.516; size = radius - cornerRadius; xOffset = Math.cos(rad + QUARTER_PI) * size; xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size); yOffset = Math.sin(rad + QUARTER_PI) * size; yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size); ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI); ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad); ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI); ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI); ctx.closePath(); break; case "rect": if (!rotation) { size = Math.SQRT1_2 * radius; width = w ? w / 2 : size; ctx.rect(x - width, y - size, 2 * width, 2 * size); break; } rad += QUARTER_PI; case "rectRot": xOffsetW = Math.cos(rad) * (w ? w / 2 : radius); xOffset = Math.cos(rad) * radius; yOffset = Math.sin(rad) * radius; yOffsetW = Math.sin(rad) * (w ? w / 2 : radius); ctx.moveTo(x - xOffsetW, y - yOffset); ctx.lineTo(x + yOffsetW, y - xOffset); ctx.lineTo(x + xOffsetW, y + yOffset); ctx.lineTo(x - yOffsetW, y + xOffset); ctx.closePath(); break; case "crossRot": rad += QUARTER_PI; case "cross": xOffsetW = Math.cos(rad) * (w ? w / 2 : radius); xOffset = Math.cos(rad) * radius; yOffset = Math.sin(rad) * radius; yOffsetW = Math.sin(rad) * (w ? w / 2 : radius); ctx.moveTo(x - xOffsetW, y - yOffset); ctx.lineTo(x + xOffsetW, y + yOffset); ctx.moveTo(x + yOffsetW, y - xOffset); ctx.lineTo(x - yOffsetW, y + xOffset); break; case "star": xOffsetW = Math.cos(rad) * (w ? w / 2 : radius); xOffset = Math.cos(rad) * radius; yOffset = Math.sin(rad) * radius; yOffsetW = Math.sin(rad) * (w ? w / 2 : radius); ctx.moveTo(x - xOffsetW, y - yOffset); ctx.lineTo(x + xOffsetW, y + yOffset); ctx.moveTo(x + yOffsetW, y - xOffset); ctx.lineTo(x - yOffsetW, y + xOffset); rad += QUARTER_PI; xOffsetW = Math.cos(rad) * (w ? w / 2 : radius); xOffset = Math.cos(rad) * radius; yOffset = Math.sin(rad) * radius; yOffsetW = Math.sin(rad) * (w ? w / 2 : radius); ctx.moveTo(x - xOffsetW, y - yOffset); ctx.lineTo(x + xOffsetW, y + yOffset); ctx.moveTo(x + yOffsetW, y - xOffset); ctx.lineTo(x - yOffsetW, y + xOffset); break; case "line": xOffset = w ? w / 2 : Math.cos(rad) * radius; yOffset = Math.sin(rad) * radius; ctx.moveTo(x - xOffset, y - yOffset); ctx.lineTo(x + xOffset, y + yOffset); break; case "dash": ctx.moveTo(x, y); ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius); break; case false: ctx.closePath(); break; } ctx.fill(); if (options.borderWidth > 0) { ctx.stroke(); } } function _isPointInArea(point, area, margin) { margin = margin || 0.5; return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin; } function clipArea(ctx, area) { ctx.save(); ctx.beginPath(); ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top); ctx.clip(); } function unclipArea(ctx) { ctx.restore(); } function setRenderOpts(ctx, opts) { if (opts.translation) { ctx.translate(opts.translation[0], opts.translation[1]); } if (!isNullOrUndef(opts.rotation)) { ctx.rotate(opts.rotation); } if (opts.color) { ctx.fillStyle = opts.color; } if (opts.textAlign) { ctx.textAlign = opts.textAlign; } if (opts.textBaseline) { ctx.textBaseline = opts.textBaseline; } } function decorateText(ctx, x, y, line, opts) { if (opts.strikethrough || opts.underline) { const metrics = ctx.measureText(line); const left = x - metrics.actualBoundingBoxLeft; const right = x + metrics.actualBoundingBoxRight; const top = y - metrics.actualBoundingBoxAscent; const bottom = y + metrics.actualBoundingBoxDescent; const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom; ctx.strokeStyle = ctx.fillStyle; ctx.beginPath(); ctx.lineWidth = opts.decorationWidth || 2; ctx.moveTo(left, yDecoration); ctx.lineTo(right, yDecoration); ctx.stroke(); } } function drawBackdrop(ctx, opts) { const oldColor = ctx.fillStyle; ctx.fillStyle = opts.color; ctx.fillRect(opts.left, opts.top, opts.width, opts.height); ctx.fillStyle = oldColor; } function renderText(ctx, text, x, y, font, opts = {}) { const lines = isArray(text) ? text : [ text ]; const stroke = opts.strokeWidth > 0 && opts.strokeColor !== ""; let i, line; ctx.save(); ctx.font = font.string; setRenderOpts(ctx, opts); for (i = 0; i < lines.length; ++i) { line = lines[i]; if (opts.backdrop) { drawBackdrop(ctx, opts.backdrop); } if (stroke) { if (opts.strokeColor) { ctx.strokeStyle = opts.strokeColor; } if (!isNullOrUndef(opts.strokeWidth)) { ctx.lineWidth = opts.strokeWidth; } ctx.strokeText(line, x, y, opts.maxWidth); } ctx.fillText(line, x, y, opts.maxWidth); decorateText(ctx, x, y, line, opts); y += Number(font.lineHeight); } ctx.restore(); } function addRoundedRectPath(ctx, rect) { const { x, y, w, h: h4, radius } = rect; ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true); ctx.lineTo(x, y + h4 - radius.bottomLeft); ctx.arc(x + radius.bottomLeft, y + h4 - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true); ctx.lineTo(x + w - radius.bottomRight, y + h4); ctx.arc(x + w - radius.bottomRight, y + h4 - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true); ctx.lineTo(x + w, y + radius.topRight); ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true); ctx.lineTo(x + radius.topLeft, y); } var LINE_HEIGHT = /^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/; var FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/; function toLineHeight(value, size) { const matches = ("" + value).match(LINE_HEIGHT); if (!matches || matches[1] === "normal") { return size * 1.2; } value = +matches[2]; switch (matches[3]) { case "px": return value; case "%": value /= 100; break; } return size * value; } var numberOrZero = (v) => +v || 0; function _readValueToProps(value, props) { const ret = {}; const objProps = isObject(props); const keys = objProps ? Object.keys(props) : props; const read = isObject(value) ? objProps ? (prop) => valueOrDefault(value[prop], value[props[prop]]) : (prop) => value[prop] : () => value; for (const prop of keys) { ret[prop] = numberOrZero(read(prop)); } return ret; } function toTRBL(value) { return _readValueToProps(value, { top: "y", right: "x", bottom: "y", left: "x" }); } function toTRBLCorners(value) { return _readValueToProps(value, [ "topLeft", "topRight", "bottomLeft", "bottomRight" ]); } function toPadding(value) { const obj = toTRBL(value); obj.width = obj.left + obj.right; obj.height = obj.top + obj.bottom; return obj; } function toFont(options, fallback) { options = options || {}; fallback = fallback || defaults.font; let size = valueOrDefault(options.size, fallback.size); if (typeof size === "string") { size = parseInt(size, 10); } let style = valueOrDefault(options.style, fallback.style); if (style && !("" + style).match(FONT_STYLE)) { console.warn('Invalid font style specified: "' + style + '"'); style = void 0; } const font = { family: valueOrDefault(options.family, fallback.family), lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size), size, style, weight: valueOrDefault(options.weight, fallback.weight), string: "" }; font.string = toFontString(font); return font; } function resolve(inputs, context, index, info) { let cacheable = true; let i, ilen, value; for (i = 0, ilen = inputs.length; i < ilen; ++i) { value = inputs[i]; if (value === void 0) { continue; } if (context !== void 0 && typeof value === "function") { value = value(context); cacheable = false; } if (index !== void 0 && isArray(value)) { value = value[index % value.length]; cacheable = false; } if (value !== void 0) { if (info && !cacheable) { info.cacheable = false; } return value; } } } function _addGrace(minmax, grace, beginAtZero) { const { min, max } = minmax; const change = toDimension(grace, (max - min) / 2); const keepZero = (value, add) => beginAtZero && value === 0 ? 0 : value + add; return { min: keepZero(min, -Math.abs(change)), max: keepZero(max, change) }; } function createContext(parentContext, context) { return Object.assign(Object.create(parentContext), context); } function _createResolver(scopes, prefixes = [ "" ], rootScopes, fallback, getTarget = () => scopes[0]) { const finalRootScopes = rootScopes || scopes; if (typeof fallback === "undefined") { fallback = _resolve("_fallback", scopes); } const cache = { [Symbol.toStringTag]: "Object", _cacheable: true, _scopes: scopes, _rootScopes: finalRootScopes, _fallback: fallback, _getTarget: getTarget, override: (scope) => _createResolver([ scope, ...scopes ], prefixes, finalRootScopes, fallback) }; return new Proxy(cache, { /** * A trap for the delete operator. */ deleteProperty(target, prop) { delete target[prop]; delete target._keys; delete scopes[0][prop]; return true; }, /** * A trap for getting property values. */ get(target, prop) { return _cached(target, prop, () => _resolveWithPrefixes(prop, prefixes, scopes, target)); }, /** * A trap for Object.getOwnPropertyDescriptor. * Also used by Object.hasOwnProperty. */ getOwnPropertyDescriptor(target, prop) { return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop); }, /** * A trap for Object.getPrototypeOf. */ getPrototypeOf() { return Reflect.getPrototypeOf(scopes[0]); }, /** * A trap for the in operator. */ has(target, prop) { return getKeysFromAllScopes(target).includes(prop); }, /** * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols. */ ownKeys(target) { return getKeysFromAllScopes(target); }, /** * A trap for setting property values. */ set(target, prop, value) { const storage = target._storage || (target._storage = getTarget()); target[prop] = storage[prop] = value; delete target._keys; return true; } }); } function _attachContext(proxy, context, subProxy, descriptorDefaults) { const cache = { _cacheable: false, _proxy: proxy, _context: context, _subProxy: subProxy, _stack: /* @__PURE__ */ new Set(), _descriptors: _descriptors(proxy, descriptorDefaults), setContext: (ctx) => _attachContext(proxy, ctx, subProxy, descriptorDefaults), override: (scope) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults) }; return new Proxy(cache, { /** * A trap for the delete operator. */ deleteProperty(target, prop) { delete target[prop]; delete proxy[prop]; return true; }, /** * A trap for getting property values. */ get(target, prop, receiver) { return _cached(target, prop, () => _resolveWithContext(target, prop, receiver)); }, /** * A trap for Object.getOwnPropertyDescriptor. * Also used by Object.hasOwnProperty. */ getOwnPropertyDescriptor(target, prop) { return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? { enumerable: true, configurable: true } : void 0 : Reflect.getOwnPropertyDescriptor(proxy, prop); }, /** * A trap for Object.getPrototypeOf. */ getPrototypeOf() { return Reflect.getPrototypeOf(proxy); }, /** * A trap for the in operator. */ has(target, prop) { return Reflect.has(proxy, prop); }, /** * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols. */ ownKeys() { return Reflect.ownKeys(proxy); }, /** * A trap for setting property values. */ set(target, prop, value) { proxy[prop] = value; delete target[prop]; return true; } }); } function _descriptors(proxy, defaults2 = { scriptable: true, indexable: true }) { const { _scriptable = defaults2.scriptable, _indexable = defaults2.indexable, _allKeys = defaults2.allKeys } = proxy; return { allKeys: _allKeys, scriptable: _scriptable, indexable: _indexable, isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable, isIndexable: isFunction(_indexable) ? _indexable : () => _indexable }; } var readKey = (prefix, name) => prefix ? prefix + _capitalize(name) : name; var needsSubResolver = (prop, value) => isObject(value) && prop !== "adapters" && (Object.getPrototypeOf(value) === null || value.constructor === Object); function _cached(target, prop, resolve2) { if (Object.prototype.hasOwnProperty.call(target, prop)) { return target[prop]; } const value = resolve2(); target[prop] = value; return value; } function _resolveWithContext(target, prop, receiver) { const { _proxy, _context, _subProxy, _descriptors: descriptors2 } = target; let value = _proxy[prop]; if (isFunction(value) && descriptors2.isScriptable(prop)) { value = _resolveScriptable(prop, value, target, receiver); } if (isArray(value) && value.length) { value = _resolveArray(prop, value, target, descriptors2.isIndexable); } if (needsSubResolver(prop, value)) { value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors2); } return value; } function _resolveScriptable(prop, getValue, target, receiver) { const { _proxy, _context, _subProxy, _stack } = target; if (_stack.has(prop)) { throw new Error("Recursion detected: " + Array.from(_stack).join("->") + "->" + prop); } _stack.add(prop); let value = getValue(_context, _subProxy || receiver); _stack.delete(prop); if (needsSubResolver(prop, value)) { value = createSubResolver(_proxy._scopes, _proxy, prop, value); } return value; } function _resolveArray(prop, value, target, isIndexable) { const { _proxy, _context, _subProxy, _descriptors: descriptors2 } = target; if (typeof _context.index !== "undefined" && isIndexable(prop)) { return value[_context.index % value.length]; } else if (isObject(value[0])) { const arr = value; const scopes = _proxy._scopes.filter((s) => s !== arr); value = []; for (const item of arr) { const resolver = createSubResolver(scopes, _proxy, prop, item); value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors2)); } } return value; } function resolveFallback(fallback, prop, value) { return isFunction(fallback) ? fallback(prop, value) : fallback; } var getScope = (key, parent) => key === true ? parent : typeof key === "string" ? resolveObjectKey(parent, key) : void 0; function addScopes(set2, parentScopes, key, parentFallback, value) { for (const parent of parentScopes) { const scope = getScope(key, parent); if (scope) { set2.add(scope); const fallback = resolveFallback(scope._fallback, key, value); if (typeof fallback !== "undefined" && fallback !== key && fallback !== parentFallback) { return fallback; } } else if (scope === false && typeof parentFallback !== "undefined" && key !== parentFallback) { return null; } } return false; } function createSubResolver(parentScopes, resolver, prop, value) { const rootScopes = resolver._rootScopes; const fallback = resolveFallback(resolver._fallback, prop, value); const allScopes = [ ...parentScopes, ...rootScopes ]; const set2 = /* @__PURE__ */ new Set(); set2.add(value); let key = addScopesFromKey(set2, allScopes, prop, fallback || prop, value); if (key === null) { return false; } if (typeof fallback !== "undefined" && fallback !== prop) { key = addScopesFromKey(set2, allScopes, fallback, key, value); if (key === null) { return false; } } return _createResolver(Array.from(set2), [ "" ], rootScopes, fallback, () => subGetTarget(resolver, prop, value)); } function addScopesFromKey(set2, allScopes, key, fallback, item) { while (key) { key = addScopes(set2, allScopes, key, fallback, item); } return key; } function subGetTarget(resolver, prop, value) { const parent = resolver._getTarget(); if (!(prop in parent)) { parent[prop] = {}; } const target = parent[prop]; if (isArray(target) && isObject(value)) { return value; } return target || {}; } function _resolveWithPrefixes(prop, prefixes, scopes, proxy) { let value; for (const prefix of prefixes) { value = _resolve(readKey(prefix, prop), scopes); if (typeof value !== "undefined") { return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value; } } } function _resolve(key, scopes) { for (const scope of scopes) { if (!scope) { continue; } const value = scope[key]; if (typeof value !== "undefined") { return value; } } } function getKeysFromAllScopes(target) { let keys = target._keys; if (!keys) { keys = target._keys = resolveKeysFromAllScopes(target._scopes); } return keys; } function resolveKeysFromAllScopes(scopes) { const set2 = /* @__PURE__ */ new Set(); for (const scope of scopes) { for (const key of Object.keys(scope).filter((k) => !k.startsWith("_"))) { set2.add(key); } } return Array.from(set2); } var EPSILON = Number.EPSILON || 1e-14; function _isDomSupported() { return typeof window !== "undefined" && typeof document !== "undefined"; } function _getParentNode(domNode) { let parent = domNode.parentNode; if (parent && parent.toString() === "[object ShadowRoot]") { parent = parent.host; } return parent; } function parseMaxStyle(styleValue, node, parentProperty) { let valueInPixels; if (typeof styleValue === "string") { valueInPixels = parseInt(styleValue, 10); if (styleValue.indexOf("%") !== -1) { valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty]; } } else { valueInPixels = styleValue; } return valueInPixels; } var getComputedStyle2 = (element) => element.ownerDocument.defaultView.getComputedStyle(element, null); function getStyle(el, property) { return getComputedStyle2(el).getPropertyValue(property); } var positions = [ "top", "right", "bottom", "left" ]; function getPositionedStyle(styles, style, suffix) { const result = {}; suffix = suffix ? "-" + suffix : ""; for (let i = 0; i < 4; i++) { const pos = positions[i]; result[pos] = parseFloat(styles[style + "-" + pos + suffix]) || 0; } result.width = result.left + result.right; result.height = result.top + result.bottom; return result; } var useOffsetPos = (x, y, target) => (x > 0 || y > 0) && (!target || !target.shadowRoot); function getCanvasPosition(e, canvas) { const touches = e.touches; const source = touches && touches.length ? touches[0] : e; const { offsetX, offsetY } = source; let box = false; let x, y; if (useOffsetPos(offsetX, offsetY, e.target)) { x = offsetX; y = offsetY; } else { const rect = canvas.getBoundingClientRect(); x = source.clientX - rect.left; y = source.clientY - rect.top; box = true; } return { x, y, box }; } function getRelativePosition(event, chart) { if ("native" in event) { return event; } const { canvas, currentDevicePixelRatio } = chart; const style = getComputedStyle2(canvas); const borderBox = style.boxSizing === "border-box"; const paddings = getPositionedStyle(style, "padding"); const borders = getPositionedStyle(style, "border", "width"); const { x, y, box } = getCanvasPosition(event, canvas); const xOffset = paddings.left + (box && borders.left); const yOffset = paddings.top + (box && borders.top); let { width, height } = chart; if (borderBox) { width -= paddings.width + borders.width; height -= paddings.height + borders.height; } return { x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio), y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio) }; } function getContainerSize(canvas, width, height) { let maxWidth, maxHeight; if (width === void 0 || height === void 0) { const container = _getParentNode(canvas); if (!container) { width = canvas.clientWidth; height = canvas.clientHeight; } else { const rect = container.getBoundingClientRect(); const containerStyle = getComputedStyle2(container); const containerBorder = getPositionedStyle(containerStyle, "border", "width"); const containerPadding = getPositionedStyle(containerStyle, "padding"); width = rect.width - containerPadding.width - containerBorder.width; height = rect.height - containerPadding.height - containerBorder.height; maxWidth = parseMaxStyle(containerStyle.maxWidth, container, "clientWidth"); maxHeight = parseMaxStyle(containerStyle.maxHeight, container, "clientHeight"); } } return { width, height, maxWidth: maxWidth || INFINITY, maxHeight: maxHeight || INFINITY }; } var round1 = (v) => Math.round(v * 10) / 10; function getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) { const style = getComputedStyle2(canvas); const margins = getPositionedStyle(style, "margin"); const maxWidth = parseMaxStyle(style.maxWidth, canvas, "clientWidth") || INFINITY; const maxHeight = parseMaxStyle(style.maxHeight, canvas, "clientHeight") || INFINITY; const containerSize = getContainerSize(canvas, bbWidth, bbHeight); let { width, height } = containerSize; if (style.boxSizing === "content-box") { const borders = getPositionedStyle(style, "border", "width"); const paddings = getPositionedStyle(style, "padding"); width -= paddings.width + borders.width; height -= paddings.height + borders.height; } width = Math.max(0, width - margins.width); height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height); width = round1(Math.min(width, maxWidth, containerSize.maxWidth)); height = round1(Math.min(height, maxHeight, containerSize.maxHeight)); if (width && !height) { height = round1(width / 2); } const maintainHeight = bbWidth !== void 0 || bbHeight !== void 0; if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) { height = containerSize.height; width = round1(Math.floor(height * aspectRatio)); } return { width, height }; } function retinaScale(chart, forceRatio, forceStyle) { const pixelRatio = forceRatio || 1; const deviceHeight = Math.floor(chart.height * pixelRatio); const deviceWidth = Math.floor(chart.width * pixelRatio); chart.height = Math.floor(chart.height); chart.width = Math.floor(chart.width); const canvas = chart.canvas; if (canvas.style && (forceStyle || !canvas.style.height && !canvas.style.width)) { canvas.style.height = `${chart.height}px`; canvas.style.width = `${chart.width}px`; } if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || canvas.width !== deviceWidth) { chart.currentDevicePixelRatio = pixelRatio; canvas.height = deviceHeight; canvas.width = deviceWidth; chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0); return true; } return false; } var supportsEventListenerOptions = function() { let passiveSupported = false; try { const options = { get passive() { passiveSupported = true; return false; } }; window.addEventListener("test", null, options); window.removeEventListener("test", null, options); } catch (e) { } return passiveSupported; }(); function readUsedSize(element, property) { const value = getStyle(element, property); const matches = value && value.match(/^(\d+)(\.\d+)?px$/); return matches ? +matches[1] : void 0; } var getRightToLeftAdapter = function(rectX, width) { return { x(x) { return rectX + rectX + width - x; }, setWidth(w) { width = w; }, textAlign(align) { if (align === "center") { return align; } return align === "right" ? "left" : "right"; }, xPlus(x, value) { return x - value; }, leftForLtr(x, itemWidth) { return x - itemWidth; } }; }; var getLeftToRightAdapter = function() { return { x(x) { return x; }, setWidth(w) { }, textAlign(align) { return align; }, xPlus(x, value) { return x + value; }, leftForLtr(x, _itemWidth) { return x; } }; }; function getRtlAdapter(rtl, rectX, width) { return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter(); } function overrideTextDirection(ctx, direction) { let style, original; if (direction === "ltr" || direction === "rtl") { style = ctx.canvas.style; original = [ style.getPropertyValue("direction"), style.getPropertyPriority("direction") ]; style.setProperty("direction", direction, "important"); ctx.prevTextDirection = original; } } function restoreTextDirection(ctx, original) { if (original !== void 0) { delete ctx.prevTextDirection; ctx.canvas.style.setProperty("direction", original[0], original[1]); } } // node_modules/chart.js/dist/chart.js var Animator = class { constructor() { this._request = null; this._charts = /* @__PURE__ */ new Map(); this._running = false; this._lastDate = void 0; } _notify(chart, anims, date, type) { const callbacks = anims.listeners[type]; const numSteps = anims.duration; callbacks.forEach((fn) => fn({ chart, initial: anims.initial, numSteps, currentStep: Math.min(date - anims.start, numSteps) })); } _refresh() { if (this._request) { return; } this._running = true; this._request = requestAnimFrame.call(window, () => { this._update(); this._request = null; if (this._running) { this._refresh(); } }); } _update(date = Date.now()) { let remaining = 0; this._charts.forEach((anims, chart) => { if (!anims.running || !anims.items.length) { return; } const items = anims.items; let i = items.length - 1; let draw = false; let item; for (; i >= 0; --i) { item = items[i]; if (item._active) { if (item._total > anims.duration) { anims.duration = item._total; } item.tick(date); draw = true; } else { items[i] = items[items.length - 1]; items.pop(); } } if (draw) { chart.draw(); this._notify(chart, anims, date, "progress"); } if (!items.length) { anims.running = false; this._notify(chart, anims, date, "complete"); anims.initial = false; } remaining += items.length; }); this._lastDate = date; if (remaining === 0) { this._running = false; } } _getAnims(chart) { const charts = this._charts; let anims = charts.get(chart); if (!anims) { anims = { running: false, initial: true, items: [], listeners: { complete: [], progress: [] } }; charts.set(chart, anims); } return anims; } listen(chart, event, cb) { this._getAnims(chart).listeners[event].push(cb); } add(chart, items) { if (!items || !items.length) { return; } this._getAnims(chart).items.push(...items); } has(chart) { return this._getAnims(chart).items.length > 0; } start(chart) { const anims = this._charts.get(chart); if (!anims) { return; } anims.running = true; anims.start = Date.now(); anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0); this._refresh(); } running(chart) { if (!this._running) { return false; } const anims = this._charts.get(chart); if (!anims || !anims.running || !anims.items.length) { return false; } return true; } stop(chart) { const anims = this._charts.get(chart); if (!anims || !anims.items.length) { return; } const items = anims.items; let i = items.length - 1; for (; i >= 0; --i) { items[i].cancel(); } anims.items = []; this._notify(chart, anims, Date.now(), "complete"); } remove(chart) { return this._charts.delete(chart); } }; var animator = /* @__PURE__ */ new Animator(); var transparent = "transparent"; var interpolators = { boolean(from2, to2, factor) { return factor > 0.5 ? to2 : from2; }, color(from2, to2, factor) { const c0 = color(from2 || transparent); const c1 = c0.valid && color(to2 || transparent); return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to2; }, number(from2, to2, factor) { return from2 + (to2 - from2) * factor; } }; var Animation = class { constructor(cfg, target, prop, to2) { const currentValue = target[prop]; to2 = resolve([ cfg.to, to2, currentValue, cfg.from ]); const from2 = resolve([ cfg.from, currentValue, to2 ]); this._active = true; this._fn = cfg.fn || interpolators[cfg.type || typeof from2]; this._easing = effects[cfg.easing] || effects.linear; this._start = Math.floor(Date.now() + (cfg.delay || 0)); this._duration = this._total = Math.floor(cfg.duration); this._loop = !!cfg.loop; this._target = target; this._prop = prop; this._from = from2; this._to = to2; this._promises = void 0; } active() { return this._active; } update(cfg, to2, date) { if (this._active) { this._notify(false); const currentValue = this._target[this._prop]; const elapsed = date - this._start; const remain = this._duration - elapsed; this._start = date; this._duration = Math.floor(Math.max(remain, cfg.duration)); this._total += elapsed; this._loop = !!cfg.loop; this._to = resolve([ cfg.to, to2, currentValue, cfg.from ]); this._from = resolve([ cfg.from, currentValue, to2 ]); } } cancel() { if (this._active) { this.tick(Date.now()); this._active = false; this._notify(false); } } tick(date) { const elapsed = date - this._start; const duration = this._duration; const prop = this._prop; const from2 = this._from; const loop = this._loop; const to2 = this._to; let factor; this._active = from2 !== to2 && (loop || elapsed < duration); if (!this._active) { this._target[prop] = to2; this._notify(true); return; } if (elapsed < 0) { this._target[prop] = from2; return; } factor = elapsed / duration % 2; factor = loop && factor > 1 ? 2 - factor : factor; factor = this._easing(Math.min(1, Math.max(0, factor))); this._target[prop] = this._fn(from2, to2, factor); } wait() { const promises = this._promises || (this._promises = []); return new Promise((res, rej) => { promises.push({ res, rej }); }); } _notify(resolved) { const method = resolved ? "res" : "rej"; const promises = this._promises || []; for (let i = 0; i < promises.length; i++) { promises[i][method](); } } }; var Animations = class { constructor(chart, config) { this._chart = chart; this._properties = /* @__PURE__ */ new Map(); this.configure(config); } configure(config) { if (!isObject(config)) { return; } const animationOptions = Object.keys(defaults.animation); const animatedProps = this._properties; Object.getOwnPropertyNames(config).forEach((key) => { const cfg = config[key]; if (!isObject(cfg)) { return; } const resolved = {}; for (const option of animationOptions) { resolved[option] = cfg[option]; } (isArray(cfg.properties) && cfg.properties || [ key ]).forEach((prop) => { if (prop === key || !animatedProps.has(prop)) { animatedProps.set(prop, resolved); } }); }); } _animateOptions(target, values) { const newOptions = values.options; const options = resolveTargetOptions(target, newOptions); if (!options) { return []; } const animations = this._createAnimations(options, newOptions); if (newOptions.$shared) { awaitAll(target.options.$animations, newOptions).then(() => { target.options = newOptions; }, () => { }); } return animations; } _createAnimations(target, values) { const animatedProps = this._properties; const animations = []; const running = target.$animations || (target.$animations = {}); const props = Object.keys(values); const date = Date.now(); let i; for (i = props.length - 1; i >= 0; --i) { const prop = props[i]; if (prop.charAt(0) === "$") { continue; } if (prop === "options") { animations.push(...this._animateOptions(target, values)); continue; } const value = values[prop]; let animation = running[prop]; const cfg = animatedProps.get(prop); if (animation) { if (cfg && animation.active()) { animation.update(cfg, value, date); continue; } else { animation.cancel(); } } if (!cfg || !cfg.duration) { target[prop] = value; continue; } running[prop] = animation = new Animation(cfg, target, prop, value); animations.push(animation); } return animations; } update(target, values) { if (this._properties.size === 0) { Object.assign(target, values); return; } const animations = this._createAnimations(target, values); if (animations.length) { animator.add(this._chart, animations); return true; } } }; function awaitAll(animations, properties) { const running = []; const keys = Object.keys(properties); for (let i = 0; i < keys.length; i++) { const anim = animations[keys[i]]; if (anim && anim.active()) { running.push(anim.wait()); } } return Promise.all(running); } function resolveTargetOptions(target, newOptions) { if (!newOptions) { return; } let options = target.options; if (!options) { target.options = newOptions; return; } if (options.$shared) { target.options = options = Object.assign({}, options, { $shared: false, $animations: {} }); } return options; } function scaleClip(scale, allowedOverflow) { const opts = scale && scale.options || {}; const reverse = opts.reverse; const min = opts.min === void 0 ? allowedOverflow : 0; const max = opts.max === void 0 ? allowedOverflow : 0; return { start: reverse ? max : min, end: reverse ? min : max }; } function defaultClip(xScale, yScale, allowedOverflow) { if (allowedOverflow === false) { return false; } const x = scaleClip(xScale, allowedOverflow); const y = scaleClip(yScale, allowedOverflow); return { top: y.end, right: x.end, bottom: y.start, left: x.start }; } function toClip(value) { let t2, r, b, l; if (isObject(value)) { t2 = value.top; r = value.right; b = value.bottom; l = value.left; } else { t2 = r = b = l = value; } return { top: t2, right: r, bottom: b, left: l, disabled: value === false }; } function getSortedDatasetIndices(chart, filterVisible) { const keys = []; const metasets = chart._getSortedDatasetMetas(filterVisible); let i, ilen; for (i = 0, ilen = metasets.length; i < ilen; ++i) { keys.push(metasets[i].index); } return keys; } function applyStack(stack, value, dsIndex, options = {}) { const keys = stack.keys; const singleMode = options.mode === "single"; let i, ilen, datasetIndex, otherValue; if (value === null) { return; } for (i = 0, ilen = keys.length; i < ilen; ++i) { datasetIndex = +keys[i]; if (datasetIndex === dsIndex) { if (options.all) { continue; } break; } otherValue = stack.values[datasetIndex]; if (isNumberFinite(otherValue) && (singleMode || value === 0 || sign(value) === sign(otherValue))) { value += otherValue; } } return value; } function convertObjectDataToArray(data) { const keys = Object.keys(data); const adata = new Array(keys.length); let i, ilen, key; for (i = 0, ilen = keys.length; i < ilen; ++i) { key = keys[i]; adata[i] = { x: key, y: data[key] }; } return adata; } function isStacked(scale, meta) { const stacked = scale && scale.options.stacked; return stacked || stacked === void 0 && meta.stack !== void 0; } function getStackKey(indexScale, valueScale, meta) { return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`; } function getUserBounds(scale) { const { min, max, minDefined, maxDefined } = scale.getUserBounds(); return { min: minDefined ? min : Number.NEGATIVE_INFINITY, max: maxDefined ? max : Number.POSITIVE_INFINITY }; } function getOrCreateStack(stacks, stackKey, indexValue) { const subStack = stacks[stackKey] || (stacks[stackKey] = {}); return subStack[indexValue] || (subStack[indexValue] = {}); } function getLastIndexInStack(stack, vScale, positive, type) { for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) { const value = stack[meta.index]; if (positive && value > 0 || !positive && value < 0) { return meta.index; } } return null; } function updateStacks(controller, parsed) { const { chart, _cachedMeta: meta } = controller; const stacks = chart._stacks || (chart._stacks = {}); const { iScale, vScale, index: datasetIndex } = meta; const iAxis = iScale.axis; const vAxis = vScale.axis; const key = getStackKey(iScale, vScale, meta); const ilen = parsed.length; let stack; for (let i = 0; i < ilen; ++i) { const item = parsed[i]; const { [iAxis]: index, [vAxis]: value } = item; const itemStacks = item._stacks || (item._stacks = {}); stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index); stack[datasetIndex] = value; stack._top = getLastIndexInStack(stack, vScale, true, meta.type); stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type); const visualValues = stack._visualValues || (stack._visualValues = {}); visualValues[datasetIndex] = value; } } function getFirstScaleId(chart, axis) { const scales = chart.scales; return Object.keys(scales).filter((key) => scales[key].axis === axis).shift(); } function createDatasetContext(parent, index) { return createContext(parent, { active: false, dataset: void 0, datasetIndex: index, index, mode: "default", type: "dataset" }); } function createDataContext(parent, index, element) { return createContext(parent, { active: false, dataIndex: index, parsed: void 0, raw: void 0, element, index, mode: "default", type: "data" }); } function clearStacks(meta, items) { const datasetIndex = meta.controller.index; const axis = meta.vScale && meta.vScale.axis; if (!axis) { return; } items = items || meta._parsed; for (const parsed of items) { const stacks = parsed._stacks; if (!stacks || stacks[axis] === void 0 || stacks[axis][datasetIndex] === void 0) { return; } delete stacks[axis][datasetIndex]; if (stacks[axis]._visualValues !== void 0 && stacks[axis]._visualValues[datasetIndex] !== void 0) { delete stacks[axis]._visualValues[datasetIndex]; } } } var isDirectUpdateMode = (mode) => mode === "reset" || mode === "none"; var cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached); var createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked && { keys: getSortedDatasetIndices(chart, true), values: null }; var DatasetController = class { constructor(chart, datasetIndex) { this.chart = chart; this._ctx = chart.ctx; this.index = datasetIndex; this._cachedDataOpts = {}; this._cachedMeta = this.getMeta(); this._type = this._cachedMeta.type; this.options = void 0; this._parsing = false; this._data = void 0; this._objectData = void 0; this._sharedOptions = void 0; this._drawStart = void 0; this._drawCount = void 0; this.enableOptionSharing = false; this.supportsDecimation = false; this.$context = void 0; this._syncList = []; this.datasetElementType = new.target.datasetElementType; this.dataElementType = new.target.dataElementType; this.initialize(); } initialize() { const meta = this._cachedMeta; this.configure(); this.linkScales(); meta._stacked = isStacked(meta.vScale, meta); this.addElements(); if (this.options.fill && !this.chart.isPluginEnabled("filler")) { console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options"); } } updateIndex(datasetIndex) { if (this.index !== datasetIndex) { clearStacks(this._cachedMeta); } this.index = datasetIndex; } linkScales() { const chart = this.chart; const meta = this._cachedMeta; const dataset = this.getDataset(); const chooseId = (axis, x, y, r) => axis === "x" ? x : axis === "r" ? r : y; const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, "x")); const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, "y")); const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, "r")); const indexAxis = meta.indexAxis; const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid); const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid); meta.xScale = this.getScaleForId(xid); meta.yScale = this.getScaleForId(yid); meta.rScale = this.getScaleForId(rid); meta.iScale = this.getScaleForId(iid); meta.vScale = this.getScaleForId(vid); } getDataset() { return this.chart.data.datasets[this.index]; } getMeta() { return this.chart.getDatasetMeta(this.index); } getScaleForId(scaleID) { return this.chart.scales[scaleID]; } _getOtherScale(scale) { const meta = this._cachedMeta; return scale === meta.iScale ? meta.vScale : meta.iScale; } reset() { this._update("reset"); } _destroy() { const meta = this._cachedMeta; if (this._data) { unlistenArrayEvents(this._data, this); } if (meta._stacked) { clearStacks(meta); } } _dataCheck() { const dataset = this.getDataset(); const data = dataset.data || (dataset.data = []); const _data = this._data; if (isObject(data)) { this._data = convertObjectDataToArray(data); } else if (_data !== data) { if (_data) { unlistenArrayEvents(_data, this); const meta = this._cachedMeta; clearStacks(meta); meta._parsed = []; } if (data && Object.isExtensible(data)) { listenArrayEvents(data, this); } this._syncList = []; this._data = data; } } addElements() { const meta = this._cachedMeta; this._dataCheck(); if (this.datasetElementType) { meta.dataset = new this.datasetElementType(); } } buildOrUpdateElements(resetNewElements) { const meta = this._cachedMeta; const dataset = this.getDataset(); let stackChanged = false; this._dataCheck(); const oldStacked = meta._stacked; meta._stacked = isStacked(meta.vScale, meta); if (meta.stack !== dataset.stack) { stackChanged = true; clearStacks(meta); meta.stack = dataset.stack; } this._resyncElements(resetNewElements); if (stackChanged || oldStacked !== meta._stacked) { updateStacks(this, meta._parsed); } } configure() { const config = this.chart.config; const scopeKeys = config.datasetScopeKeys(this._type); const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true); this.options = config.createResolver(scopes, this.getContext()); this._parsing = this.options.parsing; this._cachedDataOpts = {}; } parse(start, count) { const { _cachedMeta: meta, _data: data } = this; const { iScale, _stacked } = meta; const iAxis = iScale.axis; let sorted = start === 0 && count === data.length ? true : meta._sorted; let prev = start > 0 && meta._parsed[start - 1]; let i, cur, parsed; if (this._parsing === false) { meta._parsed = data; meta._sorted = true; parsed = data; } else { if (isArray(data[start])) { parsed = this.parseArrayData(meta, data, start, count); } else if (isObject(data[start])) { parsed = this.parseObjectData(meta, data, start, count); } else { parsed = this.parsePrimitiveData(meta, data, start, count); } const isNotInOrderComparedToPrev = () => cur[iAxis] === null || prev && cur[iAxis] < prev[iAxis]; for (i = 0; i < count; ++i) { meta._parsed[i + start] = cur = parsed[i]; if (sorted) { if (isNotInOrderComparedToPrev()) { sorted = false; } prev = cur; } } meta._sorted = sorted; } if (_stacked) { updateStacks(this, parsed); } } parsePrimitiveData(meta, data, start, count) { const { iScale, vScale } = meta; const iAxis = iScale.axis; const vAxis = vScale.axis; const labels = iScale.getLabels(); const singleScale = iScale === vScale; const parsed = new Array(count); let i, ilen, index; for (i = 0, ilen = count; i < ilen; ++i) { index = i + start; parsed[i] = { [iAxis]: singleScale || iScale.parse(labels[index], index), [vAxis]: vScale.parse(data[index], index) }; } return parsed; } parseArrayData(meta, data, start, count) { const { xScale, yScale } = meta; const parsed = new Array(count); let i, ilen, index, item; for (i = 0, ilen = count; i < ilen; ++i) { index = i + start; item = data[index]; parsed[i] = { x: xScale.parse(item[0], index), y: yScale.parse(item[1], index) }; } return parsed; } parseObjectData(meta, data, start, count) { const { xScale, yScale } = meta; const { xAxisKey = "x", yAxisKey = "y" } = this._parsing; const parsed = new Array(count); let i, ilen, index, item; for (i = 0, ilen = count; i < ilen; ++i) { index = i + start; item = data[index]; parsed[i] = { x: xScale.parse(resolveObjectKey(item, xAxisKey), index), y: yScale.parse(resolveObjectKey(item, yAxisKey), index) }; } return parsed; } getParsed(index) { return this._cachedMeta._parsed[index]; } getDataElement(index) { return this._cachedMeta.data[index]; } applyStack(scale, parsed, mode) { const chart = this.chart; const meta = this._cachedMeta; const value = parsed[scale.axis]; const stack = { keys: getSortedDatasetIndices(chart, true), values: parsed._stacks[scale.axis]._visualValues }; return applyStack(stack, value, meta.index, { mode }); } updateRangeFromParsed(range, scale, parsed, stack) { const parsedValue = parsed[scale.axis]; let value = parsedValue === null ? NaN : parsedValue; const values = stack && parsed._stacks[scale.axis]; if (stack && values) { stack.values = values; value = applyStack(stack, parsedValue, this._cachedMeta.index); } range.min = Math.min(range.min, value); range.max = Math.max(range.max, value); } getMinMax(scale, canStack) { const meta = this._cachedMeta; const _parsed = meta._parsed; const sorted = meta._sorted && scale === meta.iScale; const ilen = _parsed.length; const otherScale = this._getOtherScale(scale); const stack = createStack(canStack, meta, this.chart); const range = { min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY }; const { min: otherMin, max: otherMax } = getUserBounds(otherScale); let i, parsed; function _skip() { parsed = _parsed[i]; const otherValue = parsed[otherScale.axis]; return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue; } for (i = 0; i < ilen; ++i) { if (_skip()) { continue; } this.updateRangeFromParsed(range, scale, parsed, stack); if (sorted) { break; } } if (sorted) { for (i = ilen - 1; i >= 0; --i) { if (_skip()) { continue; } this.updateRangeFromParsed(range, scale, parsed, stack); break; } } return range; } getAllParsedValues(scale) { const parsed = this._cachedMeta._parsed; const values = []; let i, ilen, value; for (i = 0, ilen = parsed.length; i < ilen; ++i) { value = parsed[i][scale.axis]; if (isNumberFinite(value)) { values.push(value); } } return values; } getMaxOverflow() { return false; } getLabelAndValue(index) { const meta = this._cachedMeta; const iScale = meta.iScale; const vScale = meta.vScale; const parsed = this.getParsed(index); return { label: iScale ? "" + iScale.getLabelForValue(parsed[iScale.axis]) : "", value: vScale ? "" + vScale.getLabelForValue(parsed[vScale.axis]) : "" }; } _update(mode) { const meta = this._cachedMeta; this.update(mode || "default"); meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow()))); } update(mode) { } draw() { const ctx = this._ctx; const chart = this.chart; const meta = this._cachedMeta; const elements = meta.data || []; const area = chart.chartArea; const active = []; const start = this._drawStart || 0; const count = this._drawCount || elements.length - start; const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop; let i; if (meta.dataset) { meta.dataset.draw(ctx, area, start, count); } for (i = start; i < start + count; ++i) { const element = elements[i]; if (element.hidden) { continue; } if (element.active && drawActiveElementsOnTop) { active.push(element); } else { element.draw(ctx, area); } } for (i = 0; i < active.length; ++i) { active[i].draw(ctx, area); } } getStyle(index, active) { const mode = active ? "active" : "default"; return index === void 0 && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index || 0, mode); } getContext(index, active, mode) { const dataset = this.getDataset(); let context; if (index >= 0 && index < this._cachedMeta.data.length) { const element = this._cachedMeta.data[index]; context = element.$context || (element.$context = createDataContext(this.getContext(), index, element)); context.parsed = this.getParsed(index); context.raw = dataset.data[index]; context.index = context.dataIndex = index; } else { context = this.$context || (this.$context = createDatasetContext(this.chart.getContext(), this.index)); context.dataset = dataset; context.index = context.datasetIndex = this.index; } context.active = !!active; context.mode = mode; return context; } resolveDatasetElementOptions(mode) { return this._resolveElementOptions(this.datasetElementType.id, mode); } resolveDataElementOptions(index, mode) { return this._resolveElementOptions(this.dataElementType.id, mode, index); } _resolveElementOptions(elementType, mode = "default", index) { const active = mode === "active"; const cache = this._cachedDataOpts; const cacheKey = elementType + "-" + mode; const cached = cache[cacheKey]; const sharing = this.enableOptionSharing && defined(index); if (cached) { return cloneIfNotShared(cached, sharing); } const config = this.chart.config; const scopeKeys = config.datasetElementScopeKeys(this._type, elementType); const prefixes = active ? [ `${elementType}Hover`, "hover", elementType, "" ] : [ elementType, "" ]; const scopes = config.getOptionScopes(this.getDataset(), scopeKeys); const names2 = Object.keys(defaults.elements[elementType]); const context = () => this.getContext(index, active, mode); const values = config.resolveNamedOptions(scopes, names2, context, prefixes); if (values.$shared) { values.$shared = sharing; cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing)); } return values; } _resolveAnimations(index, transition, active) { const chart = this.chart; const cache = this._cachedDataOpts; const cacheKey = `animation-${transition}`; const cached = cache[cacheKey]; if (cached) { return cached; } let options; if (chart.options.animation !== false) { const config = this.chart.config; const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition); const scopes = config.getOptionScopes(this.getDataset(), scopeKeys); options = config.createResolver(scopes, this.getContext(index, active, transition)); } const animations = new Animations(chart, options && options.animations); if (options && options._cacheable) { cache[cacheKey] = Object.freeze(animations); } return animations; } getSharedOptions(options) { if (!options.$shared) { return; } return this._sharedOptions || (this._sharedOptions = Object.assign({}, options)); } includeOptions(mode, sharedOptions) { return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled; } _getSharedOptions(start, mode) { const firstOpts = this.resolveDataElementOptions(start, mode); const previouslySharedOptions = this._sharedOptions; const sharedOptions = this.getSharedOptions(firstOpts); const includeOptions = this.includeOptions(mode, sharedOptions) || sharedOptions !== previouslySharedOptions; this.updateSharedOptions(sharedOptions, mode, firstOpts); return { sharedOptions, includeOptions }; } updateElement(element, index, properties, mode) { if (isDirectUpdateMode(mode)) { Object.assign(element, properties); } else { this._resolveAnimations(index, mode).update(element, properties); } } updateSharedOptions(sharedOptions, mode, newOptions) { if (sharedOptions && !isDirectUpdateMode(mode)) { this._resolveAnimations(void 0, mode).update(sharedOptions, newOptions); } } _setStyle(element, index, mode, active) { element.active = active; const options = this.getStyle(index, active); this._resolveAnimations(index, mode, active).update(element, { options: !active && this.getSharedOptions(options) || options }); } removeHoverStyle(element, datasetIndex, index) { this._setStyle(element, index, "active", false); } setHoverStyle(element, datasetIndex, index) { this._setStyle(element, index, "active", true); } _removeDatasetHoverStyle() { const element = this._cachedMeta.dataset; if (element) { this._setStyle(element, void 0, "active", false); } } _setDatasetHoverStyle() { const element = this._cachedMeta.dataset; if (element) { this._setStyle(element, void 0, "active", true); } } _resyncElements(resetNewElements) { const data = this._data; const elements = this._cachedMeta.data; for (const [method, arg1, arg2] of this._syncList) { this[method](arg1, arg2); } this._syncList = []; const numMeta = elements.length; const numData = data.length; const count = Math.min(numData, numMeta); if (count) { this.parse(0, count); } if (numData > numMeta) { this._insertElements(numMeta, numData - numMeta, resetNewElements); } else if (numData < numMeta) { this._removeElements(numData, numMeta - numData); } } _insertElements(start, count, resetNewElements = true) { const meta = this._cachedMeta; const data = meta.data; const end = start + count; let i; const move = (arr) => { arr.length += count; for (i = arr.length - 1; i >= end; i--) { arr[i] = arr[i - count]; } }; move(data); for (i = start; i < end; ++i) { data[i] = new this.dataElementType(); } if (this._parsing) { move(meta._parsed); } this.parse(start, count); if (resetNewElements) { this.updateElements(data, start, count, "reset"); } } updateElements(element, start, count, mode) { } _removeElements(start, count) { const meta = this._cachedMeta; if (this._parsing) { const removed = meta._parsed.splice(start, count); if (meta._stacked) { clearStacks(meta, removed); } } meta.data.splice(start, count); } _sync(args) { if (this._parsing) { this._syncList.push(args); } else { const [method, arg1, arg2] = args; this[method](arg1, arg2); } this.chart._dataChanges.push([ this.index, ...args ]); } _onDataPush() { const count = arguments.length; this._sync([ "_insertElements", this.getDataset().data.length - count, count ]); } _onDataPop() { this._sync([ "_removeElements", this._cachedMeta.data.length - 1, 1 ]); } _onDataShift() { this._sync([ "_removeElements", 0, 1 ]); } _onDataSplice(start, count) { if (count) { this._sync([ "_removeElements", start, count ]); } const newCount = arguments.length - 2; if (newCount) { this._sync([ "_insertElements", start, newCount ]); } } _onDataUnshift() { this._sync([ "_insertElements", 0, arguments.length ]); } }; __publicField(DatasetController, "defaults", {}); __publicField(DatasetController, "datasetElementType", null); __publicField(DatasetController, "dataElementType", null); function getAllScaleValues(scale, type) { if (!scale._cache.$bar) { const visibleMetas = scale.getMatchingVisibleMetas(type); let values = []; for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) { values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale)); } scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b)); } return scale._cache.$bar; } function computeMinSampleSize(meta) { const scale = meta.iScale; const values = getAllScaleValues(scale, meta.type); let min = scale._length; let i, ilen, curr, prev; const updateMinAndPrev = () => { if (curr === 32767 || curr === -32768) { return; } if (defined(prev)) { min = Math.min(min, Math.abs(curr - prev) || min); } prev = curr; }; for (i = 0, ilen = values.length; i < ilen; ++i) { curr = scale.getPixelForValue(values[i]); updateMinAndPrev(); } prev = void 0; for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) { curr = scale.getPixelForTick(i); updateMinAndPrev(); } return min; } function computeFitCategoryTraits(index, ruler, options, stackCount) { const thickness = options.barThickness; let size, ratio; if (isNullOrUndef(thickness)) { size = ruler.min * options.categoryPercentage; ratio = options.barPercentage; } else { size = thickness * stackCount; ratio = 1; } return { chunk: size / stackCount, ratio, start: ruler.pixels[index] - size / 2 }; } function computeFlexCategoryTraits(index, ruler, options, stackCount) { const pixels = ruler.pixels; const curr = pixels[index]; let prev = index > 0 ? pixels[index - 1] : null; let next = index < pixels.length - 1 ? pixels[index + 1] : null; const percent = options.categoryPercentage; if (prev === null) { prev = curr - (next === null ? ruler.end - ruler.start : next - curr); } if (next === null) { next = curr + curr - prev; } const start = curr - (curr - Math.min(prev, next)) / 2 * percent; const size = Math.abs(next - prev) / 2 * percent; return { chunk: size / stackCount, ratio: options.barPercentage, start }; } function parseFloatBar(entry, item, vScale, i) { const startValue = vScale.parse(entry[0], i); const endValue = vScale.parse(entry[1], i); const min = Math.min(startValue, endValue); const max = Math.max(startValue, endValue); let barStart = min; let barEnd = max; if (Math.abs(min) > Math.abs(max)) { barStart = max; barEnd = min; } item[vScale.axis] = barEnd; item._custom = { barStart, barEnd, start: startValue, end: endValue, min, max }; } function parseValue(entry, item, vScale, i) { if (isArray(entry)) { parseFloatBar(entry, item, vScale, i); } else { item[vScale.axis] = vScale.parse(entry, i); } return item; } function parseArrayOrPrimitive(meta, data, start, count) { const iScale = meta.iScale; const vScale = meta.vScale; const labels = iScale.getLabels(); const singleScale = iScale === vScale; const parsed = []; let i, ilen, item, entry; for (i = start, ilen = start + count; i < ilen; ++i) { entry = data[i]; item = {}; item[iScale.axis] = singleScale || iScale.parse(labels[i], i); parsed.push(parseValue(entry, item, vScale, i)); } return parsed; } function isFloatBar(custom) { return custom && custom.barStart !== void 0 && custom.barEnd !== void 0; } function barSign(size, vScale, actualBase) { if (size !== 0) { return sign(size); } return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1); } function borderProps(properties) { let reverse, start, end, top, bottom; if (properties.horizontal) { reverse = properties.base > properties.x; start = "left"; end = "right"; } else { reverse = properties.base < properties.y; start = "bottom"; end = "top"; } if (reverse) { top = "end"; bottom = "start"; } else { top = "start"; bottom = "end"; } return { start, end, reverse, top, bottom }; } function setBorderSkipped(properties, options, stack, index) { let edge = options.borderSkipped; const res = {}; if (!edge) { properties.borderSkipped = res; return; } if (edge === true) { properties.borderSkipped = { top: true, right: true, bottom: true, left: true }; return; } const { start, end, reverse, top, bottom } = borderProps(properties); if (edge === "middle" && stack) { properties.enableBorderRadius = true; if ((stack._top || 0) === index) { edge = top; } else if ((stack._bottom || 0) === index) { edge = bottom; } else { res[parseEdge(bottom, start, end, reverse)] = true; edge = top; } } res[parseEdge(edge, start, end, reverse)] = true; properties.borderSkipped = res; } function parseEdge(edge, a, b, reverse) { if (reverse) { edge = swap(edge, a, b); edge = startEnd(edge, b, a); } else { edge = startEnd(edge, a, b); } return edge; } function swap(orig, v1, v2) { return orig === v1 ? v2 : orig === v2 ? v1 : orig; } function startEnd(v, start, end) { return v === "start" ? start : v === "end" ? end : v; } function setInflateAmount(properties, { inflateAmount }, ratio) { properties.inflateAmount = inflateAmount === "auto" ? ratio === 1 ? 0.33 : 0 : inflateAmount; } var BarController = class extends DatasetController { parsePrimitiveData(meta, data, start, count) { return parseArrayOrPrimitive(meta, data, start, count); } parseArrayData(meta, data, start, count) { return parseArrayOrPrimitive(meta, data, start, count); } parseObjectData(meta, data, start, count) { const { iScale, vScale } = meta; const { xAxisKey = "x", yAxisKey = "y" } = this._parsing; const iAxisKey = iScale.axis === "x" ? xAxisKey : yAxisKey; const vAxisKey = vScale.axis === "x" ? xAxisKey : yAxisKey; const parsed = []; let i, ilen, item, obj; for (i = start, ilen = start + count; i < ilen; ++i) { obj = data[i]; item = {}; item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i); parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i)); } return parsed; } updateRangeFromParsed(range, scale, parsed, stack) { super.updateRangeFromParsed(range, scale, parsed, stack); const custom = parsed._custom; if (custom && scale === this._cachedMeta.vScale) { range.min = Math.min(range.min, custom.min); range.max = Math.max(range.max, custom.max); } } getMaxOverflow() { return 0; } getLabelAndValue(index) { const meta = this._cachedMeta; const { iScale, vScale } = meta; const parsed = this.getParsed(index); const custom = parsed._custom; const value = isFloatBar(custom) ? "[" + custom.start + ", " + custom.end + "]" : "" + vScale.getLabelForValue(parsed[vScale.axis]); return { label: "" + iScale.getLabelForValue(parsed[iScale.axis]), value }; } initialize() { this.enableOptionSharing = true; super.initialize(); const meta = this._cachedMeta; meta.stack = this.getDataset().stack; } update(mode) { const meta = this._cachedMeta; this.updateElements(meta.data, 0, meta.data.length, mode); } updateElements(bars, start, count, mode) { const reset2 = mode === "reset"; const { index, _cachedMeta: { vScale } } = this; const base = vScale.getBasePixel(); const horizontal = vScale.isHorizontal(); const ruler = this._getRuler(); const { sharedOptions, includeOptions } = this._getSharedOptions(start, mode); for (let i = start; i < start + count; i++) { const parsed = this.getParsed(i); const vpixels = reset2 || isNullOrUndef(parsed[vScale.axis]) ? { base, head: base } : this._calculateBarValuePixels(i); const ipixels = this._calculateBarIndexPixels(i, ruler); const stack = (parsed._stacks || {})[vScale.axis]; const properties = { horizontal, base: vpixels.base, enableBorderRadius: !stack || isFloatBar(parsed._custom) || index === stack._top || index === stack._bottom, x: horizontal ? vpixels.head : ipixels.center, y: horizontal ? ipixels.center : vpixels.head, height: horizontal ? ipixels.size : Math.abs(vpixels.size), width: horizontal ? Math.abs(vpixels.size) : ipixels.size }; if (includeOptions) { properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? "active" : mode); } const options = properties.options || bars[i].options; setBorderSkipped(properties, options, stack, index); setInflateAmount(properties, options, ruler.ratio); this.updateElement(bars[i], i, properties, mode); } } _getStacks(last, dataIndex) { const { iScale } = this._cachedMeta; const metasets = iScale.getMatchingVisibleMetas(this._type).filter((meta) => meta.controller.options.grouped); const stacked = iScale.options.stacked; const stacks = []; const skipNull = (meta) => { const parsed = meta.controller.getParsed(dataIndex); const val = parsed && parsed[meta.vScale.axis]; if (isNullOrUndef(val) || isNaN(val)) { return true; } }; for (const meta of metasets) { if (dataIndex !== void 0 && skipNull(meta)) { continue; } if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === void 0 && meta.stack === void 0) { stacks.push(meta.stack); } if (meta.index === last) { break; } } if (!stacks.length) { stacks.push(void 0); } return stacks; } _getStackCount(index) { return this._getStacks(void 0, index).length; } _getStackIndex(datasetIndex, name, dataIndex) { const stacks = this._getStacks(datasetIndex, dataIndex); const index = name !== void 0 ? stacks.indexOf(name) : -1; return index === -1 ? stacks.length - 1 : index; } _getRuler() { const opts = this.options; const meta = this._cachedMeta; const iScale = meta.iScale; const pixels = []; let i, ilen; for (i = 0, ilen = meta.data.length; i < ilen; ++i) { pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i)); } const barThickness = opts.barThickness; const min = barThickness || computeMinSampleSize(meta); return { min, pixels, start: iScale._startPixel, end: iScale._endPixel, stackCount: this._getStackCount(), scale: iScale, grouped: opts.grouped, ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage }; } _calculateBarValuePixels(index) { const { _cachedMeta: { vScale, _stacked, index: datasetIndex }, options: { base: baseValue, minBarLength } } = this; const actualBase = baseValue || 0; const parsed = this.getParsed(index); const custom = parsed._custom; const floating = isFloatBar(custom); let value = parsed[vScale.axis]; let start = 0; let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value; let head, size; if (length !== value) { start = length - value; length = value; } if (floating) { value = custom.barStart; length = custom.barEnd - custom.barStart; if (value !== 0 && sign(value) !== sign(custom.barEnd)) { start = 0; } start += value; } const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start; let base = vScale.getPixelForValue(startValue); if (this.chart.getDataVisibility(index)) { head = vScale.getPixelForValue(start + length); } else { head = base; } size = head - base; if (Math.abs(size) < minBarLength) { size = barSign(size, vScale, actualBase) * minBarLength; if (value === actualBase) { base -= size / 2; } const startPixel = vScale.getPixelForDecimal(0); const endPixel = vScale.getPixelForDecimal(1); const min = Math.min(startPixel, endPixel); const max = Math.max(startPixel, endPixel); base = Math.max(Math.min(base, max), min); head = base + size; if (_stacked && !floating) { parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base); } } if (base === vScale.getPixelForValue(actualBase)) { const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2; base += halfGrid; size -= halfGrid; } return { size, base, head, center: head + size / 2 }; } _calculateBarIndexPixels(index, ruler) { const scale = ruler.scale; const options = this.options; const skipNull = options.skipNull; const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity); let center, size; if (ruler.grouped) { const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount; const range = options.barThickness === "flex" ? computeFlexCategoryTraits(index, ruler, options, stackCount) : computeFitCategoryTraits(index, ruler, options, stackCount); const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : void 0); center = range.start + range.chunk * stackIndex + range.chunk / 2; size = Math.min(maxBarThickness, range.chunk * range.ratio); } else { center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index); size = Math.min(maxBarThickness, ruler.min * ruler.ratio); } return { base: center - size / 2, head: center + size / 2, center, size }; } draw() { const meta = this._cachedMeta; const vScale = meta.vScale; const rects = meta.data; const ilen = rects.length; let i = 0; for (; i < ilen; ++i) { if (this.getParsed(i)[vScale.axis] !== null) { rects[i].draw(this._ctx); } } } }; __publicField(BarController, "id", "bar"); __publicField(BarController, "defaults", { datasetElementType: false, dataElementType: "bar", categoryPercentage: 0.8, barPercentage: 0.9, grouped: true, animations: { numbers: { type: "number", properties: [ "x", "y", "base", "width", "height" ] } } }); __publicField(BarController, "overrides", { scales: { _index_: { type: "category", offset: true, grid: { offset: true } }, _value_: { type: "linear", beginAtZero: true } } }); function getRatioAndOffset(rotation, circumference, cutout) { let ratioX = 1; let ratioY = 1; let offsetX = 0; let offsetY = 0; if (circumference < TAU) { const startAngle = rotation; const endAngle = startAngle + circumference; const startX = Math.cos(startAngle); const startY = Math.sin(startAngle); const endX = Math.cos(endAngle); const endY = Math.sin(endAngle); const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout); const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout); const maxX = calcMax(0, startX, endX); const maxY = calcMax(HALF_PI, startY, endY); const minX = calcMin(PI, startX, endX); const minY = calcMin(PI + HALF_PI, startY, endY); ratioX = (maxX - minX) / 2; ratioY = (maxY - minY) / 2; offsetX = -(maxX + minX) / 2; offsetY = -(maxY + minY) / 2; } return { ratioX, ratioY, offsetX, offsetY }; } var DoughnutController = class extends DatasetController { constructor(chart, datasetIndex) { super(chart, datasetIndex); this.enableOptionSharing = true; this.innerRadius = void 0; this.outerRadius = void 0; this.offsetX = void 0; this.offsetY = void 0; } linkScales() { } parse(start, count) { const data = this.getDataset().data; const meta = this._cachedMeta; if (this._parsing === false) { meta._parsed = data; } else { let getter = (i2) => +data[i2]; if (isObject(data[start])) { const { key = "value" } = this._parsing; getter = (i2) => +resolveObjectKey(data[i2], key); } let i, ilen; for (i = start, ilen = start + count; i < ilen; ++i) { meta._parsed[i] = getter(i); } } } _getRotation() { return toRadians(this.options.rotation - 90); } _getCircumference() { return toRadians(this.options.circumference); } _getRotationExtents() { let min = TAU; let max = -TAU; for (let i = 0; i < this.chart.data.datasets.length; ++i) { if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) { const controller = this.chart.getDatasetMeta(i).controller; const rotation = controller._getRotation(); const circumference = controller._getCircumference(); min = Math.min(min, rotation); max = Math.max(max, rotation + circumference); } } return { rotation: min, circumference: max - min }; } update(mode) { const chart = this.chart; const { chartArea } = chart; const meta = this._cachedMeta; const arcs = meta.data; const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing; const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0); const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1); const chartWeight = this._getRingWeight(this.index); const { circumference, rotation } = this._getRotationExtents(); const { ratioX, ratioY, offsetX, offsetY } = getRatioAndOffset(rotation, circumference, cutout); const maxWidth = (chartArea.width - spacing) / ratioX; const maxHeight = (chartArea.height - spacing) / ratioY; const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0); const outerRadius = toDimension(this.options.radius, maxRadius); const innerRadius = Math.max(outerRadius * cutout, 0); const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal(); this.offsetX = offsetX * outerRadius; this.offsetY = offsetY * outerRadius; meta.total = this.calculateTotal(); this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index); this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0); this.updateElements(arcs, 0, arcs.length, mode); } _circumference(i, reset2) { const opts = this.options; const meta = this._cachedMeta; const circumference = this._getCircumference(); if (reset2 && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) { return 0; } return this.calculateCircumference(meta._parsed[i] * circumference / TAU); } updateElements(arcs, start, count, mode) { const reset2 = mode === "reset"; const chart = this.chart; const chartArea = chart.chartArea; const opts = chart.options; const animationOpts = opts.animation; const centerX = (chartArea.left + chartArea.right) / 2; const centerY = (chartArea.top + chartArea.bottom) / 2; const animateScale = reset2 && animationOpts.animateScale; const innerRadius = animateScale ? 0 : this.innerRadius; const outerRadius = animateScale ? 0 : this.outerRadius; const { sharedOptions, includeOptions } = this._getSharedOptions(start, mode); let startAngle = this._getRotation(); let i; for (i = 0; i < start; ++i) { startAngle += this._circumference(i, reset2); } for (i = start; i < start + count; ++i) { const circumference = this._circumference(i, reset2); const arc = arcs[i]; const properties = { x: centerX + this.offsetX, y: centerY + this.offsetY, startAngle, endAngle: startAngle + circumference, circumference, outerRadius, innerRadius }; if (includeOptions) { properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? "active" : mode); } startAngle += circumference; this.updateElement(arc, i, properties, mode); } } calculateTotal() { const meta = this._cachedMeta; const metaData = meta.data; let total = 0; let i; for (i = 0; i < metaData.length; i++) { const value = meta._parsed[i]; if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) { total += Math.abs(value); } } return total; } calculateCircumference(value) { const total = this._cachedMeta.total; if (total > 0 && !isNaN(value)) { return TAU * (Math.abs(value) / total); } return 0; } getLabelAndValue(index) { const meta = this._cachedMeta; const chart = this.chart; const labels = chart.data.labels || []; const value = formatNumber(meta._parsed[index], chart.options.locale); return { label: labels[index] || "", value }; } getMaxBorderWidth(arcs) { let max = 0; const chart = this.chart; let i, ilen, meta, controller, options; if (!arcs) { for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) { if (chart.isDatasetVisible(i)) { meta = chart.getDatasetMeta(i); arcs = meta.data; controller = meta.controller; break; } } } if (!arcs) { return 0; } for (i = 0, ilen = arcs.length; i < ilen; ++i) { options = controller.resolveDataElementOptions(i); if (options.borderAlign !== "inner") { max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0); } } return max; } getMaxOffset(arcs) { let max = 0; for (let i = 0, ilen = arcs.length; i < ilen; ++i) { const options = this.resolveDataElementOptions(i); max = Math.max(max, options.offset || 0, options.hoverOffset || 0); } return max; } _getRingWeightOffset(datasetIndex) { let ringWeightOffset = 0; for (let i = 0; i < datasetIndex; ++i) { if (this.chart.isDatasetVisible(i)) { ringWeightOffset += this._getRingWeight(i); } } return ringWeightOffset; } _getRingWeight(datasetIndex) { return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0); } _getVisibleDatasetWeightTotal() { return this._getRingWeightOffset(this.chart.data.datasets.length) || 1; } }; __publicField(DoughnutController, "id", "doughnut"); __publicField(DoughnutController, "defaults", { datasetElementType: false, dataElementType: "arc", animation: { animateRotate: true, animateScale: false }, animations: { numbers: { type: "number", properties: [ "circumference", "endAngle", "innerRadius", "outerRadius", "startAngle", "x", "y", "offset", "borderWidth", "spacing" ] } }, cutout: "50%", rotation: 0, circumference: 360, radius: "100%", spacing: 0, indexAxis: "r" }); __publicField(DoughnutController, "descriptors", { _scriptable: (name) => name !== "spacing", _indexable: (name) => name !== "spacing" && !name.startsWith("borderDash") && !name.startsWith("hoverBorderDash") }); __publicField(DoughnutController, "overrides", { aspectRatio: 1, plugins: { legend: { labels: { generateLabels(chart) { const data = chart.data; if (data.labels.length && data.datasets.length) { const { labels: { pointStyle, color: color2 } } = chart.legend.options; return data.labels.map((label, i) => { const meta = chart.getDatasetMeta(0); const style = meta.controller.getStyle(i); return { text: label, fillStyle: style.backgroundColor, strokeStyle: style.borderColor, fontColor: color2, lineWidth: style.borderWidth, pointStyle, hidden: !chart.getDataVisibility(i), index: i }; }); } return []; } }, onClick(e, legendItem, legend) { legend.chart.toggleDataVisibility(legendItem.index); legend.chart.update(); } } } }); var PieController = class extends DoughnutController { }; __publicField(PieController, "id", "pie"); __publicField(PieController, "defaults", { cutout: 0, rotation: 0, circumference: 360, radius: "100%" }); function abstract() { throw new Error("This method is not implemented: Check that a complete date adapter is provided."); } var DateAdapterBase = class { constructor(options) { __publicField(this, "options"); this.options = options || {}; } /** * Override default date adapter methods. * Accepts type parameter to define options type. * @example * Chart._adapters._date.override<{myAdapterOption: string}>({ * init() { * console.log(this.options.myAdapterOption); * } * }) */ static override(members) { Object.assign(DateAdapterBase.prototype, members); } // eslint-disable-next-line @typescript-eslint/no-empty-function init() { } formats() { return abstract(); } parse() { return abstract(); } format() { return abstract(); } add() { return abstract(); } diff() { return abstract(); } startOf() { return abstract(); } endOf() { return abstract(); } }; var adapters = { _date: DateAdapterBase }; function binarySearch(metaset, axis, value, intersect) { const { controller, data, _sorted } = metaset; const iScale = controller._cachedMeta.iScale; if (iScale && axis === iScale.axis && axis !== "r" && _sorted && data.length) { const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey; if (!intersect) { return lookupMethod(data, axis, value); } else if (controller._sharedOptions) { const el = data[0]; const range = typeof el.getRange === "function" && el.getRange(axis); if (range) { const start = lookupMethod(data, axis, value - range); const end = lookupMethod(data, axis, value + range); return { lo: start.lo, hi: end.hi }; } } } return { lo: 0, hi: data.length - 1 }; } function evaluateInteractionItems(chart, axis, position, handler, intersect) { const metasets = chart.getSortedVisibleDatasetMetas(); const value = position[axis]; for (let i = 0, ilen = metasets.length; i < ilen; ++i) { const { index, data } = metasets[i]; const { lo, hi } = binarySearch(metasets[i], axis, value, intersect); for (let j = lo; j <= hi; ++j) { const element = data[j]; if (!element.skip) { handler(element, index, j); } } } } function getDistanceMetricForAxis(axis) { const useX = axis.indexOf("x") !== -1; const useY = axis.indexOf("y") !== -1; return function(pt1, pt2) { const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0; const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0; return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2)); }; } function getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) { const items = []; if (!includeInvisible && !chart.isPointInArea(position)) { return items; } const evaluationFunc = function(element, datasetIndex, index) { if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) { return; } if (element.inRange(position.x, position.y, useFinalPosition)) { items.push({ element, datasetIndex, index }); } }; evaluateInteractionItems(chart, axis, position, evaluationFunc, true); return items; } function getNearestRadialItems(chart, position, axis, useFinalPosition) { let items = []; function evaluationFunc(element, datasetIndex, index) { const { startAngle, endAngle } = element.getProps([ "startAngle", "endAngle" ], useFinalPosition); const { angle } = getAngleFromPoint(element, { x: position.x, y: position.y }); if (_angleBetween(angle, startAngle, endAngle)) { items.push({ element, datasetIndex, index }); } } evaluateInteractionItems(chart, axis, position, evaluationFunc); return items; } function getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) { let items = []; const distanceMetric = getDistanceMetricForAxis(axis); let minDistance = Number.POSITIVE_INFINITY; function evaluationFunc(element, datasetIndex, index) { const inRange2 = element.inRange(position.x, position.y, useFinalPosition); if (intersect && !inRange2) { return; } const center = element.getCenterPoint(useFinalPosition); const pointInArea = !!includeInvisible || chart.isPointInArea(center); if (!pointInArea && !inRange2) { return; } const distance = distanceMetric(position, center); if (distance < minDistance) { items = [ { element, datasetIndex, index } ]; minDistance = distance; } else if (distance === minDistance) { items.push({ element, datasetIndex, index }); } } evaluateInteractionItems(chart, axis, position, evaluationFunc); return items; } function getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) { if (!includeInvisible && !chart.isPointInArea(position)) { return []; } return axis === "r" && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible); } function getAxisItems(chart, position, axis, intersect, useFinalPosition) { const items = []; const rangeMethod = axis === "x" ? "inXRange" : "inYRange"; let intersectsItem = false; evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => { if (element[rangeMethod](position[axis], useFinalPosition)) { items.push({ element, datasetIndex, index }); intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition); } }); if (intersect && !intersectsItem) { return []; } return items; } var Interaction = { evaluateInteractionItems, modes: { index(chart, e, options, useFinalPosition) { const position = getRelativePosition(e, chart); const axis = options.axis || "x"; const includeInvisible = options.includeInvisible || false; const items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible); const elements = []; if (!items.length) { return []; } chart.getSortedVisibleDatasetMetas().forEach((meta) => { const index = items[0].index; const element = meta.data[index]; if (element && !element.skip) { elements.push({ element, datasetIndex: meta.index, index }); } }); return elements; }, dataset(chart, e, options, useFinalPosition) { const position = getRelativePosition(e, chart); const axis = options.axis || "xy"; const includeInvisible = options.includeInvisible || false; let items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible); if (items.length > 0) { const datasetIndex = items[0].datasetIndex; const data = chart.getDatasetMeta(datasetIndex).data; items = []; for (let i = 0; i < data.length; ++i) { items.push({ element: data[i], datasetIndex, index: i }); } } return items; }, point(chart, e, options, useFinalPosition) { const position = getRelativePosition(e, chart); const axis = options.axis || "xy"; const includeInvisible = options.includeInvisible || false; return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible); }, nearest(chart, e, options, useFinalPosition) { const position = getRelativePosition(e, chart); const axis = options.axis || "xy"; const includeInvisible = options.includeInvisible || false; return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible); }, x(chart, e, options, useFinalPosition) { const position = getRelativePosition(e, chart); return getAxisItems(chart, position, "x", options.intersect, useFinalPosition); }, y(chart, e, options, useFinalPosition) { const position = getRelativePosition(e, chart); return getAxisItems(chart, position, "y", options.intersect, useFinalPosition); } } }; var STATIC_POSITIONS = [ "left", "top", "right", "bottom" ]; function filterByPosition(array, position) { return array.filter((v) => v.pos === position); } function filterDynamicPositionByAxis(array, axis) { return array.filter((v) => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis); } function sortByWeight(array, reverse) { return array.sort((a, b) => { const v0 = reverse ? b : a; const v1 = reverse ? a : b; return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight; }); } function wrapBoxes(boxes) { const layoutBoxes = []; let i, ilen, box, pos, stack, stackWeight; for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) { box = boxes[i]; ({ position: pos, options: { stack, stackWeight = 1 } } = box); layoutBoxes.push({ index: i, box, pos, horizontal: box.isHorizontal(), weight: box.weight, stack: stack && pos + stack, stackWeight }); } return layoutBoxes; } function buildStacks(layouts2) { const stacks = {}; for (const wrap of layouts2) { const { stack, pos, stackWeight } = wrap; if (!stack || !STATIC_POSITIONS.includes(pos)) { continue; } const _stack = stacks[stack] || (stacks[stack] = { count: 0, placed: 0, weight: 0, size: 0 }); _stack.count++; _stack.weight += stackWeight; } return stacks; } function setLayoutDims(layouts2, params) { const stacks = buildStacks(layouts2); const { vBoxMaxWidth, hBoxMaxHeight } = params; let i, ilen, layout; for (i = 0, ilen = layouts2.length; i < ilen; ++i) { layout = layouts2[i]; const { fullSize } = layout.box; const stack = stacks[layout.stack]; const factor = stack && layout.stackWeight / stack.weight; if (layout.horizontal) { layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth; layout.height = hBoxMaxHeight; } else { layout.width = vBoxMaxWidth; layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight; } } return stacks; } function buildLayoutBoxes(boxes) { const layoutBoxes = wrapBoxes(boxes); const fullSize = sortByWeight(layoutBoxes.filter((wrap) => wrap.box.fullSize), true); const left = sortByWeight(filterByPosition(layoutBoxes, "left"), true); const right = sortByWeight(filterByPosition(layoutBoxes, "right")); const top = sortByWeight(filterByPosition(layoutBoxes, "top"), true); const bottom = sortByWeight(filterByPosition(layoutBoxes, "bottom")); const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, "x"); const centerVertical = filterDynamicPositionByAxis(layoutBoxes, "y"); return { fullSize, leftAndTop: left.concat(top), rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal), chartArea: filterByPosition(layoutBoxes, "chartArea"), vertical: left.concat(right).concat(centerVertical), horizontal: top.concat(bottom).concat(centerHorizontal) }; } function getCombinedMax(maxPadding, chartArea, a, b) { return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]); } function updateMaxPadding(maxPadding, boxPadding) { maxPadding.top = Math.max(maxPadding.top, boxPadding.top); maxPadding.left = Math.max(maxPadding.left, boxPadding.left); maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom); maxPadding.right = Math.max(maxPadding.right, boxPadding.right); } function updateDims(chartArea, params, layout, stacks) { const { pos, box } = layout; const maxPadding = chartArea.maxPadding; if (!isObject(pos)) { if (layout.size) { chartArea[pos] -= layout.size; } const stack = stacks[layout.stack] || { size: 0, count: 1 }; stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width); layout.size = stack.size / stack.count; chartArea[pos] += layout.size; } if (box.getPadding) { updateMaxPadding(maxPadding, box.getPadding()); } const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, "left", "right")); const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, "top", "bottom")); const widthChanged = newWidth !== chartArea.w; const heightChanged = newHeight !== chartArea.h; chartArea.w = newWidth; chartArea.h = newHeight; return layout.horizontal ? { same: widthChanged, other: heightChanged } : { same: heightChanged, other: widthChanged }; } function handleMaxPadding(chartArea) { const maxPadding = chartArea.maxPadding; function updatePos(pos) { const change = Math.max(maxPadding[pos] - chartArea[pos], 0); chartArea[pos] += change; return change; } chartArea.y += updatePos("top"); chartArea.x += updatePos("left"); updatePos("right"); updatePos("bottom"); } function getMargins(horizontal, chartArea) { const maxPadding = chartArea.maxPadding; function marginForPositions(positions2) { const margin = { left: 0, top: 0, right: 0, bottom: 0 }; positions2.forEach((pos) => { margin[pos] = Math.max(chartArea[pos], maxPadding[pos]); }); return margin; } return horizontal ? marginForPositions([ "left", "right" ]) : marginForPositions([ "top", "bottom" ]); } function fitBoxes(boxes, chartArea, params, stacks) { const refitBoxes = []; let i, ilen, layout, box, refit, changed; for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) { layout = boxes[i]; box = layout.box; box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea)); const { same, other } = updateDims(chartArea, params, layout, stacks); refit |= same && refitBoxes.length; changed = changed || other; if (!box.fullSize) { refitBoxes.push(layout); } } return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed; } function setBoxDims(box, left, top, width, height) { box.top = top; box.left = left; box.right = left + width; box.bottom = top + height; box.width = width; box.height = height; } function placeBoxes(boxes, chartArea, params, stacks) { const userPadding = params.padding; let { x, y } = chartArea; for (const layout of boxes) { const box = layout.box; const stack = stacks[layout.stack] || { count: 1, placed: 0, weight: 1 }; const weight = layout.stackWeight / stack.weight || 1; if (layout.horizontal) { const width = chartArea.w * weight; const height = stack.size || box.height; if (defined(stack.start)) { y = stack.start; } if (box.fullSize) { setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height); } else { setBoxDims(box, chartArea.left + stack.placed, y, width, height); } stack.start = y; stack.placed += width; y = box.bottom; } else { const height = chartArea.h * weight; const width = stack.size || box.width; if (defined(stack.start)) { x = stack.start; } if (box.fullSize) { setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top); } else { setBoxDims(box, x, chartArea.top + stack.placed, width, height); } stack.start = x; stack.placed += height; x = box.right; } } chartArea.x = x; chartArea.y = y; } var layouts = { addBox(chart, item) { if (!chart.boxes) { chart.boxes = []; } item.fullSize = item.fullSize || false; item.position = item.position || "top"; item.weight = item.weight || 0; item._layers = item._layers || function() { return [ { z: 0, draw(chartArea) { item.draw(chartArea); } } ]; }; chart.boxes.push(item); }, removeBox(chart, layoutItem) { const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1; if (index !== -1) { chart.boxes.splice(index, 1); } }, configure(chart, item, options) { item.fullSize = options.fullSize; item.position = options.position; item.weight = options.weight; }, update(chart, width, height, minPadding) { if (!chart) { return; } const padding = toPadding(chart.options.layout.padding); const availableWidth = Math.max(width - padding.width, 0); const availableHeight = Math.max(height - padding.height, 0); const boxes = buildLayoutBoxes(chart.boxes); const verticalBoxes = boxes.vertical; const horizontalBoxes = boxes.horizontal; each(chart.boxes, (box) => { if (typeof box.beforeLayout === "function") { box.beforeLayout(); } }); const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) => wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1; const params = Object.freeze({ outerWidth: width, outerHeight: height, padding, availableWidth, availableHeight, vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount, hBoxMaxHeight: availableHeight / 2 }); const maxPadding = Object.assign({}, padding); updateMaxPadding(maxPadding, toPadding(minPadding)); const chartArea = Object.assign({ maxPadding, w: availableWidth, h: availableHeight, x: padding.left, y: padding.top }, padding); const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params); fitBoxes(boxes.fullSize, chartArea, params, stacks); fitBoxes(verticalBoxes, chartArea, params, stacks); if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) { fitBoxes(verticalBoxes, chartArea, params, stacks); } handleMaxPadding(chartArea); placeBoxes(boxes.leftAndTop, chartArea, params, stacks); chartArea.x += chartArea.w; chartArea.y += chartArea.h; placeBoxes(boxes.rightAndBottom, chartArea, params, stacks); chart.chartArea = { left: chartArea.left, top: chartArea.top, right: chartArea.left + chartArea.w, bottom: chartArea.top + chartArea.h, height: chartArea.h, width: chartArea.w }; each(boxes.chartArea, (layout) => { const box = layout.box; Object.assign(box, chart.chartArea); box.update(chartArea.w, chartArea.h, { left: 0, top: 0, right: 0, bottom: 0 }); }); } }; var BasePlatform = class { acquireContext(canvas, aspectRatio) { } releaseContext(context) { return false; } addEventListener(chart, type, listener) { } removeEventListener(chart, type, listener) { } getDevicePixelRatio() { return 1; } getMaximumSize(element, width, height, aspectRatio) { width = Math.max(0, width || element.width); height = height || element.height; return { width, height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height) }; } isAttached(canvas) { return true; } updateConfig(config) { } }; var BasicPlatform = class extends BasePlatform { acquireContext(item) { return item && item.getContext && item.getContext("2d") || null; } updateConfig(config) { config.options.animation = false; } }; var EXPANDO_KEY = "$chartjs"; var EVENT_TYPES = { touchstart: "mousedown", touchmove: "mousemove", touchend: "mouseup", pointerenter: "mouseenter", pointerdown: "mousedown", pointermove: "mousemove", pointerup: "mouseup", pointerleave: "mouseout", pointerout: "mouseout" }; var isNullOrEmpty = (value) => value === null || value === ""; function initCanvas(canvas, aspectRatio) { const style = canvas.style; const renderHeight = canvas.getAttribute("height"); const renderWidth = canvas.getAttribute("width"); canvas[EXPANDO_KEY] = { initial: { height: renderHeight, width: renderWidth, style: { display: style.display, height: style.height, width: style.width } } }; style.display = style.display || "block"; style.boxSizing = style.boxSizing || "border-box"; if (isNullOrEmpty(renderWidth)) { const displayWidth = readUsedSize(canvas, "width"); if (displayWidth !== void 0) { canvas.width = displayWidth; } } if (isNullOrEmpty(renderHeight)) { if (canvas.style.height === "") { canvas.height = canvas.width / (aspectRatio || 2); } else { const displayHeight = readUsedSize(canvas, "height"); if (displayHeight !== void 0) { canvas.height = displayHeight; } } } return canvas; } var eventListenerOptions = supportsEventListenerOptions ? { passive: true } : false; function addListener(node, type, listener) { node.addEventListener(type, listener, eventListenerOptions); } function removeListener(chart, type, listener) { chart.canvas.removeEventListener(type, listener, eventListenerOptions); } function fromNativeEvent(event, chart) { const type = EVENT_TYPES[event.type] || event.type; const { x, y } = getRelativePosition(event, chart); return { type, chart, native: event, x: x !== void 0 ? x : null, y: y !== void 0 ? y : null }; } function nodeListContains(nodeList, canvas) { for (const node of nodeList) { if (node === canvas || node.contains(canvas)) { return true; } } } function createAttachObserver(chart, type, listener) { const canvas = chart.canvas; const observer = new MutationObserver((entries) => { let trigger = false; for (const entry of entries) { trigger = trigger || nodeListContains(entry.addedNodes, canvas); trigger = trigger && !nodeListContains(entry.removedNodes, canvas); } if (trigger) { listener(); } }); observer.observe(document, { childList: true, subtree: true }); return observer; } function createDetachObserver(chart, type, listener) { const canvas = chart.canvas; const observer = new MutationObserver((entries) => { let trigger = false; for (const entry of entries) { trigger = trigger || nodeListContains(entry.removedNodes, canvas); trigger = trigger && !nodeListContains(entry.addedNodes, canvas); } if (trigger) { listener(); } }); observer.observe(document, { childList: true, subtree: true }); return observer; } var drpListeningCharts = /* @__PURE__ */ new Map(); var oldDevicePixelRatio = 0; function onWindowResize() { const dpr = window.devicePixelRatio; if (dpr === oldDevicePixelRatio) { return; } oldDevicePixelRatio = dpr; drpListeningCharts.forEach((resize, chart) => { if (chart.currentDevicePixelRatio !== dpr) { resize(); } }); } function listenDevicePixelRatioChanges(chart, resize) { if (!drpListeningCharts.size) { window.addEventListener("resize", onWindowResize); } drpListeningCharts.set(chart, resize); } function unlistenDevicePixelRatioChanges(chart) { drpListeningCharts.delete(chart); if (!drpListeningCharts.size) { window.removeEventListener("resize", onWindowResize); } } function createResizeObserver(chart, type, listener) { const canvas = chart.canvas; const container = canvas && _getParentNode(canvas); if (!container) { return; } const resize = throttled((width, height) => { const w = container.clientWidth; listener(width, height); if (w < container.clientWidth) { listener(); } }, window); const observer = new ResizeObserver((entries) => { const entry = entries[0]; const width = entry.contentRect.width; const height = entry.contentRect.height; if (width === 0 && height === 0) { return; } resize(width, height); }); observer.observe(container); listenDevicePixelRatioChanges(chart, resize); return observer; } function releaseObserver(chart, type, observer) { if (observer) { observer.disconnect(); } if (type === "resize") { unlistenDevicePixelRatioChanges(chart); } } function createProxyAndListen(chart, type, listener) { const canvas = chart.canvas; const proxy = throttled((event) => { if (chart.ctx !== null) { listener(fromNativeEvent(event, chart)); } }, chart); addListener(canvas, type, proxy); return proxy; } var DomPlatform = class extends BasePlatform { acquireContext(canvas, aspectRatio) { const context = canvas && canvas.getContext && canvas.getContext("2d"); if (context && context.canvas === canvas) { initCanvas(canvas, aspectRatio); return context; } return null; } releaseContext(context) { const canvas = context.canvas; if (!canvas[EXPANDO_KEY]) { return false; } const initial = canvas[EXPANDO_KEY].initial; [ "height", "width" ].forEach((prop) => { const value = initial[prop]; if (isNullOrUndef(value)) { canvas.removeAttribute(prop); } else { canvas.setAttribute(prop, value); } }); const style = initial.style || {}; Object.keys(style).forEach((key) => { canvas.style[key] = style[key]; }); canvas.width = canvas.width; delete canvas[EXPANDO_KEY]; return true; } addEventListener(chart, type, listener) { this.removeEventListener(chart, type); const proxies = chart.$proxies || (chart.$proxies = {}); const handlers = { attach: createAttachObserver, detach: createDetachObserver, resize: createResizeObserver }; const handler = handlers[type] || createProxyAndListen; proxies[type] = handler(chart, type, listener); } removeEventListener(chart, type) { const proxies = chart.$proxies || (chart.$proxies = {}); const proxy = proxies[type]; if (!proxy) { return; } const handlers = { attach: releaseObserver, detach: releaseObserver, resize: releaseObserver }; const handler = handlers[type] || removeListener; handler(chart, type, proxy); proxies[type] = void 0; } getDevicePixelRatio() { return window.devicePixelRatio; } getMaximumSize(canvas, width, height, aspectRatio) { return getMaximumSize(canvas, width, height, aspectRatio); } isAttached(canvas) { const container = _getParentNode(canvas); return !!(container && container.isConnected); } }; function _detectPlatform(canvas) { if (!_isDomSupported() || typeof OffscreenCanvas !== "undefined" && canvas instanceof OffscreenCanvas) { return BasicPlatform; } return DomPlatform; } var Element = class { constructor() { __publicField(this, "x"); __publicField(this, "y"); __publicField(this, "active", false); __publicField(this, "options"); __publicField(this, "$animations"); } tooltipPosition(useFinalPosition) { const { x, y } = this.getProps([ "x", "y" ], useFinalPosition); return { x, y }; } hasValue() { return isNumber(this.x) && isNumber(this.y); } getProps(props, final) { const anims = this.$animations; if (!final || !anims) { return this; } const ret = {}; props.forEach((prop) => { ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop]; }); return ret; } }; __publicField(Element, "defaults", {}); __publicField(Element, "defaultRoutes"); function autoSkip(scale, ticks) { const tickOpts = scale.options.ticks; const determinedMaxTicks = determineMaxTicks(scale); const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks); const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : []; const numMajorIndices = majorIndices.length; const first = majorIndices[0]; const last = majorIndices[numMajorIndices - 1]; const newTicks = []; if (numMajorIndices > ticksLimit) { skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit); return newTicks; } const spacing = calculateSpacing(majorIndices, ticks, ticksLimit); if (numMajorIndices > 0) { let i, ilen; const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null; skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first); for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) { skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]); } skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing); return newTicks; } skip(ticks, newTicks, spacing); return newTicks; } function determineMaxTicks(scale) { const offset = scale.options.offset; const tickLength = scale._tickSize(); const maxScale = scale._length / tickLength + (offset ? 0 : 1); const maxChart = scale._maxLength / tickLength; return Math.floor(Math.min(maxScale, maxChart)); } function calculateSpacing(majorIndices, ticks, ticksLimit) { const evenMajorSpacing = getEvenSpacing(majorIndices); const spacing = ticks.length / ticksLimit; if (!evenMajorSpacing) { return Math.max(spacing, 1); } const factors = _factorize(evenMajorSpacing); for (let i = 0, ilen = factors.length - 1; i < ilen; i++) { const factor = factors[i]; if (factor > spacing) { return factor; } } return Math.max(spacing, 1); } function getMajorIndices(ticks) { const result = []; let i, ilen; for (i = 0, ilen = ticks.length; i < ilen; i++) { if (ticks[i].major) { result.push(i); } } return result; } function skipMajors(ticks, newTicks, majorIndices, spacing) { let count = 0; let next = majorIndices[0]; let i; spacing = Math.ceil(spacing); for (i = 0; i < ticks.length; i++) { if (i === next) { newTicks.push(ticks[i]); count++; next = majorIndices[count * spacing]; } } } function skip(ticks, newTicks, spacing, majorStart, majorEnd) { const start = valueOrDefault(majorStart, 0); const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length); let count = 0; let length, i, next; spacing = Math.ceil(spacing); if (majorEnd) { length = majorEnd - majorStart; spacing = length / Math.floor(length / spacing); } next = start; while (next < 0) { count++; next = Math.round(start + count * spacing); } for (i = Math.max(start, 0); i < end; i++) { if (i === next) { newTicks.push(ticks[i]); count++; next = Math.round(start + count * spacing); } } } function getEvenSpacing(arr) { const len = arr.length; let i, diff; if (len < 2) { return false; } for (diff = arr[0], i = 1; i < len; ++i) { if (arr[i] - arr[i - 1] !== diff) { return false; } } return diff; } var reverseAlign = (align) => align === "left" ? "right" : align === "right" ? "left" : align; var offsetFromEdge = (scale, edge, offset) => edge === "top" || edge === "left" ? scale[edge] + offset : scale[edge] - offset; var getTicksLimit = (ticksLength, maxTicksLimit) => Math.min(maxTicksLimit || ticksLength, ticksLength); function sample(arr, numItems) { const result = []; const increment = arr.length / numItems; const len = arr.length; let i = 0; for (; i < len; i += increment) { result.push(arr[Math.floor(i)]); } return result; } function getPixelForGridLine(scale, index, offsetGridLines) { const length = scale.ticks.length; const validIndex2 = Math.min(index, length - 1); const start = scale._startPixel; const end = scale._endPixel; const epsilon = 1e-6; let lineValue = scale.getPixelForTick(validIndex2); let offset; if (offsetGridLines) { if (length === 1) { offset = Math.max(lineValue - start, end - lineValue); } else if (index === 0) { offset = (scale.getPixelForTick(1) - lineValue) / 2; } else { offset = (lineValue - scale.getPixelForTick(validIndex2 - 1)) / 2; } lineValue += validIndex2 < index ? offset : -offset; if (lineValue < start - epsilon || lineValue > end + epsilon) { return; } } return lineValue; } function garbageCollect(caches, length) { each(caches, (cache) => { const gc = cache.gc; const gcLen = gc.length / 2; let i; if (gcLen > length) { for (i = 0; i < gcLen; ++i) { delete cache.data[gc[i]]; } gc.splice(0, gcLen); } }); } function getTickMarkLength(options) { return options.drawTicks ? options.tickLength : 0; } function getTitleHeight(options, fallback) { if (!options.display) { return 0; } const font = toFont(options.font, fallback); const padding = toPadding(options.padding); const lines = isArray(options.text) ? options.text.length : 1; return lines * font.lineHeight + padding.height; } function createScaleContext(parent, scale) { return createContext(parent, { scale, type: "scale" }); } function createTickContext(parent, index, tick) { return createContext(parent, { tick, index, type: "tick" }); } function titleAlign(align, position, reverse) { let ret = _toLeftRightCenter(align); if (reverse && position !== "right" || !reverse && position === "right") { ret = reverseAlign(ret); } return ret; } function titleArgs(scale, offset, position, align) { const { top, left, bottom, right, chart } = scale; const { chartArea, scales } = chart; let rotation = 0; let maxWidth, titleX, titleY; const height = bottom - top; const width = right - left; if (scale.isHorizontal()) { titleX = _alignStartEnd(align, left, right); if (isObject(position)) { const positionAxisID = Object.keys(position)[0]; const value = position[positionAxisID]; titleY = scales[positionAxisID].getPixelForValue(value) + height - offset; } else if (position === "center") { titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset; } else { titleY = offsetFromEdge(scale, position, offset); } maxWidth = right - left; } else { if (isObject(position)) { const positionAxisID = Object.keys(position)[0]; const value = position[positionAxisID]; titleX = scales[positionAxisID].getPixelForValue(value) - width + offset; } else if (position === "center") { titleX = (chartArea.left + chartArea.right) / 2 - width + offset; } else { titleX = offsetFromEdge(scale, position, offset); } titleY = _alignStartEnd(align, bottom, top); rotation = position === "left" ? -HALF_PI : HALF_PI; } return { titleX, titleY, maxWidth, rotation }; } var Scale = class extends Element { constructor(cfg) { super(); this.id = cfg.id; this.type = cfg.type; this.options = void 0; this.ctx = cfg.ctx; this.chart = cfg.chart; this.top = void 0; this.bottom = void 0; this.left = void 0; this.right = void 0; this.width = void 0; this.height = void 0; this._margins = { left: 0, right: 0, top: 0, bottom: 0 }; this.maxWidth = void 0; this.maxHeight = void 0; this.paddingTop = void 0; this.paddingBottom = void 0; this.paddingLeft = void 0; this.paddingRight = void 0; this.axis = void 0; this.labelRotation = void 0; this.min = void 0; this.max = void 0; this._range = void 0; this.ticks = []; this._gridLineItems = null; this._labelItems = null; this._labelSizes = null; this._length = 0; this._maxLength = 0; this._longestTextCache = {}; this._startPixel = void 0; this._endPixel = void 0; this._reversePixels = false; this._userMax = void 0; this._userMin = void 0; this._suggestedMax = void 0; this._suggestedMin = void 0; this._ticksLength = 0; this._borderValue = 0; this._cache = {}; this._dataLimitsCached = false; this.$context = void 0; } init(options) { this.options = options.setContext(this.getContext()); this.axis = options.axis; this._userMin = this.parse(options.min); this._userMax = this.parse(options.max); this._suggestedMin = this.parse(options.suggestedMin); this._suggestedMax = this.parse(options.suggestedMax); } parse(raw, index) { return raw; } getUserBounds() { let { _userMin, _userMax, _suggestedMin, _suggestedMax } = this; _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY); _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY); _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY); _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY); return { min: finiteOrDefault(_userMin, _suggestedMin), max: finiteOrDefault(_userMax, _suggestedMax), minDefined: isNumberFinite(_userMin), maxDefined: isNumberFinite(_userMax) }; } getMinMax(canStack) { let { min, max, minDefined, maxDefined } = this.getUserBounds(); let range; if (minDefined && maxDefined) { return { min, max }; } const metas = this.getMatchingVisibleMetas(); for (let i = 0, ilen = metas.length; i < ilen; ++i) { range = metas[i].controller.getMinMax(this, canStack); if (!minDefined) { min = Math.min(min, range.min); } if (!maxDefined) { max = Math.max(max, range.max); } } min = maxDefined && min > max ? max : min; max = minDefined && min > max ? min : max; return { min: finiteOrDefault(min, finiteOrDefault(max, min)), max: finiteOrDefault(max, finiteOrDefault(min, max)) }; } getPadding() { return { left: this.paddingLeft || 0, top: this.paddingTop || 0, right: this.paddingRight || 0, bottom: this.paddingBottom || 0 }; } getTicks() { return this.ticks; } getLabels() { const data = this.chart.data; return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || []; } getLabelItems(chartArea = this.chart.chartArea) { const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea)); return items; } beforeLayout() { this._cache = {}; this._dataLimitsCached = false; } beforeUpdate() { callback(this.options.beforeUpdate, [ this ]); } update(maxWidth, maxHeight, margins) { const { beginAtZero, grace, ticks: tickOpts } = this.options; const sampleSize = tickOpts.sampleSize; this.beforeUpdate(); this.maxWidth = maxWidth; this.maxHeight = maxHeight; this._margins = margins = Object.assign({ left: 0, right: 0, top: 0, bottom: 0 }, margins); this.ticks = null; this._labelSizes = null; this._gridLineItems = null; this._labelItems = null; this.beforeSetDimensions(); this.setDimensions(); this.afterSetDimensions(); this._maxLength = this.isHorizontal() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom; if (!this._dataLimitsCached) { this.beforeDataLimits(); this.determineDataLimits(); this.afterDataLimits(); this._range = _addGrace(this, grace, beginAtZero); this._dataLimitsCached = true; } this.beforeBuildTicks(); this.ticks = this.buildTicks() || []; this.afterBuildTicks(); const samplingEnabled = sampleSize < this.ticks.length; this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks); this.configure(); this.beforeCalculateLabelRotation(); this.calculateLabelRotation(); this.afterCalculateLabelRotation(); if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === "auto")) { this.ticks = autoSkip(this, this.ticks); this._labelSizes = null; this.afterAutoSkip(); } if (samplingEnabled) { this._convertTicksToLabels(this.ticks); } this.beforeFit(); this.fit(); this.afterFit(); this.afterUpdate(); } configure() { let reversePixels = this.options.reverse; let startPixel, endPixel; if (this.isHorizontal()) { startPixel = this.left; endPixel = this.right; } else { startPixel = this.top; endPixel = this.bottom; reversePixels = !reversePixels; } this._startPixel = startPixel; this._endPixel = endPixel; this._reversePixels = reversePixels; this._length = endPixel - startPixel; this._alignToPixels = this.options.alignToPixels; } afterUpdate() { callback(this.options.afterUpdate, [ this ]); } beforeSetDimensions() { callback(this.options.beforeSetDimensions, [ this ]); } setDimensions() { if (this.isHorizontal()) { this.width = this.maxWidth; this.left = 0; this.right = this.width; } else { this.height = this.maxHeight; this.top = 0; this.bottom = this.height; } this.paddingLeft = 0; this.paddingTop = 0; this.paddingRight = 0; this.paddingBottom = 0; } afterSetDimensions() { callback(this.options.afterSetDimensions, [ this ]); } _callHooks(name) { this.chart.notifyPlugins(name, this.getContext()); callback(this.options[name], [ this ]); } beforeDataLimits() { this._callHooks("beforeDataLimits"); } determineDataLimits() { } afterDataLimits() { this._callHooks("afterDataLimits"); } beforeBuildTicks() { this._callHooks("beforeBuildTicks"); } buildTicks() { return []; } afterBuildTicks() { this._callHooks("afterBuildTicks"); } beforeTickToLabelConversion() { callback(this.options.beforeTickToLabelConversion, [ this ]); } generateTickLabels(ticks) { const tickOpts = this.options.ticks; let i, ilen, tick; for (i = 0, ilen = ticks.length; i < ilen; i++) { tick = ticks[i]; tick.label = callback(tickOpts.callback, [ tick.value, i, ticks ], this); } } afterTickToLabelConversion() { callback(this.options.afterTickToLabelConversion, [ this ]); } beforeCalculateLabelRotation() { callback(this.options.beforeCalculateLabelRotation, [ this ]); } calculateLabelRotation() { const options = this.options; const tickOpts = options.ticks; const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit); const minRotation = tickOpts.minRotation || 0; const maxRotation = tickOpts.maxRotation; let labelRotation = minRotation; let tickWidth, maxHeight, maxLabelDiagonal; if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) { this.labelRotation = minRotation; return; } const labelSizes = this._getLabelSizes(); const maxLabelWidth = labelSizes.widest.width; const maxLabelHeight = labelSizes.highest.height; const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth); tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1); if (maxLabelWidth + 6 > tickWidth) { tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1)); maxHeight = this.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font); maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight); labelRotation = toDegrees(Math.min(Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1)))); labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation)); } this.labelRotation = labelRotation; } afterCalculateLabelRotation() { callback(this.options.afterCalculateLabelRotation, [ this ]); } afterAutoSkip() { } beforeFit() { callback(this.options.beforeFit, [ this ]); } fit() { const minSize = { width: 0, height: 0 }; const { chart, options: { ticks: tickOpts, title: titleOpts, grid: gridOpts } } = this; const display = this._isVisible(); const isHorizontal = this.isHorizontal(); if (display) { const titleHeight = getTitleHeight(titleOpts, chart.options.font); if (isHorizontal) { minSize.width = this.maxWidth; minSize.height = getTickMarkLength(gridOpts) + titleHeight; } else { minSize.height = this.maxHeight; minSize.width = getTickMarkLength(gridOpts) + titleHeight; } if (tickOpts.display && this.ticks.length) { const { first, last, widest, highest } = this._getLabelSizes(); const tickPadding = tickOpts.padding * 2; const angleRadians = toRadians(this.labelRotation); const cos = Math.cos(angleRadians); const sin = Math.sin(angleRadians); if (isHorizontal) { const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height; minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding); } else { const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height; minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding); } this._calculatePadding(first, last, sin, cos); } } this._handleMargins(); if (isHorizontal) { this.width = this._length = chart.width - this._margins.left - this._margins.right; this.height = minSize.height; } else { this.width = minSize.width; this.height = this._length = chart.height - this._margins.top - this._margins.bottom; } } _calculatePadding(first, last, sin, cos) { const { ticks: { align, padding }, position } = this.options; const isRotated = this.labelRotation !== 0; const labelsBelowTicks = position !== "top" && this.axis === "x"; if (this.isHorizontal()) { const offsetLeft = this.getPixelForTick(0) - this.left; const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1); let paddingLeft = 0; let paddingRight = 0; if (isRotated) { if (labelsBelowTicks) { paddingLeft = cos * first.width; paddingRight = sin * last.height; } else { paddingLeft = sin * first.height; paddingRight = cos * last.width; } } else if (align === "start") { paddingRight = last.width; } else if (align === "end") { paddingLeft = first.width; } else if (align !== "inner") { paddingLeft = first.width / 2; paddingRight = last.width / 2; } this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0); this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0); } else { let paddingTop = last.height / 2; let paddingBottom = first.height / 2; if (align === "start") { paddingTop = 0; paddingBottom = first.height; } else if (align === "end") { paddingTop = last.height; paddingBottom = 0; } this.paddingTop = paddingTop + padding; this.paddingBottom = paddingBottom + padding; } } _handleMargins() { if (this._margins) { this._margins.left = Math.max(this.paddingLeft, this._margins.left); this._margins.top = Math.max(this.paddingTop, this._margins.top); this._margins.right = Math.max(this.paddingRight, this._margins.right); this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom); } } afterFit() { callback(this.options.afterFit, [ this ]); } isHorizontal() { const { axis, position } = this.options; return position === "top" || position === "bottom" || axis === "x"; } isFullSize() { return this.options.fullSize; } _convertTicksToLabels(ticks) { this.beforeTickToLabelConversion(); this.generateTickLabels(ticks); let i, ilen; for (i = 0, ilen = ticks.length; i < ilen; i++) { if (isNullOrUndef(ticks[i].label)) { ticks.splice(i, 1); ilen--; i--; } } this.afterTickToLabelConversion(); } _getLabelSizes() { let labelSizes = this._labelSizes; if (!labelSizes) { const sampleSize = this.options.ticks.sampleSize; let ticks = this.ticks; if (sampleSize < ticks.length) { ticks = sample(ticks, sampleSize); } this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit); } return labelSizes; } _computeLabelSizes(ticks, length, maxTicksLimit) { const { ctx, _longestTextCache: caches } = this; const widths = []; const heights = []; const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit)); let widestLabelSize = 0; let highestLabelSize = 0; let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel; for (i = 0; i < length; i += increment) { label = ticks[i].label; tickFont = this._resolveTickFontOptions(i); ctx.font = fontString = tickFont.string; cache = caches[fontString] = caches[fontString] || { data: {}, gc: [] }; lineHeight = tickFont.lineHeight; width = height = 0; if (!isNullOrUndef(label) && !isArray(label)) { width = _measureText(ctx, cache.data, cache.gc, width, label); height = lineHeight; } else if (isArray(label)) { for (j = 0, jlen = label.length; j < jlen; ++j) { nestedLabel = label[j]; if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) { width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel); height += lineHeight; } } } widths.push(width); heights.push(height); widestLabelSize = Math.max(width, widestLabelSize); highestLabelSize = Math.max(height, highestLabelSize); } garbageCollect(caches, length); const widest = widths.indexOf(widestLabelSize); const highest = heights.indexOf(highestLabelSize); const valueAt = (idx) => ({ width: widths[idx] || 0, height: heights[idx] || 0 }); return { first: valueAt(0), last: valueAt(length - 1), widest: valueAt(widest), highest: valueAt(highest), widths, heights }; } getLabelForValue(value) { return value; } getPixelForValue(value, index) { return NaN; } getValueForPixel(pixel) { } getPixelForTick(index) { const ticks = this.ticks; if (index < 0 || index > ticks.length - 1) { return null; } return this.getPixelForValue(ticks[index].value); } getPixelForDecimal(decimal) { if (this._reversePixels) { decimal = 1 - decimal; } const pixel = this._startPixel + decimal * this._length; return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel); } getDecimalForPixel(pixel) { const decimal = (pixel - this._startPixel) / this._length; return this._reversePixels ? 1 - decimal : decimal; } getBasePixel() { return this.getPixelForValue(this.getBaseValue()); } getBaseValue() { const { min, max } = this; return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0; } getContext(index) { const ticks = this.ticks || []; if (index >= 0 && index < ticks.length) { const tick = ticks[index]; return tick.$context || (tick.$context = createTickContext(this.getContext(), index, tick)); } return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this)); } _tickSize() { const optionTicks = this.options.ticks; const rot = toRadians(this.labelRotation); const cos = Math.abs(Math.cos(rot)); const sin = Math.abs(Math.sin(rot)); const labelSizes = this._getLabelSizes(); const padding = optionTicks.autoSkipPadding || 0; const w = labelSizes ? labelSizes.widest.width + padding : 0; const h4 = labelSizes ? labelSizes.highest.height + padding : 0; return this.isHorizontal() ? h4 * cos > w * sin ? w / cos : h4 / sin : h4 * sin < w * cos ? h4 / cos : w / sin; } _isVisible() { const display = this.options.display; if (display !== "auto") { return !!display; } return this.getMatchingVisibleMetas().length > 0; } _computeGridLineItems(chartArea) { const axis = this.axis; const chart = this.chart; const options = this.options; const { grid, position, border } = options; const offset = grid.offset; const isHorizontal = this.isHorizontal(); const ticks = this.ticks; const ticksLength = ticks.length + (offset ? 1 : 0); const tl = getTickMarkLength(grid); const items = []; const borderOpts = border.setContext(this.getContext()); const axisWidth = borderOpts.display ? borderOpts.width : 0; const axisHalfWidth = axisWidth / 2; const alignBorderValue = function(pixel) { return _alignPixel(chart, pixel, axisWidth); }; let borderValue, i, lineValue, alignedLineValue; let tx1, ty1, tx2, ty2, x1, y1, x2, y2; if (position === "top") { borderValue = alignBorderValue(this.bottom); ty1 = this.bottom - tl; ty2 = borderValue - axisHalfWidth; y1 = alignBorderValue(chartArea.top) + axisHalfWidth; y2 = chartArea.bottom; } else if (position === "bottom") { borderValue = alignBorderValue(this.top); y1 = chartArea.top; y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth; ty1 = borderValue + axisHalfWidth; ty2 = this.top + tl; } else if (position === "left") { borderValue = alignBorderValue(this.right); tx1 = this.right - tl; tx2 = borderValue - axisHalfWidth; x1 = alignBorderValue(chartArea.left) + axisHalfWidth; x2 = chartArea.right; } else if (position === "right") { borderValue = alignBorderValue(this.left); x1 = chartArea.left; x2 = alignBorderValue(chartArea.right) - axisHalfWidth; tx1 = borderValue + axisHalfWidth; tx2 = this.left + tl; } else if (axis === "x") { if (position === "center") { borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5); } else if (isObject(position)) { const positionAxisID = Object.keys(position)[0]; const value = position[positionAxisID]; borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value)); } y1 = chartArea.top; y2 = chartArea.bottom; ty1 = borderValue + axisHalfWidth; ty2 = ty1 + tl; } else if (axis === "y") { if (position === "center") { borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2); } else if (isObject(position)) { const positionAxisID = Object.keys(position)[0]; const value = position[positionAxisID]; borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value)); } tx1 = borderValue - axisHalfWidth; tx2 = tx1 - tl; x1 = chartArea.left; x2 = chartArea.right; } const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength); const step = Math.max(1, Math.ceil(ticksLength / limit)); for (i = 0; i < ticksLength; i += step) { const context = this.getContext(i); const optsAtIndex = grid.setContext(context); const optsAtIndexBorder = border.setContext(context); const lineWidth = optsAtIndex.lineWidth; const lineColor = optsAtIndex.color; const borderDash = optsAtIndexBorder.dash || []; const borderDashOffset = optsAtIndexBorder.dashOffset; const tickWidth = optsAtIndex.tickWidth; const tickColor = optsAtIndex.tickColor; const tickBorderDash = optsAtIndex.tickBorderDash || []; const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset; lineValue = getPixelForGridLine(this, i, offset); if (lineValue === void 0) { continue; } alignedLineValue = _alignPixel(chart, lineValue, lineWidth); if (isHorizontal) { tx1 = tx2 = x1 = x2 = alignedLineValue; } else { ty1 = ty2 = y1 = y2 = alignedLineValue; } items.push({ tx1, ty1, tx2, ty2, x1, y1, x2, y2, width: lineWidth, color: lineColor, borderDash, borderDashOffset, tickWidth, tickColor, tickBorderDash, tickBorderDashOffset }); } this._ticksLength = ticksLength; this._borderValue = borderValue; return items; } _computeLabelItems(chartArea) { const axis = this.axis; const options = this.options; const { position, ticks: optionTicks } = options; const isHorizontal = this.isHorizontal(); const ticks = this.ticks; const { align, crossAlign, padding, mirror } = optionTicks; const tl = getTickMarkLength(options.grid); const tickAndPadding = tl + padding; const hTickAndPadding = mirror ? -padding : tickAndPadding; const rotation = -toRadians(this.labelRotation); const items = []; let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset; let textBaseline = "middle"; if (position === "top") { y = this.bottom - hTickAndPadding; textAlign = this._getXAxisLabelAlignment(); } else if (position === "bottom") { y = this.top + hTickAndPadding; textAlign = this._getXAxisLabelAlignment(); } else if (position === "left") { const ret = this._getYAxisLabelAlignment(tl); textAlign = ret.textAlign; x = ret.x; } else if (position === "right") { const ret = this._getYAxisLabelAlignment(tl); textAlign = ret.textAlign; x = ret.x; } else if (axis === "x") { if (position === "center") { y = (chartArea.top + chartArea.bottom) / 2 + tickAndPadding; } else if (isObject(position)) { const positionAxisID = Object.keys(position)[0]; const value = position[positionAxisID]; y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding; } textAlign = this._getXAxisLabelAlignment(); } else if (axis === "y") { if (position === "center") { x = (chartArea.left + chartArea.right) / 2 - tickAndPadding; } else if (isObject(position)) { const positionAxisID = Object.keys(position)[0]; const value = position[positionAxisID]; x = this.chart.scales[positionAxisID].getPixelForValue(value); } textAlign = this._getYAxisLabelAlignment(tl).textAlign; } if (axis === "y") { if (align === "start") { textBaseline = "top"; } else if (align === "end") { textBaseline = "bottom"; } } const labelSizes = this._getLabelSizes(); for (i = 0, ilen = ticks.length; i < ilen; ++i) { tick = ticks[i]; label = tick.label; const optsAtIndex = optionTicks.setContext(this.getContext(i)); pixel = this.getPixelForTick(i) + optionTicks.labelOffset; font = this._resolveTickFontOptions(i); lineHeight = font.lineHeight; lineCount = isArray(label) ? label.length : 1; const halfCount = lineCount / 2; const color2 = optsAtIndex.color; const strokeColor = optsAtIndex.textStrokeColor; const strokeWidth = optsAtIndex.textStrokeWidth; let tickTextAlign = textAlign; if (isHorizontal) { x = pixel; if (textAlign === "inner") { if (i === ilen - 1) { tickTextAlign = !this.options.reverse ? "right" : "left"; } else if (i === 0) { tickTextAlign = !this.options.reverse ? "left" : "right"; } else { tickTextAlign = "center"; } } if (position === "top") { if (crossAlign === "near" || rotation !== 0) { textOffset = -lineCount * lineHeight + lineHeight / 2; } else if (crossAlign === "center") { textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight; } else { textOffset = -labelSizes.highest.height + lineHeight / 2; } } else { if (crossAlign === "near" || rotation !== 0) { textOffset = lineHeight / 2; } else if (crossAlign === "center") { textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight; } else { textOffset = labelSizes.highest.height - lineCount * lineHeight; } } if (mirror) { textOffset *= -1; } if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) { x += lineHeight / 2 * Math.sin(rotation); } } else { y = pixel; textOffset = (1 - lineCount) * lineHeight / 2; } let backdrop; if (optsAtIndex.showLabelBackdrop) { const labelPadding = toPadding(optsAtIndex.backdropPadding); const height = labelSizes.heights[i]; const width = labelSizes.widths[i]; let top = textOffset - labelPadding.top; let left = 0 - labelPadding.left; switch (textBaseline) { case "middle": top -= height / 2; break; case "bottom": top -= height; break; } switch (textAlign) { case "center": left -= width / 2; break; case "right": left -= width; break; } backdrop = { left, top, width: width + labelPadding.width, height: height + labelPadding.height, color: optsAtIndex.backdropColor }; } items.push({ label, font, textOffset, options: { rotation, color: color2, strokeColor, strokeWidth, textAlign: tickTextAlign, textBaseline, translation: [ x, y ], backdrop } }); } return items; } _getXAxisLabelAlignment() { const { position, ticks } = this.options; const rotation = -toRadians(this.labelRotation); if (rotation) { return position === "top" ? "left" : "right"; } let align = "center"; if (ticks.align === "start") { align = "left"; } else if (ticks.align === "end") { align = "right"; } else if (ticks.align === "inner") { align = "inner"; } return align; } _getYAxisLabelAlignment(tl) { const { position, ticks: { crossAlign, mirror, padding } } = this.options; const labelSizes = this._getLabelSizes(); const tickAndPadding = tl + padding; const widest = labelSizes.widest.width; let textAlign; let x; if (position === "left") { if (mirror) { x = this.right + padding; if (crossAlign === "near") { textAlign = "left"; } else if (crossAlign === "center") { textAlign = "center"; x += widest / 2; } else { textAlign = "right"; x += widest; } } else { x = this.right - tickAndPadding; if (crossAlign === "near") { textAlign = "right"; } else if (crossAlign === "center") { textAlign = "center"; x -= widest / 2; } else { textAlign = "left"; x = this.left; } } } else if (position === "right") { if (mirror) { x = this.left + padding; if (crossAlign === "near") { textAlign = "right"; } else if (crossAlign === "center") { textAlign = "center"; x -= widest / 2; } else { textAlign = "left"; x -= widest; } } else { x = this.left + tickAndPadding; if (crossAlign === "near") { textAlign = "left"; } else if (crossAlign === "center") { textAlign = "center"; x += widest / 2; } else { textAlign = "right"; x = this.right; } } } else { textAlign = "right"; } return { textAlign, x }; } _computeLabelArea() { if (this.options.ticks.mirror) { return; } const chart = this.chart; const position = this.options.position; if (position === "left" || position === "right") { return { top: 0, left: this.left, bottom: chart.height, right: this.right }; } if (position === "top" || position === "bottom") { return { top: this.top, left: 0, bottom: this.bottom, right: chart.width }; } } drawBackground() { const { ctx, options: { backgroundColor }, left, top, width, height } = this; if (backgroundColor) { ctx.save(); ctx.fillStyle = backgroundColor; ctx.fillRect(left, top, width, height); ctx.restore(); } } getLineWidthForValue(value) { const grid = this.options.grid; if (!this._isVisible() || !grid.display) { return 0; } const ticks = this.ticks; const index = ticks.findIndex((t2) => t2.value === value); if (index >= 0) { const opts = grid.setContext(this.getContext(index)); return opts.lineWidth; } return 0; } drawGrid(chartArea) { const grid = this.options.grid; const ctx = this.ctx; const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea)); let i, ilen; const drawLine = (p1, p2, style) => { if (!style.width || !style.color) { return; } ctx.save(); ctx.lineWidth = style.width; ctx.strokeStyle = style.color; ctx.setLineDash(style.borderDash || []); ctx.lineDashOffset = style.borderDashOffset; ctx.beginPath(); ctx.moveTo(p1.x, p1.y); ctx.lineTo(p2.x, p2.y); ctx.stroke(); ctx.restore(); }; if (grid.display) { for (i = 0, ilen = items.length; i < ilen; ++i) { const item = items[i]; if (grid.drawOnChartArea) { drawLine({ x: item.x1, y: item.y1 }, { x: item.x2, y: item.y2 }, item); } if (grid.drawTicks) { drawLine({ x: item.tx1, y: item.ty1 }, { x: item.tx2, y: item.ty2 }, { color: item.tickColor, width: item.tickWidth, borderDash: item.tickBorderDash, borderDashOffset: item.tickBorderDashOffset }); } } } } drawBorder() { const { chart, ctx, options: { border, grid } } = this; const borderOpts = border.setContext(this.getContext()); const axisWidth = border.display ? borderOpts.width : 0; if (!axisWidth) { return; } const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth; const borderValue = this._borderValue; let x1, x2, y1, y2; if (this.isHorizontal()) { x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2; x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2; y1 = y2 = borderValue; } else { y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2; y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2; x1 = x2 = borderValue; } ctx.save(); ctx.lineWidth = borderOpts.width; ctx.strokeStyle = borderOpts.color; ctx.beginPath(); ctx.moveTo(x1, y1); ctx.lineTo(x2, y2); ctx.stroke(); ctx.restore(); } drawLabels(chartArea) { const optionTicks = this.options.ticks; if (!optionTicks.display) { return; } const ctx = this.ctx; const area = this._computeLabelArea(); if (area) { clipArea(ctx, area); } const items = this.getLabelItems(chartArea); for (const item of items) { const renderTextOptions = item.options; const tickFont = item.font; const label = item.label; const y = item.textOffset; renderText(ctx, label, 0, y, tickFont, renderTextOptions); } if (area) { unclipArea(ctx); } } drawTitle() { const { ctx, options: { position, title, reverse } } = this; if (!title.display) { return; } const font = toFont(title.font); const padding = toPadding(title.padding); const align = title.align; let offset = font.lineHeight / 2; if (position === "bottom" || position === "center" || isObject(position)) { offset += padding.bottom; if (isArray(title.text)) { offset += font.lineHeight * (title.text.length - 1); } } else { offset += padding.top; } const { titleX, titleY, maxWidth, rotation } = titleArgs(this, offset, position, align); renderText(ctx, title.text, 0, 0, font, { color: title.color, maxWidth, rotation, textAlign: titleAlign(align, position, reverse), textBaseline: "middle", translation: [ titleX, titleY ] }); } draw(chartArea) { if (!this._isVisible()) { return; } this.drawBackground(); this.drawGrid(chartArea); this.drawBorder(); this.drawTitle(); this.drawLabels(chartArea); } _layers() { const opts = this.options; const tz = opts.ticks && opts.ticks.z || 0; const gz = valueOrDefault(opts.grid && opts.grid.z, -1); const bz = valueOrDefault(opts.border && opts.border.z, 0); if (!this._isVisible() || this.draw !== Scale.prototype.draw) { return [ { z: tz, draw: (chartArea) => { this.draw(chartArea); } } ]; } return [ { z: gz, draw: (chartArea) => { this.drawBackground(); this.drawGrid(chartArea); this.drawTitle(); } }, { z: bz, draw: () => { this.drawBorder(); } }, { z: tz, draw: (chartArea) => { this.drawLabels(chartArea); } } ]; } getMatchingVisibleMetas(type) { const metas = this.chart.getSortedVisibleDatasetMetas(); const axisID = this.axis + "AxisID"; const result = []; let i, ilen; for (i = 0, ilen = metas.length; i < ilen; ++i) { const meta = metas[i]; if (meta[axisID] === this.id && (!type || meta.type === type)) { result.push(meta); } } return result; } _resolveTickFontOptions(index) { const opts = this.options.ticks.setContext(this.getContext(index)); return toFont(opts.font); } _maxDigits() { const fontSize = this._resolveTickFontOptions(0).lineHeight; return (this.isHorizontal() ? this.width : this.height) / fontSize; } }; var TypedRegistry = class { constructor(type, scope, override) { this.type = type; this.scope = scope; this.override = override; this.items = /* @__PURE__ */ Object.create(null); } isForType(type) { return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype); } register(item) { const proto = Object.getPrototypeOf(item); let parentScope; if (isIChartComponent(proto)) { parentScope = this.register(proto); } const items = this.items; const id = item.id; const scope = this.scope + "." + id; if (!id) { throw new Error("class does not have id: " + item); } if (id in items) { return scope; } items[id] = item; registerDefaults(item, scope, parentScope); if (this.override) { defaults.override(item.id, item.overrides); } return scope; } get(id) { return this.items[id]; } unregister(item) { const items = this.items; const id = item.id; const scope = this.scope; if (id in items) { delete items[id]; } if (scope && id in defaults[scope]) { delete defaults[scope][id]; if (this.override) { delete overrides[id]; } } } }; function registerDefaults(item, scope, parentScope) { const itemDefaults = merge(/* @__PURE__ */ Object.create(null), [ parentScope ? defaults.get(parentScope) : {}, defaults.get(scope), item.defaults ]); defaults.set(scope, itemDefaults); if (item.defaultRoutes) { routeDefaults(scope, item.defaultRoutes); } if (item.descriptors) { defaults.describe(scope, item.descriptors); } } function routeDefaults(scope, routes) { Object.keys(routes).forEach((property) => { const propertyParts = property.split("."); const sourceName = propertyParts.pop(); const sourceScope = [ scope ].concat(propertyParts).join("."); const parts = routes[property].split("."); const targetName = parts.pop(); const targetScope = parts.join("."); defaults.route(sourceScope, sourceName, targetScope, targetName); }); } function isIChartComponent(proto) { return "id" in proto && "defaults" in proto; } var Registry = class { constructor() { this.controllers = new TypedRegistry(DatasetController, "datasets", true); this.elements = new TypedRegistry(Element, "elements"); this.plugins = new TypedRegistry(Object, "plugins"); this.scales = new TypedRegistry(Scale, "scales"); this._typedRegistries = [ this.controllers, this.scales, this.elements ]; } add(...args) { this._each("register", args); } remove(...args) { this._each("unregister", args); } addControllers(...args) { this._each("register", args, this.controllers); } addElements(...args) { this._each("register", args, this.elements); } addPlugins(...args) { this._each("register", args, this.plugins); } addScales(...args) { this._each("register", args, this.scales); } getController(id) { return this._get(id, this.controllers, "controller"); } getElement(id) { return this._get(id, this.elements, "element"); } getPlugin(id) { return this._get(id, this.plugins, "plugin"); } getScale(id) { return this._get(id, this.scales, "scale"); } removeControllers(...args) { this._each("unregister", args, this.controllers); } removeElements(...args) { this._each("unregister", args, this.elements); } removePlugins(...args) { this._each("unregister", args, this.plugins); } removeScales(...args) { this._each("unregister", args, this.scales); } _each(method, args, typedRegistry) { [ ...args ].forEach((arg) => { const reg = typedRegistry || this._getRegistryForType(arg); if (typedRegistry || reg.isForType(arg) || reg === this.plugins && arg.id) { this._exec(method, reg, arg); } else { each(arg, (item) => { const itemReg = typedRegistry || this._getRegistryForType(item); this._exec(method, itemReg, item); }); } }); } _exec(method, registry2, component) { const camelMethod = _capitalize(method); callback(component["before" + camelMethod], [], component); registry2[method](component); callback(component["after" + camelMethod], [], component); } _getRegistryForType(type) { for (let i = 0; i < this._typedRegistries.length; i++) { const reg = this._typedRegistries[i]; if (reg.isForType(type)) { return reg; } } return this.plugins; } _get(id, typedRegistry, type) { const item = typedRegistry.get(id); if (item === void 0) { throw new Error('"' + id + '" is not a registered ' + type + "."); } return item; } }; var registry = /* @__PURE__ */ new Registry(); var PluginService = class { constructor() { this._init = []; } notify(chart, hook, args, filter) { if (hook === "beforeInit") { this._init = this._createDescriptors(chart, true); this._notify(this._init, chart, "install"); } const descriptors2 = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart); const result = this._notify(descriptors2, chart, hook, args); if (hook === "afterDestroy") { this._notify(descriptors2, chart, "stop"); this._notify(this._init, chart, "uninstall"); } return result; } _notify(descriptors2, chart, hook, args) { args = args || {}; for (const descriptor of descriptors2) { const plugin = descriptor.plugin; const method = plugin[hook]; const params = [ chart, args, descriptor.options ]; if (callback(method, params, plugin) === false && args.cancelable) { return false; } } return true; } invalidate() { if (!isNullOrUndef(this._cache)) { this._oldCache = this._cache; this._cache = void 0; } } _descriptors(chart) { if (this._cache) { return this._cache; } const descriptors2 = this._cache = this._createDescriptors(chart); this._notifyStateChanges(chart); return descriptors2; } _createDescriptors(chart, all) { const config = chart && chart.config; const options = valueOrDefault(config.options && config.options.plugins, {}); const plugins = allPlugins(config); return options === false && !all ? [] : createDescriptors(chart, plugins, options, all); } _notifyStateChanges(chart) { const previousDescriptors = this._oldCache || []; const descriptors2 = this._cache; const diff = (a, b) => a.filter((x) => !b.some((y) => x.plugin.id === y.plugin.id)); this._notify(diff(previousDescriptors, descriptors2), chart, "stop"); this._notify(diff(descriptors2, previousDescriptors), chart, "start"); } }; function allPlugins(config) { const localIds = {}; const plugins = []; const keys = Object.keys(registry.plugins.items); for (let i = 0; i < keys.length; i++) { plugins.push(registry.getPlugin(keys[i])); } const local = config.plugins || []; for (let i = 0; i < local.length; i++) { const plugin = local[i]; if (plugins.indexOf(plugin) === -1) { plugins.push(plugin); localIds[plugin.id] = true; } } return { plugins, localIds }; } function getOpts(options, all) { if (!all && options === false) { return null; } if (options === true) { return {}; } return options; } function createDescriptors(chart, { plugins, localIds }, options, all) { const result = []; const context = chart.getContext(); for (const plugin of plugins) { const id = plugin.id; const opts = getOpts(options[id], all); if (opts === null) { continue; } result.push({ plugin, options: pluginOpts(chart.config, { plugin, local: localIds[id] }, opts, context) }); } return result; } function pluginOpts(config, { plugin, local }, opts, context) { const keys = config.pluginScopeKeys(plugin); const scopes = config.getOptionScopes(opts, keys); if (local && plugin.defaults) { scopes.push(plugin.defaults); } return config.createResolver(scopes, context, [ "" ], { scriptable: false, indexable: false, allKeys: true }); } function getIndexAxis(type, options) { const datasetDefaults = defaults.datasets[type] || {}; const datasetOptions = (options.datasets || {})[type] || {}; return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || "x"; } function getAxisFromDefaultScaleID(id, indexAxis) { let axis = id; if (id === "_index_") { axis = indexAxis; } else if (id === "_value_") { axis = indexAxis === "x" ? "y" : "x"; } return axis; } function getDefaultScaleIDFromAxis(axis, indexAxis) { return axis === indexAxis ? "_index_" : "_value_"; } function idMatchesAxis(id) { if (id === "x" || id === "y" || id === "r") { return id; } } function axisFromPosition(position) { if (position === "top" || position === "bottom") { return "x"; } if (position === "left" || position === "right") { return "y"; } } function determineAxis(id, ...scaleOptions) { if (idMatchesAxis(id)) { return id; } for (const opts of scaleOptions) { const axis = opts.axis || axisFromPosition(opts.position) || id.length > 1 && idMatchesAxis(id[0].toLowerCase()); if (axis) { return axis; } } throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`); } function getAxisFromDataset(id, axis, dataset) { if (dataset[axis + "AxisID"] === id) { return { axis }; } } function retrieveAxisFromDatasets(id, config) { if (config.data && config.data.datasets) { const boundDs = config.data.datasets.filter((d) => d.xAxisID === id || d.yAxisID === id); if (boundDs.length) { return getAxisFromDataset(id, "x", boundDs[0]) || getAxisFromDataset(id, "y", boundDs[0]); } } return {}; } function mergeScaleConfig(config, options) { const chartDefaults = overrides[config.type] || { scales: {} }; const configScales = options.scales || {}; const chartIndexAxis = getIndexAxis(config.type, options); const scales = /* @__PURE__ */ Object.create(null); Object.keys(configScales).forEach((id) => { const scaleConf = configScales[id]; if (!isObject(scaleConf)) { return console.error(`Invalid scale configuration for scale: ${id}`); } if (scaleConf._proxy) { return console.warn(`Ignoring resolver passed as options for scale: ${id}`); } const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]); const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis); const defaultScaleOptions = chartDefaults.scales || {}; scales[id] = mergeIf(/* @__PURE__ */ Object.create(null), [ { axis }, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId] ]); }); config.data.datasets.forEach((dataset) => { const type = dataset.type || config.type; const indexAxis = dataset.indexAxis || getIndexAxis(type, options); const datasetDefaults = overrides[type] || {}; const defaultScaleOptions = datasetDefaults.scales || {}; Object.keys(defaultScaleOptions).forEach((defaultID) => { const axis = getAxisFromDefaultScaleID(defaultID, indexAxis); const id = dataset[axis + "AxisID"] || axis; scales[id] = scales[id] || /* @__PURE__ */ Object.create(null); mergeIf(scales[id], [ { axis }, configScales[id], defaultScaleOptions[defaultID] ]); }); }); Object.keys(scales).forEach((key) => { const scale = scales[key]; mergeIf(scale, [ defaults.scales[scale.type], defaults.scale ]); }); return scales; } function initOptions(config) { const options = config.options || (config.options = {}); options.plugins = valueOrDefault(options.plugins, {}); options.scales = mergeScaleConfig(config, options); } function initData(data) { data = data || {}; data.datasets = data.datasets || []; data.labels = data.labels || []; return data; } function initConfig(config) { config = config || {}; config.data = initData(config.data); initOptions(config); return config; } var keyCache = /* @__PURE__ */ new Map(); var keysCached = /* @__PURE__ */ new Set(); function cachedKeys(cacheKey, generate) { let keys = keyCache.get(cacheKey); if (!keys) { keys = generate(); keyCache.set(cacheKey, keys); keysCached.add(keys); } return keys; } var addIfFound = (set2, obj, key) => { const opts = resolveObjectKey(obj, key); if (opts !== void 0) { set2.add(opts); } }; var Config = class { constructor(config) { this._config = initConfig(config); this._scopeCache = /* @__PURE__ */ new Map(); this._resolverCache = /* @__PURE__ */ new Map(); } get platform() { return this._config.platform; } get type() { return this._config.type; } set type(type) { this._config.type = type; } get data() { return this._config.data; } set data(data) { this._config.data = initData(data); } get options() { return this._config.options; } set options(options) { this._config.options = options; } get plugins() { return this._config.plugins; } update() { const config = this._config; this.clearCache(); initOptions(config); } clearCache() { this._scopeCache.clear(); this._resolverCache.clear(); } datasetScopeKeys(datasetType) { return cachedKeys(datasetType, () => [ [ `datasets.${datasetType}`, "" ] ]); } datasetAnimationScopeKeys(datasetType, transition) { return cachedKeys(`${datasetType}.transition.${transition}`, () => [ [ `datasets.${datasetType}.transitions.${transition}`, `transitions.${transition}` ], [ `datasets.${datasetType}`, "" ] ]); } datasetElementScopeKeys(datasetType, elementType) { return cachedKeys(`${datasetType}-${elementType}`, () => [ [ `datasets.${datasetType}.elements.${elementType}`, `datasets.${datasetType}`, `elements.${elementType}`, "" ] ]); } pluginScopeKeys(plugin) { const id = plugin.id; const type = this.type; return cachedKeys(`${type}-plugin-${id}`, () => [ [ `plugins.${id}`, ...plugin.additionalOptionScopes || [] ] ]); } _cachedScopes(mainScope, resetCache) { const _scopeCache = this._scopeCache; let cache = _scopeCache.get(mainScope); if (!cache || resetCache) { cache = /* @__PURE__ */ new Map(); _scopeCache.set(mainScope, cache); } return cache; } getOptionScopes(mainScope, keyLists, resetCache) { const { options, type } = this; const cache = this._cachedScopes(mainScope, resetCache); const cached = cache.get(keyLists); if (cached) { return cached; } const scopes = /* @__PURE__ */ new Set(); keyLists.forEach((keys) => { if (mainScope) { scopes.add(mainScope); keys.forEach((key) => addIfFound(scopes, mainScope, key)); } keys.forEach((key) => addIfFound(scopes, options, key)); keys.forEach((key) => addIfFound(scopes, overrides[type] || {}, key)); keys.forEach((key) => addIfFound(scopes, defaults, key)); keys.forEach((key) => addIfFound(scopes, descriptors, key)); }); const array = Array.from(scopes); if (array.length === 0) { array.push(/* @__PURE__ */ Object.create(null)); } if (keysCached.has(keyLists)) { cache.set(keyLists, array); } return array; } chartOptionScopes() { const { options, type } = this; return [ options, overrides[type] || {}, defaults.datasets[type] || {}, { type }, defaults, descriptors ]; } resolveNamedOptions(scopes, names2, context, prefixes = [ "" ]) { const result = { $shared: true }; const { resolver, subPrefixes } = getResolver(this._resolverCache, scopes, prefixes); let options = resolver; if (needContext(resolver, names2)) { result.$shared = false; context = isFunction(context) ? context() : context; const subResolver = this.createResolver(scopes, context, subPrefixes); options = _attachContext(resolver, context, subResolver); } for (const prop of names2) { result[prop] = options[prop]; } return result; } createResolver(scopes, context, prefixes = [ "" ], descriptorDefaults) { const { resolver } = getResolver(this._resolverCache, scopes, prefixes); return isObject(context) ? _attachContext(resolver, context, void 0, descriptorDefaults) : resolver; } }; function getResolver(resolverCache, scopes, prefixes) { let cache = resolverCache.get(scopes); if (!cache) { cache = /* @__PURE__ */ new Map(); resolverCache.set(scopes, cache); } const cacheKey = prefixes.join(); let cached = cache.get(cacheKey); if (!cached) { const resolver = _createResolver(scopes, prefixes); cached = { resolver, subPrefixes: prefixes.filter((p) => !p.toLowerCase().includes("hover")) }; cache.set(cacheKey, cached); } return cached; } var hasFunction = (value) => isObject(value) && Object.getOwnPropertyNames(value).reduce((acc, key) => acc || isFunction(value[key]), false); function needContext(proxy, names2) { const { isScriptable, isIndexable } = _descriptors(proxy); for (const prop of names2) { const scriptable = isScriptable(prop); const indexable = isIndexable(prop); const value = (indexable || scriptable) && proxy[prop]; if (scriptable && (isFunction(value) || hasFunction(value)) || indexable && isArray(value)) { return true; } } return false; } var version = "4.3.0"; var KNOWN_POSITIONS = [ "top", "bottom", "left", "right", "chartArea" ]; function positionIsHorizontal(position, axis) { return position === "top" || position === "bottom" || KNOWN_POSITIONS.indexOf(position) === -1 && axis === "x"; } function compare2Level(l1, l2) { return function(a, b) { return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1]; }; } function onAnimationsComplete(context) { const chart = context.chart; const animationOptions = chart.options.animation; chart.notifyPlugins("afterRender"); callback(animationOptions && animationOptions.onComplete, [ context ], chart); } function onAnimationProgress(context) { const chart = context.chart; const animationOptions = chart.options.animation; callback(animationOptions && animationOptions.onProgress, [ context ], chart); } function getCanvas(item) { if (_isDomSupported() && typeof item === "string") { item = document.getElementById(item); } else if (item && item.length) { item = item[0]; } if (item && item.canvas) { item = item.canvas; } return item; } var instances = {}; var getChart = (key) => { const canvas = getCanvas(key); return Object.values(instances).filter((c) => c.canvas === canvas).pop(); }; function moveNumericKeys(obj, start, move) { const keys = Object.keys(obj); for (const key of keys) { const intKey = +key; if (intKey >= start) { const value = obj[key]; delete obj[key]; if (move > 0 || intKey > start) { obj[intKey + move] = value; } } } } function determineLastEvent(e, lastEvent, inChartArea, isClick) { if (!inChartArea || e.type === "mouseout") { return null; } if (isClick) { return lastEvent; } return e; } function getDatasetArea(meta) { const { xScale, yScale } = meta; if (xScale && yScale) { return { left: xScale.left, right: xScale.right, top: yScale.top, bottom: yScale.bottom }; } } var Chart = class { static register(...items) { registry.add(...items); invalidatePlugins(); } static unregister(...items) { registry.remove(...items); invalidatePlugins(); } constructor(item, userConfig) { const config = this.config = new Config(userConfig); const initialCanvas = getCanvas(item); const existingChart = getChart(initialCanvas); if (existingChart) { throw new Error("Canvas is already in use. Chart with ID '" + existingChart.id + "' must be destroyed before the canvas with ID '" + existingChart.canvas.id + "' can be reused."); } const options = config.createResolver(config.chartOptionScopes(), this.getContext()); this.platform = new (config.platform || _detectPlatform(initialCanvas))(); this.platform.updateConfig(config); const context = this.platform.acquireContext(initialCanvas, options.aspectRatio); const canvas = context && context.canvas; const height = canvas && canvas.height; const width = canvas && canvas.width; this.id = uid(); this.ctx = context; this.canvas = canvas; this.width = width; this.height = height; this._options = options; this._aspectRatio = this.aspectRatio; this._layers = []; this._metasets = []; this._stacks = void 0; this.boxes = []; this.currentDevicePixelRatio = void 0; this.chartArea = void 0; this._active = []; this._lastEvent = void 0; this._listeners = {}; this._responsiveListeners = void 0; this._sortedMetasets = []; this.scales = {}; this._plugins = new PluginService(); this.$proxies = {}; this._hiddenIndices = {}; this.attached = false; this._animationsDisabled = void 0; this.$context = void 0; this._doResize = debounce((mode) => this.update(mode), options.resizeDelay || 0); this._dataChanges = []; instances[this.id] = this; if (!context || !canvas) { console.error("Failed to create chart: can't acquire context from the given item"); return; } animator.listen(this, "complete", onAnimationsComplete); animator.listen(this, "progress", onAnimationProgress); this._initialize(); if (this.attached) { this.update(); } } get aspectRatio() { const { options: { aspectRatio, maintainAspectRatio }, width, height, _aspectRatio } = this; if (!isNullOrUndef(aspectRatio)) { return aspectRatio; } if (maintainAspectRatio && _aspectRatio) { return _aspectRatio; } return height ? width / height : null; } get data() { return this.config.data; } set data(data) { this.config.data = data; } get options() { return this._options; } set options(options) { this.config.options = options; } get registry() { return registry; } _initialize() { this.notifyPlugins("beforeInit"); if (this.options.responsive) { this.resize(); } else { retinaScale(this, this.options.devicePixelRatio); } this.bindEvents(); this.notifyPlugins("afterInit"); return this; } clear() { clearCanvas(this.canvas, this.ctx); return this; } stop() { animator.stop(this); return this; } resize(width, height) { if (!animator.running(this)) { this._resize(width, height); } else { this._resizeBeforeDraw = { width, height }; } } _resize(width, height) { const options = this.options; const canvas = this.canvas; const aspectRatio = options.maintainAspectRatio && this.aspectRatio; const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio); const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio(); const mode = this.width ? "resize" : "attach"; this.width = newSize.width; this.height = newSize.height; this._aspectRatio = this.aspectRatio; if (!retinaScale(this, newRatio, true)) { return; } this.notifyPlugins("resize", { size: newSize }); callback(options.onResize, [ this, newSize ], this); if (this.attached) { if (this._doResize(mode)) { this.render(); } } } ensureScalesHaveIDs() { const options = this.options; const scalesOptions = options.scales || {}; each(scalesOptions, (axisOptions, axisID) => { axisOptions.id = axisID; }); } buildOrUpdateScales() { const options = this.options; const scaleOpts = options.scales; const scales = this.scales; const updated = Object.keys(scales).reduce((obj, id) => { obj[id] = false; return obj; }, {}); let items = []; if (scaleOpts) { items = items.concat(Object.keys(scaleOpts).map((id) => { const scaleOptions = scaleOpts[id]; const axis = determineAxis(id, scaleOptions); const isRadial = axis === "r"; const isHorizontal = axis === "x"; return { options: scaleOptions, dposition: isRadial ? "chartArea" : isHorizontal ? "bottom" : "left", dtype: isRadial ? "radialLinear" : isHorizontal ? "category" : "linear" }; })); } each(items, (item) => { const scaleOptions = item.options; const id = scaleOptions.id; const axis = determineAxis(id, scaleOptions); const scaleType = valueOrDefault(scaleOptions.type, item.dtype); if (scaleOptions.position === void 0 || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) { scaleOptions.position = item.dposition; } updated[id] = true; let scale = null; if (id in scales && scales[id].type === scaleType) { scale = scales[id]; } else { const scaleClass = registry.getScale(scaleType); scale = new scaleClass({ id, type: scaleType, ctx: this.ctx, chart: this }); scales[scale.id] = scale; } scale.init(scaleOptions, options); }); each(updated, (hasUpdated, id) => { if (!hasUpdated) { delete scales[id]; } }); each(scales, (scale) => { layouts.configure(this, scale, scale.options); layouts.addBox(this, scale); }); } _updateMetasets() { const metasets = this._metasets; const numData = this.data.datasets.length; const numMeta = metasets.length; metasets.sort((a, b) => a.index - b.index); if (numMeta > numData) { for (let i = numData; i < numMeta; ++i) { this._destroyDatasetMeta(i); } metasets.splice(numData, numMeta - numData); } this._sortedMetasets = metasets.slice(0).sort(compare2Level("order", "index")); } _removeUnreferencedMetasets() { const { _metasets: metasets, data: { datasets } } = this; if (metasets.length > datasets.length) { delete this._stacks; } metasets.forEach((meta, index) => { if (datasets.filter((x) => x === meta._dataset).length === 0) { this._destroyDatasetMeta(index); } }); } buildOrUpdateControllers() { const newControllers = []; const datasets = this.data.datasets; let i, ilen; this._removeUnreferencedMetasets(); for (i = 0, ilen = datasets.length; i < ilen; i++) { const dataset = datasets[i]; let meta = this.getDatasetMeta(i); const type = dataset.type || this.config.type; if (meta.type && meta.type !== type) { this._destroyDatasetMeta(i); meta = this.getDatasetMeta(i); } meta.type = type; meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options); meta.order = dataset.order || 0; meta.index = i; meta.label = "" + dataset.label; meta.visible = this.isDatasetVisible(i); if (meta.controller) { meta.controller.updateIndex(i); meta.controller.linkScales(); } else { const ControllerClass = registry.getController(type); const { datasetElementType, dataElementType } = defaults.datasets[type]; Object.assign(ControllerClass, { dataElementType: registry.getElement(dataElementType), datasetElementType: datasetElementType && registry.getElement(datasetElementType) }); meta.controller = new ControllerClass(this, i); newControllers.push(meta.controller); } } this._updateMetasets(); return newControllers; } _resetElements() { each(this.data.datasets, (dataset, datasetIndex) => { this.getDatasetMeta(datasetIndex).controller.reset(); }, this); } reset() { this._resetElements(); this.notifyPlugins("reset"); } update(mode) { const config = this.config; config.update(); const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext()); const animsDisabled = this._animationsDisabled = !options.animation; this._updateScales(); this._checkEventBindings(); this._updateHiddenIndices(); this._plugins.invalidate(); if (this.notifyPlugins("beforeUpdate", { mode, cancelable: true }) === false) { return; } const newControllers = this.buildOrUpdateControllers(); this.notifyPlugins("beforeElementsUpdate"); let minPadding = 0; for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) { const { controller } = this.getDatasetMeta(i); const reset2 = !animsDisabled && newControllers.indexOf(controller) === -1; controller.buildOrUpdateElements(reset2); minPadding = Math.max(+controller.getMaxOverflow(), minPadding); } minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0; this._updateLayout(minPadding); if (!animsDisabled) { each(newControllers, (controller) => { controller.reset(); }); } this._updateDatasets(mode); this.notifyPlugins("afterUpdate", { mode }); this._layers.sort(compare2Level("z", "_idx")); const { _active, _lastEvent } = this; if (_lastEvent) { this._eventHandler(_lastEvent, true); } else if (_active.length) { this._updateHoverStyles(_active, _active, true); } this.render(); } _updateScales() { each(this.scales, (scale) => { layouts.removeBox(this, scale); }); this.ensureScalesHaveIDs(); this.buildOrUpdateScales(); } _checkEventBindings() { const options = this.options; const existingEvents = new Set(Object.keys(this._listeners)); const newEvents = new Set(options.events); if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) { this.unbindEvents(); this.bindEvents(); } } _updateHiddenIndices() { const { _hiddenIndices } = this; const changes = this._getUniformDataChanges() || []; for (const { method, start, count } of changes) { const move = method === "_removeElements" ? -count : count; moveNumericKeys(_hiddenIndices, start, move); } } _getUniformDataChanges() { const _dataChanges = this._dataChanges; if (!_dataChanges || !_dataChanges.length) { return; } this._dataChanges = []; const datasetCount = this.data.datasets.length; const makeSet = (idx) => new Set(_dataChanges.filter((c) => c[0] === idx).map((c, i) => i + "," + c.splice(1).join(","))); const changeSet = makeSet(0); for (let i = 1; i < datasetCount; i++) { if (!setsEqual(changeSet, makeSet(i))) { return; } } return Array.from(changeSet).map((c) => c.split(",")).map((a) => ({ method: a[1], start: +a[2], count: +a[3] })); } _updateLayout(minPadding) { if (this.notifyPlugins("beforeLayout", { cancelable: true }) === false) { return; } layouts.update(this, this.width, this.height, minPadding); const area = this.chartArea; const noArea = area.width <= 0 || area.height <= 0; this._layers = []; each(this.boxes, (box) => { if (noArea && box.position === "chartArea") { return; } if (box.configure) { box.configure(); } this._layers.push(...box._layers()); }, this); this._layers.forEach((item, index) => { item._idx = index; }); this.notifyPlugins("afterLayout"); } _updateDatasets(mode) { if (this.notifyPlugins("beforeDatasetsUpdate", { mode, cancelable: true }) === false) { return; } for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) { this.getDatasetMeta(i).controller.configure(); } for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) { this._updateDataset(i, isFunction(mode) ? mode({ datasetIndex: i }) : mode); } this.notifyPlugins("afterDatasetsUpdate", { mode }); } _updateDataset(index, mode) { const meta = this.getDatasetMeta(index); const args = { meta, index, mode, cancelable: true }; if (this.notifyPlugins("beforeDatasetUpdate", args) === false) { return; } meta.controller._update(mode); args.cancelable = false; this.notifyPlugins("afterDatasetUpdate", args); } render() { if (this.notifyPlugins("beforeRender", { cancelable: true }) === false) { return; } if (animator.has(this)) { if (this.attached && !animator.running(this)) { animator.start(this); } } else { this.draw(); onAnimationsComplete({ chart: this }); } } draw() { let i; if (this._resizeBeforeDraw) { const { width, height } = this._resizeBeforeDraw; this._resize(width, height); this._resizeBeforeDraw = null; } this.clear(); if (this.width <= 0 || this.height <= 0) { return; } if (this.notifyPlugins("beforeDraw", { cancelable: true }) === false) { return; } const layers = this._layers; for (i = 0; i < layers.length && layers[i].z <= 0; ++i) { layers[i].draw(this.chartArea); } this._drawDatasets(); for (; i < layers.length; ++i) { layers[i].draw(this.chartArea); } this.notifyPlugins("afterDraw"); } _getSortedDatasetMetas(filterVisible) { const metasets = this._sortedMetasets; const result = []; let i, ilen; for (i = 0, ilen = metasets.length; i < ilen; ++i) { const meta = metasets[i]; if (!filterVisible || meta.visible) { result.push(meta); } } return result; } getSortedVisibleDatasetMetas() { return this._getSortedDatasetMetas(true); } _drawDatasets() { if (this.notifyPlugins("beforeDatasetsDraw", { cancelable: true }) === false) { return; } const metasets = this.getSortedVisibleDatasetMetas(); for (let i = metasets.length - 1; i >= 0; --i) { this._drawDataset(metasets[i]); } this.notifyPlugins("afterDatasetsDraw"); } _drawDataset(meta) { const ctx = this.ctx; const clip = meta._clip; const useClip = !clip.disabled; const area = getDatasetArea(meta) || this.chartArea; const args = { meta, index: meta.index, cancelable: true }; if (this.notifyPlugins("beforeDatasetDraw", args) === false) { return; } if (useClip) { clipArea(ctx, { left: clip.left === false ? 0 : area.left - clip.left, right: clip.right === false ? this.width : area.right + clip.right, top: clip.top === false ? 0 : area.top - clip.top, bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom }); } meta.controller.draw(); if (useClip) { unclipArea(ctx); } args.cancelable = false; this.notifyPlugins("afterDatasetDraw", args); } isPointInArea(point) { return _isPointInArea(point, this.chartArea, this._minPadding); } getElementsAtEventForMode(e, mode, options, useFinalPosition) { const method = Interaction.modes[mode]; if (typeof method === "function") { return method(this, e, options, useFinalPosition); } return []; } getDatasetMeta(datasetIndex) { const dataset = this.data.datasets[datasetIndex]; const metasets = this._metasets; let meta = metasets.filter((x) => x && x._dataset === dataset).pop(); if (!meta) { meta = { type: null, data: [], dataset: null, controller: null, hidden: null, xAxisID: null, yAxisID: null, order: dataset && dataset.order || 0, index: datasetIndex, _dataset: dataset, _parsed: [], _sorted: false }; metasets.push(meta); } return meta; } getContext() { return this.$context || (this.$context = createContext(null, { chart: this, type: "chart" })); } getVisibleDatasetCount() { return this.getSortedVisibleDatasetMetas().length; } isDatasetVisible(datasetIndex) { const dataset = this.data.datasets[datasetIndex]; if (!dataset) { return false; } const meta = this.getDatasetMeta(datasetIndex); return typeof meta.hidden === "boolean" ? !meta.hidden : !dataset.hidden; } setDatasetVisibility(datasetIndex, visible) { const meta = this.getDatasetMeta(datasetIndex); meta.hidden = !visible; } toggleDataVisibility(index) { this._hiddenIndices[index] = !this._hiddenIndices[index]; } getDataVisibility(index) { return !this._hiddenIndices[index]; } _updateVisibility(datasetIndex, dataIndex, visible) { const mode = visible ? "show" : "hide"; const meta = this.getDatasetMeta(datasetIndex); const anims = meta.controller._resolveAnimations(void 0, mode); if (defined(dataIndex)) { meta.data[dataIndex].hidden = !visible; this.update(); } else { this.setDatasetVisibility(datasetIndex, visible); anims.update(meta, { visible }); this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : void 0); } } hide(datasetIndex, dataIndex) { this._updateVisibility(datasetIndex, dataIndex, false); } show(datasetIndex, dataIndex) { this._updateVisibility(datasetIndex, dataIndex, true); } _destroyDatasetMeta(datasetIndex) { const meta = this._metasets[datasetIndex]; if (meta && meta.controller) { meta.controller._destroy(); } delete this._metasets[datasetIndex]; } _stop() { let i, ilen; this.stop(); animator.remove(this); for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) { this._destroyDatasetMeta(i); } } destroy() { this.notifyPlugins("beforeDestroy"); const { canvas, ctx } = this; this._stop(); this.config.clearCache(); if (canvas) { this.unbindEvents(); clearCanvas(canvas, ctx); this.platform.releaseContext(ctx); this.canvas = null; this.ctx = null; } delete instances[this.id]; this.notifyPlugins("afterDestroy"); } toBase64Image(...args) { return this.canvas.toDataURL(...args); } bindEvents() { this.bindUserEvents(); if (this.options.responsive) { this.bindResponsiveEvents(); } else { this.attached = true; } } bindUserEvents() { const listeners = this._listeners; const platform = this.platform; const _add = (type, listener2) => { platform.addEventListener(this, type, listener2); listeners[type] = listener2; }; const listener = (e, x, y) => { e.offsetX = x; e.offsetY = y; this._eventHandler(e); }; each(this.options.events, (type) => _add(type, listener)); } bindResponsiveEvents() { if (!this._responsiveListeners) { this._responsiveListeners = {}; } const listeners = this._responsiveListeners; const platform = this.platform; const _add = (type, listener2) => { platform.addEventListener(this, type, listener2); listeners[type] = listener2; }; const _remove = (type, listener2) => { if (listeners[type]) { platform.removeEventListener(this, type, listener2); delete listeners[type]; } }; const listener = (width, height) => { if (this.canvas) { this.resize(width, height); } }; let detached; const attached = () => { _remove("attach", attached); this.attached = true; this.resize(); _add("resize", listener); _add("detach", detached); }; detached = () => { this.attached = false; _remove("resize", listener); this._stop(); this._resize(0, 0); _add("attach", attached); }; if (platform.isAttached(this.canvas)) { attached(); } else { detached(); } } unbindEvents() { each(this._listeners, (listener, type) => { this.platform.removeEventListener(this, type, listener); }); this._listeners = {}; each(this._responsiveListeners, (listener, type) => { this.platform.removeEventListener(this, type, listener); }); this._responsiveListeners = void 0; } updateHoverStyle(items, mode, enabled) { const prefix = enabled ? "set" : "remove"; let meta, item, i, ilen; if (mode === "dataset") { meta = this.getDatasetMeta(items[0].datasetIndex); meta.controller["_" + prefix + "DatasetHoverStyle"](); } for (i = 0, ilen = items.length; i < ilen; ++i) { item = items[i]; const controller = item && this.getDatasetMeta(item.datasetIndex).controller; if (controller) { controller[prefix + "HoverStyle"](item.element, item.datasetIndex, item.index); } } } getActiveElements() { return this._active || []; } setActiveElements(activeElements) { const lastActive = this._active || []; const active = activeElements.map(({ datasetIndex, index }) => { const meta = this.getDatasetMeta(datasetIndex); if (!meta) { throw new Error("No dataset found at index " + datasetIndex); } return { datasetIndex, element: meta.data[index], index }; }); const changed = !_elementsEqual(active, lastActive); if (changed) { this._active = active; this._lastEvent = null; this._updateHoverStyles(active, lastActive); } } notifyPlugins(hook, args, filter) { return this._plugins.notify(this, hook, args, filter); } isPluginEnabled(pluginId) { return this._plugins._cache.filter((p) => p.plugin.id === pluginId).length === 1; } _updateHoverStyles(active, lastActive, replay) { const hoverOptions = this.options.hover; const diff = (a, b) => a.filter((x) => !b.some((y) => x.datasetIndex === y.datasetIndex && x.index === y.index)); const deactivated = diff(lastActive, active); const activated = replay ? active : diff(active, lastActive); if (deactivated.length) { this.updateHoverStyle(deactivated, hoverOptions.mode, false); } if (activated.length && hoverOptions.mode) { this.updateHoverStyle(activated, hoverOptions.mode, true); } } _eventHandler(e, replay) { const args = { event: e, replay, cancelable: true, inChartArea: this.isPointInArea(e) }; const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type); if (this.notifyPlugins("beforeEvent", args, eventFilter) === false) { return; } const changed = this._handleEvent(e, replay, args.inChartArea); args.cancelable = false; this.notifyPlugins("afterEvent", args, eventFilter); if (changed || args.changed) { this.render(); } return this; } _handleEvent(e, replay, inChartArea) { const { _active: lastActive = [], options } = this; const useFinalPosition = replay; const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition); const isClick = _isClickEvent(e); const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick); if (inChartArea) { this._lastEvent = null; callback(options.onHover, [ e, active, this ], this); if (isClick) { callback(options.onClick, [ e, active, this ], this); } } const changed = !_elementsEqual(active, lastActive); if (changed || replay) { this._active = active; this._updateHoverStyles(active, lastActive, replay); } this._lastEvent = lastEvent; return changed; } _getActiveElements(e, lastActive, inChartArea, useFinalPosition) { if (e.type === "mouseout") { return []; } if (!inChartArea) { return lastActive; } const hoverOptions = this.options.hover; return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition); } }; __publicField(Chart, "defaults", defaults); __publicField(Chart, "instances", instances); __publicField(Chart, "overrides", overrides); __publicField(Chart, "registry", registry); __publicField(Chart, "version", version); __publicField(Chart, "getChart", getChart); function invalidatePlugins() { return each(Chart.instances, (chart) => chart._plugins.invalidate()); } function clipArc(ctx, element, endAngle) { const { startAngle, pixelMargin, x, y, outerRadius, innerRadius } = element; let angleMargin = pixelMargin / outerRadius; ctx.beginPath(); ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin); if (innerRadius > pixelMargin) { angleMargin = pixelMargin / innerRadius; ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true); } else { ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI); } ctx.closePath(); ctx.clip(); } function toRadiusCorners(value) { return _readValueToProps(value, [ "outerStart", "outerEnd", "innerStart", "innerEnd" ]); } function parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) { const o = toRadiusCorners(arc.options.borderRadius); const halfThickness = (outerRadius - innerRadius) / 2; const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2); const computeOuterLimit = (val) => { const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2; return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit)); }; return { outerStart: computeOuterLimit(o.outerStart), outerEnd: computeOuterLimit(o.outerEnd), innerStart: _limitValue(o.innerStart, 0, innerLimit), innerEnd: _limitValue(o.innerEnd, 0, innerLimit) }; } function rThetaToXY(r, theta, x, y) { return { x: x + r * Math.cos(theta), y: y + r * Math.sin(theta) }; } function pathArc(ctx, element, offset, spacing, end, circular) { const { x, y, startAngle: start, pixelMargin, innerRadius: innerR } = element; const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0); const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0; let spacingOffset = 0; const alpha2 = end - start; if (spacing) { const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0; const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0; const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2; const adjustedAngle = avNogSpacingRadius !== 0 ? alpha2 * avNogSpacingRadius / (avNogSpacingRadius + spacing) : alpha2; spacingOffset = (alpha2 - adjustedAngle) / 2; } const beta = Math.max(1e-3, alpha2 * outerRadius - offset / PI) / outerRadius; const angleOffset = (alpha2 - beta) / 2; const startAngle = start + angleOffset + spacingOffset; const endAngle = end - angleOffset - spacingOffset; const { outerStart, outerEnd, innerStart, innerEnd } = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle); const outerStartAdjustedRadius = outerRadius - outerStart; const outerEndAdjustedRadius = outerRadius - outerEnd; const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius; const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius; const innerStartAdjustedRadius = innerRadius + innerStart; const innerEndAdjustedRadius = innerRadius + innerEnd; const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius; const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius; ctx.beginPath(); if (circular) { const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2; ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle); ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle); if (outerEnd > 0) { const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y); ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI); } const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y); ctx.lineTo(p4.x, p4.y); if (innerEnd > 0) { const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y); ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI); } const innerMidAdjustedAngle = (endAngle - innerEnd / innerRadius + (startAngle + innerStart / innerRadius)) / 2; ctx.arc(x, y, innerRadius, endAngle - innerEnd / innerRadius, innerMidAdjustedAngle, true); ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + innerStart / innerRadius, true); if (innerStart > 0) { const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y); ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI); } const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y); ctx.lineTo(p8.x, p8.y); if (outerStart > 0) { const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y); ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle); } } else { ctx.moveTo(x, y); const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x; const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y; ctx.lineTo(outerStartX, outerStartY); const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x; const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y; ctx.lineTo(outerEndX, outerEndY); } ctx.closePath(); } function drawArc(ctx, element, offset, spacing, circular) { const { fullCircles, startAngle, circumference } = element; let endAngle = element.endAngle; if (fullCircles) { pathArc(ctx, element, offset, spacing, endAngle, circular); for (let i = 0; i < fullCircles; ++i) { ctx.fill(); } if (!isNaN(circumference)) { endAngle = startAngle + (circumference % TAU || TAU); } } pathArc(ctx, element, offset, spacing, endAngle, circular); ctx.fill(); return endAngle; } function drawBorder(ctx, element, offset, spacing, circular) { const { fullCircles, startAngle, circumference, options } = element; const { borderWidth, borderJoinStyle, borderDash, borderDashOffset } = options; const inner = options.borderAlign === "inner"; if (!borderWidth) { return; } ctx.setLineDash(borderDash || []); ctx.lineDashOffset = borderDashOffset; if (inner) { ctx.lineWidth = borderWidth * 2; ctx.lineJoin = borderJoinStyle || "round"; } else { ctx.lineWidth = borderWidth; ctx.lineJoin = borderJoinStyle || "bevel"; } let endAngle = element.endAngle; if (fullCircles) { pathArc(ctx, element, offset, spacing, endAngle, circular); for (let i = 0; i < fullCircles; ++i) { ctx.stroke(); } if (!isNaN(circumference)) { endAngle = startAngle + (circumference % TAU || TAU); } } if (inner) { clipArc(ctx, element, endAngle); } if (!fullCircles) { pathArc(ctx, element, offset, spacing, endAngle, circular); ctx.stroke(); } } var ArcElement = class extends Element { constructor(cfg) { super(); __publicField(this, "circumference"); __publicField(this, "endAngle"); __publicField(this, "fullCircles"); __publicField(this, "innerRadius"); __publicField(this, "outerRadius"); __publicField(this, "pixelMargin"); __publicField(this, "startAngle"); this.options = void 0; this.circumference = void 0; this.startAngle = void 0; this.endAngle = void 0; this.innerRadius = void 0; this.outerRadius = void 0; this.pixelMargin = 0; this.fullCircles = 0; if (cfg) { Object.assign(this, cfg); } } inRange(chartX, chartY, useFinalPosition) { const point = this.getProps([ "x", "y" ], useFinalPosition); const { angle, distance } = getAngleFromPoint(point, { x: chartX, y: chartY }); const { startAngle, endAngle, innerRadius, outerRadius, circumference } = this.getProps([ "startAngle", "endAngle", "innerRadius", "outerRadius", "circumference" ], useFinalPosition); const rAdjust = (this.options.spacing + this.options.borderWidth) / 2; const _circumference = valueOrDefault(circumference, endAngle - startAngle); const betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle); const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust); return betweenAngles && withinRadius; } getCenterPoint(useFinalPosition) { const { x, y, startAngle, endAngle, innerRadius, outerRadius } = this.getProps([ "x", "y", "startAngle", "endAngle", "innerRadius", "outerRadius" ], useFinalPosition); const { offset, spacing } = this.options; const halfAngle = (startAngle + endAngle) / 2; const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2; return { x: x + Math.cos(halfAngle) * halfRadius, y: y + Math.sin(halfAngle) * halfRadius }; } tooltipPosition(useFinalPosition) { return this.getCenterPoint(useFinalPosition); } draw(ctx) { const { options, circumference } = this; const offset = (options.offset || 0) / 4; const spacing = (options.spacing || 0) / 2; const circular = options.circular; this.pixelMargin = options.borderAlign === "inner" ? 0.33 : 0; this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0; if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) { return; } ctx.save(); const halfAngle = (this.startAngle + this.endAngle) / 2; ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset); const fix = 1 - Math.sin(Math.min(PI, circumference || 0)); const radiusOffset = offset * fix; ctx.fillStyle = options.backgroundColor; ctx.strokeStyle = options.borderColor; drawArc(ctx, this, radiusOffset, spacing, circular); drawBorder(ctx, this, radiusOffset, spacing, circular); ctx.restore(); } }; __publicField(ArcElement, "id", "arc"); __publicField(ArcElement, "defaults", { borderAlign: "center", borderColor: "#fff", borderDash: [], borderDashOffset: 0, borderJoinStyle: void 0, borderRadius: 0, borderWidth: 2, offset: 0, spacing: 0, angle: void 0, circular: true }); __publicField(ArcElement, "defaultRoutes", { backgroundColor: "backgroundColor" }); __publicField(ArcElement, "descriptors", { _scriptable: true, _indexable: (name) => name !== "borderDash" }); function getBarBounds(bar, useFinalPosition) { const { x, y, base, width, height } = bar.getProps([ "x", "y", "base", "width", "height" ], useFinalPosition); let left, right, top, bottom, half; if (bar.horizontal) { half = height / 2; left = Math.min(x, base); right = Math.max(x, base); top = y - half; bottom = y + half; } else { half = width / 2; left = x - half; right = x + half; top = Math.min(y, base); bottom = Math.max(y, base); } return { left, top, right, bottom }; } function skipOrLimit(skip2, value, min, max) { return skip2 ? 0 : _limitValue(value, min, max); } function parseBorderWidth(bar, maxW, maxH) { const value = bar.options.borderWidth; const skip2 = bar.borderSkipped; const o = toTRBL(value); return { t: skipOrLimit(skip2.top, o.top, 0, maxH), r: skipOrLimit(skip2.right, o.right, 0, maxW), b: skipOrLimit(skip2.bottom, o.bottom, 0, maxH), l: skipOrLimit(skip2.left, o.left, 0, maxW) }; } function parseBorderRadius(bar, maxW, maxH) { const { enableBorderRadius } = bar.getProps([ "enableBorderRadius" ]); const value = bar.options.borderRadius; const o = toTRBLCorners(value); const maxR = Math.min(maxW, maxH); const skip2 = bar.borderSkipped; const enableBorder = enableBorderRadius || isObject(value); return { topLeft: skipOrLimit(!enableBorder || skip2.top || skip2.left, o.topLeft, 0, maxR), topRight: skipOrLimit(!enableBorder || skip2.top || skip2.right, o.topRight, 0, maxR), bottomLeft: skipOrLimit(!enableBorder || skip2.bottom || skip2.left, o.bottomLeft, 0, maxR), bottomRight: skipOrLimit(!enableBorder || skip2.bottom || skip2.right, o.bottomRight, 0, maxR) }; } function boundingRects(bar) { const bounds = getBarBounds(bar); const width = bounds.right - bounds.left; const height = bounds.bottom - bounds.top; const border = parseBorderWidth(bar, width / 2, height / 2); const radius = parseBorderRadius(bar, width / 2, height / 2); return { outer: { x: bounds.left, y: bounds.top, w: width, h: height, radius }, inner: { x: bounds.left + border.l, y: bounds.top + border.t, w: width - border.l - border.r, h: height - border.t - border.b, radius: { topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)), topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)), bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)), bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)) } } }; } function inRange(bar, x, y, useFinalPosition) { const skipX = x === null; const skipY = y === null; const skipBoth = skipX && skipY; const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition); return bounds && (skipX || _isBetween(x, bounds.left, bounds.right)) && (skipY || _isBetween(y, bounds.top, bounds.bottom)); } function hasRadius(radius) { return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight; } function addNormalRectPath(ctx, rect) { ctx.rect(rect.x, rect.y, rect.w, rect.h); } function inflateRect(rect, amount, refRect = {}) { const x = rect.x !== refRect.x ? -amount : 0; const y = rect.y !== refRect.y ? -amount : 0; const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x; const h4 = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y; return { x: rect.x + x, y: rect.y + y, w: rect.w + w, h: rect.h + h4, radius: rect.radius }; } var BarElement = class extends Element { constructor(cfg) { super(); this.options = void 0; this.horizontal = void 0; this.base = void 0; this.width = void 0; this.height = void 0; this.inflateAmount = void 0; if (cfg) { Object.assign(this, cfg); } } draw(ctx) { const { inflateAmount, options: { borderColor, backgroundColor } } = this; const { inner, outer } = boundingRects(this); const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath; ctx.save(); if (outer.w !== inner.w || outer.h !== inner.h) { ctx.beginPath(); addRectPath(ctx, inflateRect(outer, inflateAmount, inner)); ctx.clip(); addRectPath(ctx, inflateRect(inner, -inflateAmount, outer)); ctx.fillStyle = borderColor; ctx.fill("evenodd"); } ctx.beginPath(); addRectPath(ctx, inflateRect(inner, inflateAmount)); ctx.fillStyle = backgroundColor; ctx.fill(); ctx.restore(); } inRange(mouseX, mouseY, useFinalPosition) { return inRange(this, mouseX, mouseY, useFinalPosition); } inXRange(mouseX, useFinalPosition) { return inRange(this, mouseX, null, useFinalPosition); } inYRange(mouseY, useFinalPosition) { return inRange(this, null, mouseY, useFinalPosition); } getCenterPoint(useFinalPosition) { const { x, y, base, horizontal } = this.getProps([ "x", "y", "base", "horizontal" ], useFinalPosition); return { x: horizontal ? (x + base) / 2 : x, y: horizontal ? y : (y + base) / 2 }; } getRange(axis) { return axis === "x" ? this.width / 2 : this.height / 2; } }; __publicField(BarElement, "id", "bar"); __publicField(BarElement, "defaults", { borderSkipped: "start", borderWidth: 0, borderRadius: 0, inflateAmount: "auto", pointStyle: void 0 }); __publicField(BarElement, "defaultRoutes", { backgroundColor: "backgroundColor", borderColor: "borderColor" }); var getBoxSize = (labelOpts, fontSize) => { let { boxHeight = fontSize, boxWidth = fontSize } = labelOpts; if (labelOpts.usePointStyle) { boxHeight = Math.min(boxHeight, fontSize); boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize); } return { boxWidth, boxHeight, itemHeight: Math.max(fontSize, boxHeight) }; }; var itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index; var Legend = class extends Element { constructor(config) { super(); this._added = false; this.legendHitBoxes = []; this._hoveredItem = null; this.doughnutMode = false; this.chart = config.chart; this.options = config.options; this.ctx = config.ctx; this.legendItems = void 0; this.columnSizes = void 0; this.lineWidths = void 0; this.maxHeight = void 0; this.maxWidth = void 0; this.top = void 0; this.bottom = void 0; this.left = void 0; this.right = void 0; this.height = void 0; this.width = void 0; this._margins = void 0; this.position = void 0; this.weight = void 0; this.fullSize = void 0; } update(maxWidth, maxHeight, margins) { this.maxWidth = maxWidth; this.maxHeight = maxHeight; this._margins = margins; this.setDimensions(); this.buildLabels(); this.fit(); } setDimensions() { if (this.isHorizontal()) { this.width = this.maxWidth; this.left = this._margins.left; this.right = this.width; } else { this.height = this.maxHeight; this.top = this._margins.top; this.bottom = this.height; } } buildLabels() { const labelOpts = this.options.labels || {}; let legendItems = callback(labelOpts.generateLabels, [ this.chart ], this) || []; if (labelOpts.filter) { legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data)); } if (labelOpts.sort) { legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data)); } if (this.options.reverse) { legendItems.reverse(); } this.legendItems = legendItems; } fit() { const { options, ctx } = this; if (!options.display) { this.width = this.height = 0; return; } const labelOpts = options.labels; const labelFont = toFont(labelOpts.font); const fontSize = labelFont.size; const titleHeight = this._computeTitleHeight(); const { boxWidth, itemHeight } = getBoxSize(labelOpts, fontSize); let width, height; ctx.font = labelFont.string; if (this.isHorizontal()) { width = this.maxWidth; height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10; } else { height = this.maxHeight; width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10; } this.width = Math.min(width, options.maxWidth || this.maxWidth); this.height = Math.min(height, options.maxHeight || this.maxHeight); } _fitRows(titleHeight, fontSize, boxWidth, itemHeight) { const { ctx, maxWidth, options: { labels: { padding } } } = this; const hitboxes = this.legendHitBoxes = []; const lineWidths = this.lineWidths = [ 0 ]; const lineHeight = itemHeight + padding; let totalHeight = titleHeight; ctx.textAlign = "left"; ctx.textBaseline = "middle"; let row = -1; let top = -lineHeight; this.legendItems.forEach((legendItem, i) => { const itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width; if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) { totalHeight += lineHeight; lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0; top += lineHeight; row++; } hitboxes[i] = { left: 0, top, row, width: itemWidth, height: itemHeight }; lineWidths[lineWidths.length - 1] += itemWidth + padding; }); return totalHeight; } _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) { const { ctx, maxHeight, options: { labels: { padding } } } = this; const hitboxes = this.legendHitBoxes = []; const columnSizes = this.columnSizes = []; const heightLimit = maxHeight - titleHeight; let totalWidth = padding; let currentColWidth = 0; let currentColHeight = 0; let left = 0; let col = 0; this.legendItems.forEach((legendItem, i) => { const { itemWidth, itemHeight } = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight); if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) { totalWidth += currentColWidth + padding; columnSizes.push({ width: currentColWidth, height: currentColHeight }); left += currentColWidth + padding; col++; currentColWidth = currentColHeight = 0; } hitboxes[i] = { left, top: currentColHeight, col, width: itemWidth, height: itemHeight }; currentColWidth = Math.max(currentColWidth, itemWidth); currentColHeight += itemHeight + padding; }); totalWidth += currentColWidth; columnSizes.push({ width: currentColWidth, height: currentColHeight }); return totalWidth; } adjustHitBoxes() { if (!this.options.display) { return; } const titleHeight = this._computeTitleHeight(); const { legendHitBoxes: hitboxes, options: { align, labels: { padding }, rtl } } = this; const rtlHelper = getRtlAdapter(rtl, this.left, this.width); if (this.isHorizontal()) { let row = 0; let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]); for (const hitbox of hitboxes) { if (row !== hitbox.row) { row = hitbox.row; left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]); } hitbox.top += this.top + titleHeight + padding; hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width); left += hitbox.width + padding; } } else { let col = 0; let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height); for (const hitbox of hitboxes) { if (hitbox.col !== col) { col = hitbox.col; top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height); } hitbox.top = top; hitbox.left += this.left + padding; hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width); top += hitbox.height + padding; } } } isHorizontal() { return this.options.position === "top" || this.options.position === "bottom"; } draw() { if (this.options.display) { const ctx = this.ctx; clipArea(ctx, this); this._draw(); unclipArea(ctx); } } _draw() { const { options: opts, columnSizes, lineWidths, ctx } = this; const { align, labels: labelOpts } = opts; const defaultColor = defaults.color; const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width); const labelFont = toFont(labelOpts.font); const { padding } = labelOpts; const fontSize = labelFont.size; const halfFontSize = fontSize / 2; let cursor; this.drawTitle(); ctx.textAlign = rtlHelper.textAlign("left"); ctx.textBaseline = "middle"; ctx.lineWidth = 0.5; ctx.font = labelFont.string; const { boxWidth, boxHeight, itemHeight } = getBoxSize(labelOpts, fontSize); const drawLegendBox = function(x, y, legendItem) { if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) { return; } ctx.save(); const lineWidth = valueOrDefault(legendItem.lineWidth, 1); ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor); ctx.lineCap = valueOrDefault(legendItem.lineCap, "butt"); ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0); ctx.lineJoin = valueOrDefault(legendItem.lineJoin, "miter"); ctx.lineWidth = lineWidth; ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor); ctx.setLineDash(valueOrDefault(legendItem.lineDash, [])); if (labelOpts.usePointStyle) { const drawOptions = { radius: boxHeight * Math.SQRT2 / 2, pointStyle: legendItem.pointStyle, rotation: legendItem.rotation, borderWidth: lineWidth }; const centerX = rtlHelper.xPlus(x, boxWidth / 2); const centerY = y + halfFontSize; drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth); } else { const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0); const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth); const borderRadius = toTRBLCorners(legendItem.borderRadius); ctx.beginPath(); if (Object.values(borderRadius).some((v) => v !== 0)) { addRoundedRectPath(ctx, { x: xBoxLeft, y: yBoxTop, w: boxWidth, h: boxHeight, radius: borderRadius }); } else { ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight); } ctx.fill(); if (lineWidth !== 0) { ctx.stroke(); } } ctx.restore(); }; const fillText = function(x, y, legendItem) { renderText(ctx, legendItem.text, x, y + itemHeight / 2, labelFont, { strikethrough: legendItem.hidden, textAlign: rtlHelper.textAlign(legendItem.textAlign) }); }; const isHorizontal = this.isHorizontal(); const titleHeight = this._computeTitleHeight(); if (isHorizontal) { cursor = { x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]), y: this.top + padding + titleHeight, line: 0 }; } else { cursor = { x: this.left + padding, y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height), line: 0 }; } overrideTextDirection(this.ctx, opts.textDirection); const lineHeight = itemHeight + padding; this.legendItems.forEach((legendItem, i) => { ctx.strokeStyle = legendItem.fontColor; ctx.fillStyle = legendItem.fontColor; const textWidth = ctx.measureText(legendItem.text).width; const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign)); const width = boxWidth + halfFontSize + textWidth; let x = cursor.x; let y = cursor.y; rtlHelper.setWidth(this.width); if (isHorizontal) { if (i > 0 && x + width + padding > this.right) { y = cursor.y += lineHeight; cursor.line++; x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]); } } else if (i > 0 && y + lineHeight > this.bottom) { x = cursor.x = x + columnSizes[cursor.line].width + padding; cursor.line++; y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height); } const realX = rtlHelper.x(x); drawLegendBox(realX, y, legendItem); x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl); fillText(rtlHelper.x(x), y, legendItem); if (isHorizontal) { cursor.x += width + padding; } else if (typeof legendItem.text !== "string") { const fontLineHeight = labelFont.lineHeight; cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight); } else { cursor.y += lineHeight; } }); restoreTextDirection(this.ctx, opts.textDirection); } drawTitle() { const opts = this.options; const titleOpts = opts.title; const titleFont = toFont(titleOpts.font); const titlePadding = toPadding(titleOpts.padding); if (!titleOpts.display) { return; } const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width); const ctx = this.ctx; const position = titleOpts.position; const halfFontSize = titleFont.size / 2; const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize; let y; let left = this.left; let maxWidth = this.width; if (this.isHorizontal()) { maxWidth = Math.max(...this.lineWidths); y = this.top + topPaddingPlusHalfFontSize; left = _alignStartEnd(opts.align, left, this.right - maxWidth); } else { const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0); y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight()); } const x = _alignStartEnd(position, left, left + maxWidth); ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position)); ctx.textBaseline = "middle"; ctx.strokeStyle = titleOpts.color; ctx.fillStyle = titleOpts.color; ctx.font = titleFont.string; renderText(ctx, titleOpts.text, x, y, titleFont); } _computeTitleHeight() { const titleOpts = this.options.title; const titleFont = toFont(titleOpts.font); const titlePadding = toPadding(titleOpts.padding); return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0; } _getLegendItemAt(x, y) { let i, hitBox, lh; if (_isBetween(x, this.left, this.right) && _isBetween(y, this.top, this.bottom)) { lh = this.legendHitBoxes; for (i = 0; i < lh.length; ++i) { hitBox = lh[i]; if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width) && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) { return this.legendItems[i]; } } } return null; } handleEvent(e) { const opts = this.options; if (!isListened(e.type, opts)) { return; } const hoveredItem = this._getLegendItemAt(e.x, e.y); if (e.type === "mousemove" || e.type === "mouseout") { const previous = this._hoveredItem; const sameItem = itemsEqual(previous, hoveredItem); if (previous && !sameItem) { callback(opts.onLeave, [ e, previous, this ], this); } this._hoveredItem = hoveredItem; if (hoveredItem && !sameItem) { callback(opts.onHover, [ e, hoveredItem, this ], this); } } else if (hoveredItem) { callback(opts.onClick, [ e, hoveredItem, this ], this); } } }; function calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) { const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx); const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight); return { itemWidth, itemHeight }; } function calculateItemWidth(legendItem, boxWidth, labelFont, ctx) { let legendItemText = legendItem.text; if (legendItemText && typeof legendItemText !== "string") { legendItemText = legendItemText.reduce((a, b) => a.length > b.length ? a : b); } return boxWidth + labelFont.size / 2 + ctx.measureText(legendItemText).width; } function calculateItemHeight(_itemHeight, legendItem, fontLineHeight) { let itemHeight = _itemHeight; if (typeof legendItem.text !== "string") { itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight); } return itemHeight; } function calculateLegendItemHeight(legendItem, fontLineHeight) { const labelHeight = legendItem.text ? legendItem.text.length + 0.5 : 0; return fontLineHeight * labelHeight; } function isListened(type, opts) { if ((type === "mousemove" || type === "mouseout") && (opts.onHover || opts.onLeave)) { return true; } if (opts.onClick && (type === "click" || type === "mouseup")) { return true; } return false; } var plugin_legend = { id: "legend", _element: Legend, start(chart, _args, options) { const legend = chart.legend = new Legend({ ctx: chart.ctx, options, chart }); layouts.configure(chart, legend, options); layouts.addBox(chart, legend); }, stop(chart) { layouts.removeBox(chart, chart.legend); delete chart.legend; }, beforeUpdate(chart, _args, options) { const legend = chart.legend; layouts.configure(chart, legend, options); legend.options = options; }, afterUpdate(chart) { const legend = chart.legend; legend.buildLabels(); legend.adjustHitBoxes(); }, afterEvent(chart, args) { if (!args.replay) { chart.legend.handleEvent(args.event); } }, defaults: { display: true, position: "top", align: "center", fullSize: true, reverse: false, weight: 1e3, onClick(e, legendItem, legend) { const index = legendItem.datasetIndex; const ci = legend.chart; if (ci.isDatasetVisible(index)) { ci.hide(index); legendItem.hidden = true; } else { ci.show(index); legendItem.hidden = false; } }, onHover: null, onLeave: null, labels: { color: (ctx) => ctx.chart.options.color, boxWidth: 40, padding: 10, generateLabels(chart) { const datasets = chart.data.datasets; const { labels: { usePointStyle, pointStyle, textAlign, color: color2, useBorderRadius, borderRadius } } = chart.legend.options; return chart._getSortedDatasetMetas().map((meta) => { const style = meta.controller.getStyle(usePointStyle ? 0 : void 0); const borderWidth = toPadding(style.borderWidth); return { text: datasets[meta.index].label, fillStyle: style.backgroundColor, fontColor: color2, hidden: !meta.visible, lineCap: style.borderCapStyle, lineDash: style.borderDash, lineDashOffset: style.borderDashOffset, lineJoin: style.borderJoinStyle, lineWidth: (borderWidth.width + borderWidth.height) / 4, strokeStyle: style.borderColor, pointStyle: pointStyle || style.pointStyle, rotation: style.rotation, textAlign: textAlign || style.textAlign, borderRadius: useBorderRadius && (borderRadius || style.borderRadius), datasetIndex: meta.index }; }, this); } }, title: { color: (ctx) => ctx.chart.options.color, display: false, position: "center", text: "" } }, descriptors: { _scriptable: (name) => !name.startsWith("on"), labels: { _scriptable: (name) => ![ "generateLabels", "filter", "sort" ].includes(name) } } }; var Title = class extends Element { constructor(config) { super(); this.chart = config.chart; this.options = config.options; this.ctx = config.ctx; this._padding = void 0; this.top = void 0; this.bottom = void 0; this.left = void 0; this.right = void 0; this.width = void 0; this.height = void 0; this.position = void 0; this.weight = void 0; this.fullSize = void 0; } update(maxWidth, maxHeight) { const opts = this.options; this.left = 0; this.top = 0; if (!opts.display) { this.width = this.height = this.right = this.bottom = 0; return; } this.width = this.right = maxWidth; this.height = this.bottom = maxHeight; const lineCount = isArray(opts.text) ? opts.text.length : 1; this._padding = toPadding(opts.padding); const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height; if (this.isHorizontal()) { this.height = textSize; } else { this.width = textSize; } } isHorizontal() { const pos = this.options.position; return pos === "top" || pos === "bottom"; } _drawArgs(offset) { const { top, left, bottom, right, options } = this; const align = options.align; let rotation = 0; let maxWidth, titleX, titleY; if (this.isHorizontal()) { titleX = _alignStartEnd(align, left, right); titleY = top + offset; maxWidth = right - left; } else { if (options.position === "left") { titleX = left + offset; titleY = _alignStartEnd(align, bottom, top); rotation = PI * -0.5; } else { titleX = right - offset; titleY = _alignStartEnd(align, top, bottom); rotation = PI * 0.5; } maxWidth = bottom - top; } return { titleX, titleY, maxWidth, rotation }; } draw() { const ctx = this.ctx; const opts = this.options; if (!opts.display) { return; } const fontOpts = toFont(opts.font); const lineHeight = fontOpts.lineHeight; const offset = lineHeight / 2 + this._padding.top; const { titleX, titleY, maxWidth, rotation } = this._drawArgs(offset); renderText(ctx, opts.text, 0, 0, fontOpts, { color: opts.color, maxWidth, rotation, textAlign: _toLeftRightCenter(opts.align), textBaseline: "middle", translation: [ titleX, titleY ] }); } }; function createTitle(chart, titleOpts) { const title = new Title({ ctx: chart.ctx, options: titleOpts, chart }); layouts.configure(chart, title, titleOpts); layouts.addBox(chart, title); chart.titleBlock = title; } var plugin_title = { id: "title", _element: Title, start(chart, _args, options) { createTitle(chart, options); }, stop(chart) { const titleBlock = chart.titleBlock; layouts.removeBox(chart, titleBlock); delete chart.titleBlock; }, beforeUpdate(chart, _args, options) { const title = chart.titleBlock; layouts.configure(chart, title, options); title.options = options; }, defaults: { align: "center", display: false, font: { weight: "bold" }, fullSize: true, padding: 10, position: "top", text: "", weight: 2e3 }, defaultRoutes: { color: "color" }, descriptors: { _scriptable: true, _indexable: false } }; var map2 = /* @__PURE__ */ new WeakMap(); var plugin_subtitle = { id: "subtitle", start(chart, _args, options) { const title = new Title({ ctx: chart.ctx, options, chart }); layouts.configure(chart, title, options); layouts.addBox(chart, title); map2.set(chart, title); }, stop(chart) { layouts.removeBox(chart, map2.get(chart)); map2.delete(chart); }, beforeUpdate(chart, _args, options) { const title = map2.get(chart); layouts.configure(chart, title, options); title.options = options; }, defaults: { align: "center", display: false, font: { weight: "normal" }, fullSize: true, padding: 0, position: "top", text: "", weight: 1500 }, defaultRoutes: { color: "color" }, descriptors: { _scriptable: true, _indexable: false } }; var positioners = { average(items) { if (!items.length) { return false; } let i, len; let x = 0; let y = 0; let count = 0; for (i = 0, len = items.length; i < len; ++i) { const el = items[i].element; if (el && el.hasValue()) { const pos = el.tooltipPosition(); x += pos.x; y += pos.y; ++count; } } return { x: x / count, y: y / count }; }, nearest(items, eventPosition) { if (!items.length) { return false; } let x = eventPosition.x; let y = eventPosition.y; let minDistance = Number.POSITIVE_INFINITY; let i, len, nearestElement; for (i = 0, len = items.length; i < len; ++i) { const el = items[i].element; if (el && el.hasValue()) { const center = el.getCenterPoint(); const d = distanceBetweenPoints(eventPosition, center); if (d < minDistance) { minDistance = d; nearestElement = el; } } } if (nearestElement) { const tp = nearestElement.tooltipPosition(); x = tp.x; y = tp.y; } return { x, y }; } }; function pushOrConcat(base, toPush) { if (toPush) { if (isArray(toPush)) { Array.prototype.push.apply(base, toPush); } else { base.push(toPush); } } return base; } function splitNewlines(str) { if ((typeof str === "string" || str instanceof String) && str.indexOf("\n") > -1) { return str.split("\n"); } return str; } function createTooltipItem(chart, item) { const { element, datasetIndex, index } = item; const controller = chart.getDatasetMeta(datasetIndex).controller; const { label, value } = controller.getLabelAndValue(index); return { chart, label, parsed: controller.getParsed(index), raw: chart.data.datasets[datasetIndex].data[index], formattedValue: value, dataset: controller.getDataset(), dataIndex: index, datasetIndex, element }; } function getTooltipSize(tooltip, options) { const ctx = tooltip.chart.ctx; const { body, footer, title } = tooltip; const { boxWidth, boxHeight } = options; const bodyFont = toFont(options.bodyFont); const titleFont = toFont(options.titleFont); const footerFont = toFont(options.footerFont); const titleLineCount = title.length; const footerLineCount = footer.length; const bodyLineItemCount = body.length; const padding = toPadding(options.padding); let height = padding.height; let width = 0; let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0); combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length; if (titleLineCount) { height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom; } if (combinedBodyLength) { const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight; height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing; } if (footerLineCount) { height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing; } let widthPadding = 0; const maxLineWidth = function(line) { width = Math.max(width, ctx.measureText(line).width + widthPadding); }; ctx.save(); ctx.font = titleFont.string; each(tooltip.title, maxLineWidth); ctx.font = bodyFont.string; each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth); widthPadding = options.displayColors ? boxWidth + 2 + options.boxPadding : 0; each(body, (bodyItem) => { each(bodyItem.before, maxLineWidth); each(bodyItem.lines, maxLineWidth); each(bodyItem.after, maxLineWidth); }); widthPadding = 0; ctx.font = footerFont.string; each(tooltip.footer, maxLineWidth); ctx.restore(); width += padding.width; return { width, height }; } function determineYAlign(chart, size) { const { y, height } = size; if (y < height / 2) { return "top"; } else if (y > chart.height - height / 2) { return "bottom"; } return "center"; } function doesNotFitWithAlign(xAlign, chart, options, size) { const { x, width } = size; const caret = options.caretSize + options.caretPadding; if (xAlign === "left" && x + width + caret > chart.width) { return true; } if (xAlign === "right" && x - width - caret < 0) { return true; } } function determineXAlign(chart, options, size, yAlign) { const { x, width } = size; const { width: chartWidth, chartArea: { left, right } } = chart; let xAlign = "center"; if (yAlign === "center") { xAlign = x <= (left + right) / 2 ? "left" : "right"; } else if (x <= width / 2) { xAlign = "left"; } else if (x >= chartWidth - width / 2) { xAlign = "right"; } if (doesNotFitWithAlign(xAlign, chart, options, size)) { xAlign = "center"; } return xAlign; } function determineAlignment(chart, options, size) { const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size); return { xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign), yAlign }; } function alignX(size, xAlign) { let { x, width } = size; if (xAlign === "right") { x -= width; } else if (xAlign === "center") { x -= width / 2; } return x; } function alignY(size, yAlign, paddingAndSize) { let { y, height } = size; if (yAlign === "top") { y += paddingAndSize; } else if (yAlign === "bottom") { y -= height + paddingAndSize; } else { y -= height / 2; } return y; } function getBackgroundPoint(options, size, alignment, chart) { const { caretSize, caretPadding, cornerRadius } = options; const { xAlign, yAlign } = alignment; const paddingAndSize = caretSize + caretPadding; const { topLeft, topRight, bottomLeft, bottomRight } = toTRBLCorners(cornerRadius); let x = alignX(size, xAlign); const y = alignY(size, yAlign, paddingAndSize); if (yAlign === "center") { if (xAlign === "left") { x += paddingAndSize; } else if (xAlign === "right") { x -= paddingAndSize; } } else if (xAlign === "left") { x -= Math.max(topLeft, bottomLeft) + caretSize; } else if (xAlign === "right") { x += Math.max(topRight, bottomRight) + caretSize; } return { x: _limitValue(x, 0, chart.width - size.width), y: _limitValue(y, 0, chart.height - size.height) }; } function getAlignedX(tooltip, align, options) { const padding = toPadding(options.padding); return align === "center" ? tooltip.x + tooltip.width / 2 : align === "right" ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left; } function getBeforeAfterBodyLines(callback2) { return pushOrConcat([], splitNewlines(callback2)); } function createTooltipContext(parent, tooltip, tooltipItems) { return createContext(parent, { tooltip, tooltipItems, type: "tooltip" }); } function overrideCallbacks(callbacks, context) { const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks; return override ? callbacks.override(override) : callbacks; } var defaultCallbacks = { beforeTitle: noop, title(tooltipItems) { if (tooltipItems.length > 0) { const item = tooltipItems[0]; const labels = item.chart.data.labels; const labelCount = labels ? labels.length : 0; if (this && this.options && this.options.mode === "dataset") { return item.dataset.label || ""; } else if (item.label) { return item.label; } else if (labelCount > 0 && item.dataIndex < labelCount) { return labels[item.dataIndex]; } } return ""; }, afterTitle: noop, beforeBody: noop, beforeLabel: noop, label(tooltipItem) { if (this && this.options && this.options.mode === "dataset") { return tooltipItem.label + ": " + tooltipItem.formattedValue || tooltipItem.formattedValue; } let label = tooltipItem.dataset.label || ""; if (label) { label += ": "; } const value = tooltipItem.formattedValue; if (!isNullOrUndef(value)) { label += value; } return label; }, labelColor(tooltipItem) { const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex); const options = meta.controller.getStyle(tooltipItem.dataIndex); return { borderColor: options.borderColor, backgroundColor: options.backgroundColor, borderWidth: options.borderWidth, borderDash: options.borderDash, borderDashOffset: options.borderDashOffset, borderRadius: 0 }; }, labelTextColor() { return this.options.bodyColor; }, labelPointStyle(tooltipItem) { const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex); const options = meta.controller.getStyle(tooltipItem.dataIndex); return { pointStyle: options.pointStyle, rotation: options.rotation }; }, afterLabel: noop, afterBody: noop, beforeFooter: noop, footer: noop, afterFooter: noop }; function invokeCallbackWithFallback(callbacks, name, ctx, arg) { const result = callbacks[name].call(ctx, arg); if (typeof result === "undefined") { return defaultCallbacks[name].call(ctx, arg); } return result; } var Tooltip = class extends Element { constructor(config) { super(); this.opacity = 0; this._active = []; this._eventPosition = void 0; this._size = void 0; this._cachedAnimations = void 0; this._tooltipItems = []; this.$animations = void 0; this.$context = void 0; this.chart = config.chart; this.options = config.options; this.dataPoints = void 0; this.title = void 0; this.beforeBody = void 0; this.body = void 0; this.afterBody = void 0; this.footer = void 0; this.xAlign = void 0; this.yAlign = void 0; this.x = void 0; this.y = void 0; this.height = void 0; this.width = void 0; this.caretX = void 0; this.caretY = void 0; this.labelColors = void 0; this.labelPointStyles = void 0; this.labelTextColors = void 0; } initialize(options) { this.options = options; this._cachedAnimations = void 0; this.$context = void 0; } _resolveAnimations() { const cached = this._cachedAnimations; if (cached) { return cached; } const chart = this.chart; const options = this.options.setContext(this.getContext()); const opts = options.enabled && chart.options.animation && options.animations; const animations = new Animations(this.chart, opts); if (opts._cacheable) { this._cachedAnimations = Object.freeze(animations); } return animations; } getContext() { return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems)); } getTitle(context, options) { const { callbacks } = options; const beforeTitle = invokeCallbackWithFallback(callbacks, "beforeTitle", this, context); const title = invokeCallbackWithFallback(callbacks, "title", this, context); const afterTitle = invokeCallbackWithFallback(callbacks, "afterTitle", this, context); let lines = []; lines = pushOrConcat(lines, splitNewlines(beforeTitle)); lines = pushOrConcat(lines, splitNewlines(title)); lines = pushOrConcat(lines, splitNewlines(afterTitle)); return lines; } getBeforeBody(tooltipItems, options) { return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, "beforeBody", this, tooltipItems)); } getBody(tooltipItems, options) { const { callbacks } = options; const bodyItems = []; each(tooltipItems, (context) => { const bodyItem = { before: [], lines: [], after: [] }; const scoped = overrideCallbacks(callbacks, context); pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, "beforeLabel", this, context))); pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, "label", this, context)); pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, "afterLabel", this, context))); bodyItems.push(bodyItem); }); return bodyItems; } getAfterBody(tooltipItems, options) { return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, "afterBody", this, tooltipItems)); } getFooter(tooltipItems, options) { const { callbacks } = options; const beforeFooter = invokeCallbackWithFallback(callbacks, "beforeFooter", this, tooltipItems); const footer = invokeCallbackWithFallback(callbacks, "footer", this, tooltipItems); const afterFooter = invokeCallbackWithFallback(callbacks, "afterFooter", this, tooltipItems); let lines = []; lines = pushOrConcat(lines, splitNewlines(beforeFooter)); lines = pushOrConcat(lines, splitNewlines(footer)); lines = pushOrConcat(lines, splitNewlines(afterFooter)); return lines; } _createItems(options) { const active = this._active; const data = this.chart.data; const labelColors = []; const labelPointStyles = []; const labelTextColors = []; let tooltipItems = []; let i, len; for (i = 0, len = active.length; i < len; ++i) { tooltipItems.push(createTooltipItem(this.chart, active[i])); } if (options.filter) { tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data)); } if (options.itemSort) { tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data)); } each(tooltipItems, (context) => { const scoped = overrideCallbacks(options.callbacks, context); labelColors.push(invokeCallbackWithFallback(scoped, "labelColor", this, context)); labelPointStyles.push(invokeCallbackWithFallback(scoped, "labelPointStyle", this, context)); labelTextColors.push(invokeCallbackWithFallback(scoped, "labelTextColor", this, context)); }); this.labelColors = labelColors; this.labelPointStyles = labelPointStyles; this.labelTextColors = labelTextColors; this.dataPoints = tooltipItems; return tooltipItems; } update(changed, replay) { const options = this.options.setContext(this.getContext()); const active = this._active; let properties; let tooltipItems = []; if (!active.length) { if (this.opacity !== 0) { properties = { opacity: 0 }; } } else { const position = positioners[options.position].call(this, active, this._eventPosition); tooltipItems = this._createItems(options); this.title = this.getTitle(tooltipItems, options); this.beforeBody = this.getBeforeBody(tooltipItems, options); this.body = this.getBody(tooltipItems, options); this.afterBody = this.getAfterBody(tooltipItems, options); this.footer = this.getFooter(tooltipItems, options); const size = this._size = getTooltipSize(this, options); const positionAndSize = Object.assign({}, position, size); const alignment = determineAlignment(this.chart, options, positionAndSize); const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart); this.xAlign = alignment.xAlign; this.yAlign = alignment.yAlign; properties = { opacity: 1, x: backgroundPoint.x, y: backgroundPoint.y, width: size.width, height: size.height, caretX: position.x, caretY: position.y }; } this._tooltipItems = tooltipItems; this.$context = void 0; if (properties) { this._resolveAnimations().update(this, properties); } if (changed && options.external) { options.external.call(this, { chart: this.chart, tooltip: this, replay }); } } drawCaret(tooltipPoint, ctx, size, options) { const caretPosition = this.getCaretPosition(tooltipPoint, size, options); ctx.lineTo(caretPosition.x1, caretPosition.y1); ctx.lineTo(caretPosition.x2, caretPosition.y2); ctx.lineTo(caretPosition.x3, caretPosition.y3); } getCaretPosition(tooltipPoint, size, options) { const { xAlign, yAlign } = this; const { caretSize, cornerRadius } = options; const { topLeft, topRight, bottomLeft, bottomRight } = toTRBLCorners(cornerRadius); const { x: ptX, y: ptY } = tooltipPoint; const { width, height } = size; let x1, x2, x3, y1, y2, y3; if (yAlign === "center") { y2 = ptY + height / 2; if (xAlign === "left") { x1 = ptX; x2 = x1 - caretSize; y1 = y2 + caretSize; y3 = y2 - caretSize; } else { x1 = ptX + width; x2 = x1 + caretSize; y1 = y2 - caretSize; y3 = y2 + caretSize; } x3 = x1; } else { if (xAlign === "left") { x2 = ptX + Math.max(topLeft, bottomLeft) + caretSize; } else if (xAlign === "right") { x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize; } else { x2 = this.caretX; } if (yAlign === "top") { y1 = ptY; y2 = y1 - caretSize; x1 = x2 - caretSize; x3 = x2 + caretSize; } else { y1 = ptY + height; y2 = y1 + caretSize; x1 = x2 + caretSize; x3 = x2 - caretSize; } y3 = y1; } return { x1, x2, x3, y1, y2, y3 }; } drawTitle(pt, ctx, options) { const title = this.title; const length = title.length; let titleFont, titleSpacing, i; if (length) { const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width); pt.x = getAlignedX(this, options.titleAlign, options); ctx.textAlign = rtlHelper.textAlign(options.titleAlign); ctx.textBaseline = "middle"; titleFont = toFont(options.titleFont); titleSpacing = options.titleSpacing; ctx.fillStyle = options.titleColor; ctx.font = titleFont.string; for (i = 0; i < length; ++i) { ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2); pt.y += titleFont.lineHeight + titleSpacing; if (i + 1 === length) { pt.y += options.titleMarginBottom - titleSpacing; } } } } _drawColorBox(ctx, pt, i, rtlHelper, options) { const labelColor = this.labelColors[i]; const labelPointStyle = this.labelPointStyles[i]; const { boxHeight, boxWidth } = options; const bodyFont = toFont(options.bodyFont); const colorX = getAlignedX(this, "left", options); const rtlColorX = rtlHelper.x(colorX); const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0; const colorY = pt.y + yOffSet; if (options.usePointStyle) { const drawOptions = { radius: Math.min(boxWidth, boxHeight) / 2, pointStyle: labelPointStyle.pointStyle, rotation: labelPointStyle.rotation, borderWidth: 1 }; const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2; const centerY = colorY + boxHeight / 2; ctx.strokeStyle = options.multiKeyBackground; ctx.fillStyle = options.multiKeyBackground; drawPoint(ctx, drawOptions, centerX, centerY); ctx.strokeStyle = labelColor.borderColor; ctx.fillStyle = labelColor.backgroundColor; drawPoint(ctx, drawOptions, centerX, centerY); } else { ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : labelColor.borderWidth || 1; ctx.strokeStyle = labelColor.borderColor; ctx.setLineDash(labelColor.borderDash || []); ctx.lineDashOffset = labelColor.borderDashOffset || 0; const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth); const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2); const borderRadius = toTRBLCorners(labelColor.borderRadius); if (Object.values(borderRadius).some((v) => v !== 0)) { ctx.beginPath(); ctx.fillStyle = options.multiKeyBackground; addRoundedRectPath(ctx, { x: outerX, y: colorY, w: boxWidth, h: boxHeight, radius: borderRadius }); ctx.fill(); ctx.stroke(); ctx.fillStyle = labelColor.backgroundColor; ctx.beginPath(); addRoundedRectPath(ctx, { x: innerX, y: colorY + 1, w: boxWidth - 2, h: boxHeight - 2, radius: borderRadius }); ctx.fill(); } else { ctx.fillStyle = options.multiKeyBackground; ctx.fillRect(outerX, colorY, boxWidth, boxHeight); ctx.strokeRect(outerX, colorY, boxWidth, boxHeight); ctx.fillStyle = labelColor.backgroundColor; ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2); } } ctx.fillStyle = this.labelTextColors[i]; } drawBody(pt, ctx, options) { const { body } = this; const { bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding } = options; const bodyFont = toFont(options.bodyFont); let bodyLineHeight = bodyFont.lineHeight; let xLinePadding = 0; const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width); const fillLineOfText = function(line) { ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2); pt.y += bodyLineHeight + bodySpacing; }; const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign); let bodyItem, textColor, lines, i, j, ilen, jlen; ctx.textAlign = bodyAlign; ctx.textBaseline = "middle"; ctx.font = bodyFont.string; pt.x = getAlignedX(this, bodyAlignForCalculation, options); ctx.fillStyle = options.bodyColor; each(this.beforeBody, fillLineOfText); xLinePadding = displayColors && bodyAlignForCalculation !== "right" ? bodyAlign === "center" ? boxWidth / 2 + boxPadding : boxWidth + 2 + boxPadding : 0; for (i = 0, ilen = body.length; i < ilen; ++i) { bodyItem = body[i]; textColor = this.labelTextColors[i]; ctx.fillStyle = textColor; each(bodyItem.before, fillLineOfText); lines = bodyItem.lines; if (displayColors && lines.length) { this._drawColorBox(ctx, pt, i, rtlHelper, options); bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight); } for (j = 0, jlen = lines.length; j < jlen; ++j) { fillLineOfText(lines[j]); bodyLineHeight = bodyFont.lineHeight; } each(bodyItem.after, fillLineOfText); } xLinePadding = 0; bodyLineHeight = bodyFont.lineHeight; each(this.afterBody, fillLineOfText); pt.y -= bodySpacing; } drawFooter(pt, ctx, options) { const footer = this.footer; const length = footer.length; let footerFont, i; if (length) { const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width); pt.x = getAlignedX(this, options.footerAlign, options); pt.y += options.footerMarginTop; ctx.textAlign = rtlHelper.textAlign(options.footerAlign); ctx.textBaseline = "middle"; footerFont = toFont(options.footerFont); ctx.fillStyle = options.footerColor; ctx.font = footerFont.string; for (i = 0; i < length; ++i) { ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2); pt.y += footerFont.lineHeight + options.footerSpacing; } } } drawBackground(pt, ctx, tooltipSize, options) { const { xAlign, yAlign } = this; const { x, y } = pt; const { width, height } = tooltipSize; const { topLeft, topRight, bottomLeft, bottomRight } = toTRBLCorners(options.cornerRadius); ctx.fillStyle = options.backgroundColor; ctx.strokeStyle = options.borderColor; ctx.lineWidth = options.borderWidth; ctx.beginPath(); ctx.moveTo(x + topLeft, y); if (yAlign === "top") { this.drawCaret(pt, ctx, tooltipSize, options); } ctx.lineTo(x + width - topRight, y); ctx.quadraticCurveTo(x + width, y, x + width, y + topRight); if (yAlign === "center" && xAlign === "right") { this.drawCaret(pt, ctx, tooltipSize, options); } ctx.lineTo(x + width, y + height - bottomRight); ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height); if (yAlign === "bottom") { this.drawCaret(pt, ctx, tooltipSize, options); } ctx.lineTo(x + bottomLeft, y + height); ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft); if (yAlign === "center" && xAlign === "left") { this.drawCaret(pt, ctx, tooltipSize, options); } ctx.lineTo(x, y + topLeft); ctx.quadraticCurveTo(x, y, x + topLeft, y); ctx.closePath(); ctx.fill(); if (options.borderWidth > 0) { ctx.stroke(); } } _updateAnimationTarget(options) { const chart = this.chart; const anims = this.$animations; const animX = anims && anims.x; const animY = anims && anims.y; if (animX || animY) { const position = positioners[options.position].call(this, this._active, this._eventPosition); if (!position) { return; } const size = this._size = getTooltipSize(this, options); const positionAndSize = Object.assign({}, position, this._size); const alignment = determineAlignment(chart, options, positionAndSize); const point = getBackgroundPoint(options, positionAndSize, alignment, chart); if (animX._to !== point.x || animY._to !== point.y) { this.xAlign = alignment.xAlign; this.yAlign = alignment.yAlign; this.width = size.width; this.height = size.height; this.caretX = position.x; this.caretY = position.y; this._resolveAnimations().update(this, point); } } } _willRender() { return !!this.opacity; } draw(ctx) { const options = this.options.setContext(this.getContext()); let opacity = this.opacity; if (!opacity) { return; } this._updateAnimationTarget(options); const tooltipSize = { width: this.width, height: this.height }; const pt = { x: this.x, y: this.y }; opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity; const padding = toPadding(options.padding); const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length; if (options.enabled && hasTooltipContent) { ctx.save(); ctx.globalAlpha = opacity; this.drawBackground(pt, ctx, tooltipSize, options); overrideTextDirection(ctx, options.textDirection); pt.y += padding.top; this.drawTitle(pt, ctx, options); this.drawBody(pt, ctx, options); this.drawFooter(pt, ctx, options); restoreTextDirection(ctx, options.textDirection); ctx.restore(); } } getActiveElements() { return this._active || []; } setActiveElements(activeElements, eventPosition) { const lastActive = this._active; const active = activeElements.map(({ datasetIndex, index }) => { const meta = this.chart.getDatasetMeta(datasetIndex); if (!meta) { throw new Error("Cannot find a dataset at index " + datasetIndex); } return { datasetIndex, element: meta.data[index], index }; }); const changed = !_elementsEqual(lastActive, active); const positionChanged = this._positionChanged(active, eventPosition); if (changed || positionChanged) { this._active = active; this._eventPosition = eventPosition; this._ignoreReplayEvents = true; this.update(true); } } handleEvent(e, replay, inChartArea = true) { if (replay && this._ignoreReplayEvents) { return false; } this._ignoreReplayEvents = false; const options = this.options; const lastActive = this._active || []; const active = this._getActiveElements(e, lastActive, replay, inChartArea); const positionChanged = this._positionChanged(active, e); const changed = replay || !_elementsEqual(active, lastActive) || positionChanged; if (changed) { this._active = active; if (options.enabled || options.external) { this._eventPosition = { x: e.x, y: e.y }; this.update(true, replay); } } return changed; } _getActiveElements(e, lastActive, replay, inChartArea) { const options = this.options; if (e.type === "mouseout") { return []; } if (!inChartArea) { return lastActive; } const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay); if (options.reverse) { active.reverse(); } return active; } _positionChanged(active, e) { const { caretX, caretY, options } = this; const position = positioners[options.position].call(this, active, e); return position !== false && (caretX !== position.x || caretY !== position.y); } }; __publicField(Tooltip, "positioners", positioners); var plugin_tooltip = { id: "tooltip", _element: Tooltip, positioners, afterInit(chart, _args, options) { if (options) { chart.tooltip = new Tooltip({ chart, options }); } }, beforeUpdate(chart, _args, options) { if (chart.tooltip) { chart.tooltip.initialize(options); } }, reset(chart, _args, options) { if (chart.tooltip) { chart.tooltip.initialize(options); } }, afterDraw(chart) { const tooltip = chart.tooltip; if (tooltip && tooltip._willRender()) { const args = { tooltip }; if (chart.notifyPlugins("beforeTooltipDraw", { ...args, cancelable: true }) === false) { return; } tooltip.draw(chart.ctx); chart.notifyPlugins("afterTooltipDraw", args); } }, afterEvent(chart, args) { if (chart.tooltip) { const useFinalPosition = args.replay; if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) { args.changed = true; } } }, defaults: { enabled: true, external: null, position: "average", backgroundColor: "rgba(0,0,0,0.8)", titleColor: "#fff", titleFont: { weight: "bold" }, titleSpacing: 2, titleMarginBottom: 6, titleAlign: "left", bodyColor: "#fff", bodySpacing: 2, bodyFont: {}, bodyAlign: "left", footerColor: "#fff", footerSpacing: 2, footerMarginTop: 6, footerFont: { weight: "bold" }, footerAlign: "left", padding: 6, caretPadding: 2, caretSize: 5, cornerRadius: 6, boxHeight: (ctx, opts) => opts.bodyFont.size, boxWidth: (ctx, opts) => opts.bodyFont.size, multiKeyBackground: "#fff", displayColors: true, boxPadding: 0, borderColor: "rgba(0,0,0,0)", borderWidth: 0, animation: { duration: 400, easing: "easeOutQuart" }, animations: { numbers: { type: "number", properties: [ "x", "y", "width", "height", "caretX", "caretY" ] }, opacity: { easing: "linear", duration: 200 } }, callbacks: defaultCallbacks }, defaultRoutes: { bodyFont: "font", footerFont: "font", titleFont: "font" }, descriptors: { _scriptable: (name) => name !== "filter" && name !== "itemSort" && name !== "external", _indexable: false, callbacks: { _scriptable: false, _indexable: false }, animation: { _fallback: false }, animations: { _fallback: "animation" } }, additionalOptionScopes: [ "interaction" ] }; var addIfString = (labels, raw, index, addedLabels) => { if (typeof raw === "string") { index = labels.push(raw) - 1; addedLabels.unshift({ index, label: raw }); } else if (isNaN(raw)) { index = null; } return index; }; function findOrAddLabel(labels, raw, index, addedLabels) { const first = labels.indexOf(raw); if (first === -1) { return addIfString(labels, raw, index, addedLabels); } const last = labels.lastIndexOf(raw); return first !== last ? index : first; } var validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max); function _getLabelForValue(value) { const labels = this.getLabels(); if (value >= 0 && value < labels.length) { return labels[value]; } return value; } var CategoryScale = class extends Scale { constructor(cfg) { super(cfg); this._startValue = void 0; this._valueRange = 0; this._addedLabels = []; } init(scaleOptions) { const added = this._addedLabels; if (added.length) { const labels = this.getLabels(); for (const { index, label } of added) { if (labels[index] === label) { labels.splice(index, 1); } } this._addedLabels = []; } super.init(scaleOptions); } parse(raw, index) { if (isNullOrUndef(raw)) { return null; } const labels = this.getLabels(); index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels); return validIndex(index, labels.length - 1); } determineDataLimits() { const { minDefined, maxDefined } = this.getUserBounds(); let { min, max } = this.getMinMax(true); if (this.options.bounds === "ticks") { if (!minDefined) { min = 0; } if (!maxDefined) { max = this.getLabels().length - 1; } } this.min = min; this.max = max; } buildTicks() { const min = this.min; const max = this.max; const offset = this.options.offset; const ticks = []; let labels = this.getLabels(); labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1); this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1); this._startValue = this.min - (offset ? 0.5 : 0); for (let value = min; value <= max; value++) { ticks.push({ value }); } return ticks; } getLabelForValue(value) { return _getLabelForValue.call(this, value); } configure() { super.configure(); if (!this.isHorizontal()) { this._reversePixels = !this._reversePixels; } } getPixelForValue(value) { if (typeof value !== "number") { value = this.parse(value); } return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange); } getPixelForTick(index) { const ticks = this.ticks; if (index < 0 || index > ticks.length - 1) { return null; } return this.getPixelForValue(ticks[index].value); } getValueForPixel(pixel) { return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange); } getBasePixel() { return this.bottom; } }; __publicField(CategoryScale, "id", "category"); __publicField(CategoryScale, "defaults", { ticks: { callback: _getLabelForValue } }); function generateTicks$1(generationOptions, dataRange) { const ticks = []; const MIN_SPACING = 1e-14; const { bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds } = generationOptions; const unit = step || 1; const maxSpaces = maxTicks - 1; const { min: rmin, max: rmax } = dataRange; const minDefined = !isNullOrUndef(min); const maxDefined = !isNullOrUndef(max); const countDefined = !isNullOrUndef(count); const minSpacing = (rmax - rmin) / (maxDigits + 1); let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit; let factor, niceMin, niceMax, numSpaces; if (spacing < MIN_SPACING && !minDefined && !maxDefined) { return [ { value: rmin }, { value: rmax } ]; } numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing); if (numSpaces > maxSpaces) { spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit; } if (!isNullOrUndef(precision)) { factor = Math.pow(10, precision); spacing = Math.ceil(spacing * factor) / factor; } if (bounds === "ticks") { niceMin = Math.floor(rmin / spacing) * spacing; niceMax = Math.ceil(rmax / spacing) * spacing; } else { niceMin = rmin; niceMax = rmax; } if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1e3)) { numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks)); spacing = (max - min) / numSpaces; niceMin = min; niceMax = max; } else if (countDefined) { niceMin = minDefined ? min : niceMin; niceMax = maxDefined ? max : niceMax; numSpaces = count - 1; spacing = (niceMax - niceMin) / numSpaces; } else { numSpaces = (niceMax - niceMin) / spacing; if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1e3)) { numSpaces = Math.round(numSpaces); } else { numSpaces = Math.ceil(numSpaces); } } const decimalPlaces = Math.max(_decimalPlaces(spacing), _decimalPlaces(niceMin)); factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision); niceMin = Math.round(niceMin * factor) / factor; niceMax = Math.round(niceMax * factor) / factor; let j = 0; if (minDefined) { if (includeBounds && niceMin !== min) { ticks.push({ value: min }); if (niceMin < min) { j++; } if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) { j++; } } else if (niceMin < min) { j++; } } for (; j < numSpaces; ++j) { const tickValue = Math.round((niceMin + j * spacing) * factor) / factor; if (maxDefined && tickValue > max) { break; } ticks.push({ value: tickValue }); } if (maxDefined && includeBounds && niceMax !== max) { if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) { ticks[ticks.length - 1].value = max; } else { ticks.push({ value: max }); } } else if (!maxDefined || niceMax === max) { ticks.push({ value: niceMax }); } return ticks; } function relativeLabelSize(value, minSpacing, { horizontal, minRotation }) { const rad = toRadians(minRotation); const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 1e-3; const length = 0.75 * minSpacing * ("" + value).length; return Math.min(minSpacing / ratio, length); } var LinearScaleBase = class extends Scale { constructor(cfg) { super(cfg); this.start = void 0; this.end = void 0; this._startValue = void 0; this._endValue = void 0; this._valueRange = 0; } parse(raw, index) { if (isNullOrUndef(raw)) { return null; } if ((typeof raw === "number" || raw instanceof Number) && !isFinite(+raw)) { return null; } return +raw; } handleTickRangeOptions() { const { beginAtZero } = this.options; const { minDefined, maxDefined } = this.getUserBounds(); let { min, max } = this; const setMin = (v) => min = minDefined ? min : v; const setMax = (v) => max = maxDefined ? max : v; if (beginAtZero) { const minSign = sign(min); const maxSign = sign(max); if (minSign < 0 && maxSign < 0) { setMax(0); } else if (minSign > 0 && maxSign > 0) { setMin(0); } } if (min === max) { let offset = max === 0 ? 1 : Math.abs(max * 0.05); setMax(max + offset); if (!beginAtZero) { setMin(min - offset); } } this.min = min; this.max = max; } getTickLimit() { const tickOpts = this.options.ticks; let { maxTicksLimit, stepSize } = tickOpts; let maxTicks; if (stepSize) { maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1; if (maxTicks > 1e3) { console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`); maxTicks = 1e3; } } else { maxTicks = this.computeTickLimit(); maxTicksLimit = maxTicksLimit || 11; } if (maxTicksLimit) { maxTicks = Math.min(maxTicksLimit, maxTicks); } return maxTicks; } computeTickLimit() { return Number.POSITIVE_INFINITY; } buildTicks() { const opts = this.options; const tickOpts = opts.ticks; let maxTicks = this.getTickLimit(); maxTicks = Math.max(2, maxTicks); const numericGeneratorOptions = { maxTicks, bounds: opts.bounds, min: opts.min, max: opts.max, precision: tickOpts.precision, step: tickOpts.stepSize, count: tickOpts.count, maxDigits: this._maxDigits(), horizontal: this.isHorizontal(), minRotation: tickOpts.minRotation || 0, includeBounds: tickOpts.includeBounds !== false }; const dataRange = this._range || this; const ticks = generateTicks$1(numericGeneratorOptions, dataRange); if (opts.bounds === "ticks") { _setMinAndMaxByKey(ticks, this, "value"); } if (opts.reverse) { ticks.reverse(); this.start = this.max; this.end = this.min; } else { this.start = this.min; this.end = this.max; } return ticks; } configure() { const ticks = this.ticks; let start = this.min; let end = this.max; super.configure(); if (this.options.offset && ticks.length) { const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2; start -= offset; end += offset; } this._startValue = start; this._endValue = end; this._valueRange = end - start; } getLabelForValue(value) { return formatNumber(value, this.chart.options.locale, this.options.ticks.format); } }; var LinearScale = class extends LinearScaleBase { determineDataLimits() { const { min, max } = this.getMinMax(true); this.min = isNumberFinite(min) ? min : 0; this.max = isNumberFinite(max) ? max : 1; this.handleTickRangeOptions(); } computeTickLimit() { const horizontal = this.isHorizontal(); const length = horizontal ? this.width : this.height; const minRotation = toRadians(this.options.ticks.minRotation); const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 1e-3; const tickFont = this._resolveTickFontOptions(0); return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio)); } getPixelForValue(value) { return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange); } getValueForPixel(pixel) { return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange; } }; __publicField(LinearScale, "id", "linear"); __publicField(LinearScale, "defaults", { ticks: { callback: Ticks.formatters.numeric } }); var log10Floor = (v) => Math.floor(log10(v)); var changeExponent = (v, m) => Math.pow(10, log10Floor(v) + m); function isMajor(tickVal) { const remain = tickVal / Math.pow(10, log10Floor(tickVal)); return remain === 1; } function steps(min, max, rangeExp) { const rangeStep = Math.pow(10, rangeExp); const start = Math.floor(min / rangeStep); const end = Math.ceil(max / rangeStep); return end - start; } function startExp(min, max) { const range = max - min; let rangeExp = log10Floor(range); while (steps(min, max, rangeExp) > 10) { rangeExp++; } while (steps(min, max, rangeExp) < 10) { rangeExp--; } return Math.min(rangeExp, log10Floor(min)); } function generateTicks(generationOptions, { min, max }) { min = finiteOrDefault(generationOptions.min, min); const ticks = []; const minExp = log10Floor(min); let exp = startExp(min, max); let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1; const stepSize = Math.pow(10, exp); const base = minExp > exp ? Math.pow(10, minExp) : 0; const start = Math.round((min - base) * precision) / precision; const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10; let significand = Math.floor((start - offset) / Math.pow(10, exp)); let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision); while (value < max) { ticks.push({ value, major: isMajor(value), significand }); if (significand >= 10) { significand = significand < 15 ? 15 : 20; } else { significand++; } if (significand >= 20) { exp++; significand = 2; precision = exp >= 0 ? 1 : precision; } value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision; } const lastTick = finiteOrDefault(generationOptions.max, value); ticks.push({ value: lastTick, major: isMajor(lastTick), significand }); return ticks; } var LogarithmicScale = class extends Scale { constructor(cfg) { super(cfg); this.start = void 0; this.end = void 0; this._startValue = void 0; this._valueRange = 0; } parse(raw, index) { const value = LinearScaleBase.prototype.parse.apply(this, [ raw, index ]); if (value === 0) { this._zero = true; return void 0; } return isNumberFinite(value) && value > 0 ? value : null; } determineDataLimits() { const { min, max } = this.getMinMax(true); this.min = isNumberFinite(min) ? Math.max(0, min) : null; this.max = isNumberFinite(max) ? Math.max(0, max) : null; if (this.options.beginAtZero) { this._zero = true; } if (this._zero && this.min !== this._suggestedMin && !isNumberFinite(this._userMin)) { this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0); } this.handleTickRangeOptions(); } handleTickRangeOptions() { const { minDefined, maxDefined } = this.getUserBounds(); let min = this.min; let max = this.max; const setMin = (v) => min = minDefined ? min : v; const setMax = (v) => max = maxDefined ? max : v; if (min === max) { if (min <= 0) { setMin(1); setMax(10); } else { setMin(changeExponent(min, -1)); setMax(changeExponent(max, 1)); } } if (min <= 0) { setMin(changeExponent(max, -1)); } if (max <= 0) { setMax(changeExponent(min, 1)); } this.min = min; this.max = max; } buildTicks() { const opts = this.options; const generationOptions = { min: this._userMin, max: this._userMax }; const ticks = generateTicks(generationOptions, this); if (opts.bounds === "ticks") { _setMinAndMaxByKey(ticks, this, "value"); } if (opts.reverse) { ticks.reverse(); this.start = this.max; this.end = this.min; } else { this.start = this.min; this.end = this.max; } return ticks; } getLabelForValue(value) { return value === void 0 ? "0" : formatNumber(value, this.chart.options.locale, this.options.ticks.format); } configure() { const start = this.min; super.configure(); this._startValue = log10(start); this._valueRange = log10(this.max) - log10(start); } getPixelForValue(value) { if (value === void 0 || value === 0) { value = this.min; } if (value === null || isNaN(value)) { return NaN; } return this.getPixelForDecimal(value === this.min ? 0 : (log10(value) - this._startValue) / this._valueRange); } getValueForPixel(pixel) { const decimal = this.getDecimalForPixel(pixel); return Math.pow(10, this._startValue + decimal * this._valueRange); } }; __publicField(LogarithmicScale, "id", "logarithmic"); __publicField(LogarithmicScale, "defaults", { ticks: { callback: Ticks.formatters.logarithmic, major: { enabled: true } } }); function getTickBackdropHeight(opts) { const tickOpts = opts.ticks; if (tickOpts.display && opts.display) { const padding = toPadding(tickOpts.backdropPadding); return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height; } return 0; } function measureLabelSize(ctx, font, label) { label = isArray(label) ? label : [ label ]; return { w: _longestText(ctx, font.string, label), h: label.length * font.lineHeight }; } function determineLimits(angle, pos, size, min, max) { if (angle === min || angle === max) { return { start: pos - size / 2, end: pos + size / 2 }; } else if (angle < min || angle > max) { return { start: pos - size, end: pos }; } return { start: pos, end: pos + size }; } function fitWithPointLabels(scale) { const orig = { l: scale.left + scale._padding.left, r: scale.right - scale._padding.right, t: scale.top + scale._padding.top, b: scale.bottom - scale._padding.bottom }; const limits = Object.assign({}, orig); const labelSizes = []; const padding = []; const valueCount = scale._pointLabels.length; const pointLabelOpts = scale.options.pointLabels; const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0; for (let i = 0; i < valueCount; i++) { const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i)); padding[i] = opts.padding; const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle); const plFont = toFont(opts.font); const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]); labelSizes[i] = textSize; const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle); const angle = Math.round(toDegrees(angleRadians)); const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180); const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270); updateLimits(limits, orig, angleRadians, hLimits, vLimits); } scale.setCenterPoint(orig.l - limits.l, limits.r - orig.r, orig.t - limits.t, limits.b - orig.b); scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding); } function updateLimits(limits, orig, angle, hLimits, vLimits) { const sin = Math.abs(Math.sin(angle)); const cos = Math.abs(Math.cos(angle)); let x = 0; let y = 0; if (hLimits.start < orig.l) { x = (orig.l - hLimits.start) / sin; limits.l = Math.min(limits.l, orig.l - x); } else if (hLimits.end > orig.r) { x = (hLimits.end - orig.r) / sin; limits.r = Math.max(limits.r, orig.r + x); } if (vLimits.start < orig.t) { y = (orig.t - vLimits.start) / cos; limits.t = Math.min(limits.t, orig.t - y); } else if (vLimits.end > orig.b) { y = (vLimits.end - orig.b) / cos; limits.b = Math.max(limits.b, orig.b + y); } } function createPointLabelItem(scale, index, itemOpts) { const outerDistance = scale.drawingArea; const { extra, additionalAngle, padding, size } = itemOpts; const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle); const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI))); const y = yForAngle(pointLabelPosition.y, size.h, angle); const textAlign = getTextAlignForAngle(angle); const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign); return { visible: true, x: pointLabelPosition.x, y, textAlign, left, top: y, right: left + size.w, bottom: y + size.h }; } function isNotOverlapped(item, area) { if (!area) { return true; } const { left, top, right, bottom } = item; const apexesInArea = _isPointInArea({ x: left, y: top }, area) || _isPointInArea({ x: left, y: bottom }, area) || _isPointInArea({ x: right, y: top }, area) || _isPointInArea({ x: right, y: bottom }, area); return !apexesInArea; } function buildPointLabelItems(scale, labelSizes, padding) { const items = []; const valueCount = scale._pointLabels.length; const opts = scale.options; const { centerPointLabels, display } = opts.pointLabels; const itemOpts = { extra: getTickBackdropHeight(opts) / 2, additionalAngle: centerPointLabels ? PI / valueCount : 0 }; let area; for (let i = 0; i < valueCount; i++) { itemOpts.padding = padding[i]; itemOpts.size = labelSizes[i]; const item = createPointLabelItem(scale, i, itemOpts); items.push(item); if (display === "auto") { item.visible = isNotOverlapped(item, area); if (item.visible) { area = item; } } } return items; } function getTextAlignForAngle(angle) { if (angle === 0 || angle === 180) { return "center"; } else if (angle < 180) { return "left"; } return "right"; } function leftForTextAlign(x, w, align) { if (align === "right") { x -= w; } else if (align === "center") { x -= w / 2; } return x; } function yForAngle(y, h4, angle) { if (angle === 90 || angle === 270) { y -= h4 / 2; } else if (angle > 270 || angle < 90) { y -= h4; } return y; } function drawPointLabelBox(ctx, opts, item) { const { left, top, right, bottom } = item; const { backdropColor } = opts; if (!isNullOrUndef(backdropColor)) { const borderRadius = toTRBLCorners(opts.borderRadius); const padding = toPadding(opts.backdropPadding); ctx.fillStyle = backdropColor; const backdropLeft = left - padding.left; const backdropTop = top - padding.top; const backdropWidth = right - left + padding.width; const backdropHeight = bottom - top + padding.height; if (Object.values(borderRadius).some((v) => v !== 0)) { ctx.beginPath(); addRoundedRectPath(ctx, { x: backdropLeft, y: backdropTop, w: backdropWidth, h: backdropHeight, radius: borderRadius }); ctx.fill(); } else { ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight); } } } function drawPointLabels(scale, labelCount) { const { ctx, options: { pointLabels } } = scale; for (let i = labelCount - 1; i >= 0; i--) { const item = scale._pointLabelItems[i]; if (!item.visible) { continue; } const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i)); drawPointLabelBox(ctx, optsAtIndex, item); const plFont = toFont(optsAtIndex.font); const { x, y, textAlign } = item; renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, { color: optsAtIndex.color, textAlign, textBaseline: "middle" }); } } function pathRadiusLine(scale, radius, circular, labelCount) { const { ctx } = scale; if (circular) { ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU); } else { let pointPosition = scale.getPointPosition(0, radius); ctx.moveTo(pointPosition.x, pointPosition.y); for (let i = 1; i < labelCount; i++) { pointPosition = scale.getPointPosition(i, radius); ctx.lineTo(pointPosition.x, pointPosition.y); } } } function drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) { const ctx = scale.ctx; const circular = gridLineOpts.circular; const { color: color2, lineWidth } = gridLineOpts; if (!circular && !labelCount || !color2 || !lineWidth || radius < 0) { return; } ctx.save(); ctx.strokeStyle = color2; ctx.lineWidth = lineWidth; ctx.setLineDash(borderOpts.dash); ctx.lineDashOffset = borderOpts.dashOffset; ctx.beginPath(); pathRadiusLine(scale, radius, circular, labelCount); ctx.closePath(); ctx.stroke(); ctx.restore(); } function createPointLabelContext(parent, index, label) { return createContext(parent, { label, index, type: "pointLabel" }); } var RadialLinearScale = class extends LinearScaleBase { constructor(cfg) { super(cfg); this.xCenter = void 0; this.yCenter = void 0; this.drawingArea = void 0; this._pointLabels = []; this._pointLabelItems = []; } setDimensions() { const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2); const w = this.width = this.maxWidth - padding.width; const h4 = this.height = this.maxHeight - padding.height; this.xCenter = Math.floor(this.left + w / 2 + padding.left); this.yCenter = Math.floor(this.top + h4 / 2 + padding.top); this.drawingArea = Math.floor(Math.min(w, h4) / 2); } determineDataLimits() { const { min, max } = this.getMinMax(false); this.min = isNumberFinite(min) && !isNaN(min) ? min : 0; this.max = isNumberFinite(max) && !isNaN(max) ? max : 0; this.handleTickRangeOptions(); } computeTickLimit() { return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options)); } generateTickLabels(ticks) { LinearScaleBase.prototype.generateTickLabels.call(this, ticks); this._pointLabels = this.getLabels().map((value, index) => { const label = callback(this.options.pointLabels.callback, [ value, index ], this); return label || label === 0 ? label : ""; }).filter((v, i) => this.chart.getDataVisibility(i)); } fit() { const opts = this.options; if (opts.display && opts.pointLabels.display) { fitWithPointLabels(this); } else { this.setCenterPoint(0, 0, 0, 0); } } setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) { this.xCenter += Math.floor((leftMovement - rightMovement) / 2); this.yCenter += Math.floor((topMovement - bottomMovement) / 2); this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement)); } getIndexAngle(index) { const angleMultiplier = TAU / (this._pointLabels.length || 1); const startAngle = this.options.startAngle || 0; return _normalizeAngle(index * angleMultiplier + toRadians(startAngle)); } getDistanceFromCenterForValue(value) { if (isNullOrUndef(value)) { return NaN; } const scalingFactor = this.drawingArea / (this.max - this.min); if (this.options.reverse) { return (this.max - value) * scalingFactor; } return (value - this.min) * scalingFactor; } getValueForDistanceFromCenter(distance) { if (isNullOrUndef(distance)) { return NaN; } const scaledDistance = distance / (this.drawingArea / (this.max - this.min)); return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance; } getPointLabelContext(index) { const pointLabels = this._pointLabels || []; if (index >= 0 && index < pointLabels.length) { const pointLabel = pointLabels[index]; return createPointLabelContext(this.getContext(), index, pointLabel); } } getPointPosition(index, distanceFromCenter, additionalAngle = 0) { const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle; return { x: Math.cos(angle) * distanceFromCenter + this.xCenter, y: Math.sin(angle) * distanceFromCenter + this.yCenter, angle }; } getPointPositionForValue(index, value) { return this.getPointPosition(index, this.getDistanceFromCenterForValue(value)); } getBasePosition(index) { return this.getPointPositionForValue(index || 0, this.getBaseValue()); } getPointLabelPosition(index) { const { left, top, right, bottom } = this._pointLabelItems[index]; return { left, top, right, bottom }; } drawBackground() { const { backgroundColor, grid: { circular } } = this.options; if (backgroundColor) { const ctx = this.ctx; ctx.save(); ctx.beginPath(); pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length); ctx.closePath(); ctx.fillStyle = backgroundColor; ctx.fill(); ctx.restore(); } } drawGrid() { const ctx = this.ctx; const opts = this.options; const { angleLines, grid, border } = opts; const labelCount = this._pointLabels.length; let i, offset, position; if (opts.pointLabels.display) { drawPointLabels(this, labelCount); } if (grid.display) { this.ticks.forEach((tick, index) => { if (index !== 0) { offset = this.getDistanceFromCenterForValue(tick.value); const context = this.getContext(index); const optsAtIndex = grid.setContext(context); const optsAtIndexBorder = border.setContext(context); drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder); } }); } if (angleLines.display) { ctx.save(); for (i = labelCount - 1; i >= 0; i--) { const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i)); const { color: color2, lineWidth } = optsAtIndex; if (!lineWidth || !color2) { continue; } ctx.lineWidth = lineWidth; ctx.strokeStyle = color2; ctx.setLineDash(optsAtIndex.borderDash); ctx.lineDashOffset = optsAtIndex.borderDashOffset; offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max); position = this.getPointPosition(i, offset); ctx.beginPath(); ctx.moveTo(this.xCenter, this.yCenter); ctx.lineTo(position.x, position.y); ctx.stroke(); } ctx.restore(); } } drawBorder() { } drawLabels() { const ctx = this.ctx; const opts = this.options; const tickOpts = opts.ticks; if (!tickOpts.display) { return; } const startAngle = this.getIndexAngle(0); let offset, width; ctx.save(); ctx.translate(this.xCenter, this.yCenter); ctx.rotate(startAngle); ctx.textAlign = "center"; ctx.textBaseline = "middle"; this.ticks.forEach((tick, index) => { if (index === 0 && !opts.reverse) { return; } const optsAtIndex = tickOpts.setContext(this.getContext(index)); const tickFont = toFont(optsAtIndex.font); offset = this.getDistanceFromCenterForValue(this.ticks[index].value); if (optsAtIndex.showLabelBackdrop) { ctx.font = tickFont.string; width = ctx.measureText(tick.label).width; ctx.fillStyle = optsAtIndex.backdropColor; const padding = toPadding(optsAtIndex.backdropPadding); ctx.fillRect(-width / 2 - padding.left, -offset - tickFont.size / 2 - padding.top, width + padding.width, tickFont.size + padding.height); } renderText(ctx, tick.label, 0, -offset, tickFont, { color: optsAtIndex.color }); }); ctx.restore(); } drawTitle() { } }; __publicField(RadialLinearScale, "id", "radialLinear"); __publicField(RadialLinearScale, "defaults", { display: true, animate: true, position: "chartArea", angleLines: { display: true, lineWidth: 1, borderDash: [], borderDashOffset: 0 }, grid: { circular: false }, startAngle: 0, ticks: { showLabelBackdrop: true, callback: Ticks.formatters.numeric }, pointLabels: { backdropColor: void 0, backdropPadding: 2, display: true, font: { size: 10 }, callback(label) { return label; }, padding: 5, centerPointLabels: false } }); __publicField(RadialLinearScale, "defaultRoutes", { "angleLines.color": "borderColor", "pointLabels.color": "color", "ticks.color": "color" }); __publicField(RadialLinearScale, "descriptors", { angleLines: { _fallback: "grid" } }); var INTERVALS = { millisecond: { common: true, size: 1, steps: 1e3 }, second: { common: true, size: 1e3, steps: 60 }, minute: { common: true, size: 6e4, steps: 60 }, hour: { common: true, size: 36e5, steps: 24 }, day: { common: true, size: 864e5, steps: 30 }, week: { common: false, size: 6048e5, steps: 4 }, month: { common: true, size: 2628e6, steps: 12 }, quarter: { common: false, size: 7884e6, steps: 4 }, year: { common: true, size: 3154e7 } }; var UNITS = /* @__PURE__ */ Object.keys(INTERVALS); function sorter(a, b) { return a - b; } function parse(scale, input) { if (isNullOrUndef(input)) { return null; } const adapter = scale._adapter; const { parser, round: round2, isoWeekday } = scale._parseOpts; let value = input; if (typeof parser === "function") { value = parser(value); } if (!isNumberFinite(value)) { value = typeof parser === "string" ? adapter.parse(value, parser) : adapter.parse(value); } if (value === null) { return null; } if (round2) { value = round2 === "week" && (isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, "isoWeek", isoWeekday) : adapter.startOf(value, round2); } return +value; } function determineUnitForAutoTicks(minUnit, min, max, capacity) { const ilen = UNITS.length; for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) { const interval = INTERVALS[UNITS[i]]; const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER; if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) { return UNITS[i]; } } return UNITS[ilen - 1]; } function determineUnitForFormatting(scale, numTicks, minUnit, min, max) { for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) { const unit = UNITS[i]; if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) { return unit; } } return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0]; } function determineMajorUnit(unit) { for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) { if (INTERVALS[UNITS[i]].common) { return UNITS[i]; } } } function addTick(ticks, time, timestamps) { if (!timestamps) { ticks[time] = true; } else if (timestamps.length) { const { lo, hi } = _lookup(timestamps, time); const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi]; ticks[timestamp] = true; } } function setMajorTicks(scale, ticks, map3, majorUnit) { const adapter = scale._adapter; const first = +adapter.startOf(ticks[0].value, majorUnit); const last = ticks[ticks.length - 1].value; let major, index; for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) { index = map3[major]; if (index >= 0) { ticks[index].major = true; } } return ticks; } function ticksFromTimestamps(scale, values, majorUnit) { const ticks = []; const map3 = {}; const ilen = values.length; let i, value; for (i = 0; i < ilen; ++i) { value = values[i]; map3[value] = i; ticks.push({ value, major: false }); } return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map3, majorUnit); } var TimeScale = class extends Scale { constructor(props) { super(props); this._cache = { data: [], labels: [], all: [] }; this._unit = "day"; this._majorUnit = void 0; this._offsets = {}; this._normalized = false; this._parseOpts = void 0; } init(scaleOpts, opts = {}) { const time = scaleOpts.time || (scaleOpts.time = {}); const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date); adapter.init(opts); mergeIf(time.displayFormats, adapter.formats()); this._parseOpts = { parser: time.parser, round: time.round, isoWeekday: time.isoWeekday }; super.init(scaleOpts); this._normalized = opts.normalized; } parse(raw, index) { if (raw === void 0) { return null; } return parse(this, raw); } beforeLayout() { super.beforeLayout(); this._cache = { data: [], labels: [], all: [] }; } determineDataLimits() { const options = this.options; const adapter = this._adapter; const unit = options.time.unit || "day"; let { min, max, minDefined, maxDefined } = this.getUserBounds(); function _applyBounds(bounds) { if (!minDefined && !isNaN(bounds.min)) { min = Math.min(min, bounds.min); } if (!maxDefined && !isNaN(bounds.max)) { max = Math.max(max, bounds.max); } } if (!minDefined || !maxDefined) { _applyBounds(this._getLabelBounds()); if (options.bounds !== "ticks" || options.ticks.source !== "labels") { _applyBounds(this.getMinMax(false)); } } min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit); max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1; this.min = Math.min(min, max - 1); this.max = Math.max(min + 1, max); } _getLabelBounds() { const arr = this.getLabelTimestamps(); let min = Number.POSITIVE_INFINITY; let max = Number.NEGATIVE_INFINITY; if (arr.length) { min = arr[0]; max = arr[arr.length - 1]; } return { min, max }; } buildTicks() { const options = this.options; const timeOpts = options.time; const tickOpts = options.ticks; const timestamps = tickOpts.source === "labels" ? this.getLabelTimestamps() : this._generate(); if (options.bounds === "ticks" && timestamps.length) { this.min = this._userMin || timestamps[0]; this.max = this._userMax || timestamps[timestamps.length - 1]; } const min = this.min; const max = this.max; const ticks = _filterBetween(timestamps, min, max); this._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max)); this._majorUnit = !tickOpts.major.enabled || this._unit === "year" ? void 0 : determineMajorUnit(this._unit); this.initOffsets(timestamps); if (options.reverse) { ticks.reverse(); } return ticksFromTimestamps(this, ticks, this._majorUnit); } afterAutoSkip() { if (this.options.offsetAfterAutoskip) { this.initOffsets(this.ticks.map((tick) => +tick.value)); } } initOffsets(timestamps = []) { let start = 0; let end = 0; let first, last; if (this.options.offset && timestamps.length) { first = this.getDecimalForValue(timestamps[0]); if (timestamps.length === 1) { start = 1 - first; } else { start = (this.getDecimalForValue(timestamps[1]) - first) / 2; } last = this.getDecimalForValue(timestamps[timestamps.length - 1]); if (timestamps.length === 1) { end = last; } else { end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2; } } const limit = timestamps.length < 3 ? 0.5 : 0.25; start = _limitValue(start, 0, limit); end = _limitValue(end, 0, limit); this._offsets = { start, end, factor: 1 / (start + 1 + end) }; } _generate() { const adapter = this._adapter; const min = this.min; const max = this.max; const options = this.options; const timeOpts = options.time; const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min)); const stepSize = valueOrDefault(options.ticks.stepSize, 1); const weekday = minor === "week" ? timeOpts.isoWeekday : false; const hasWeekday = isNumber(weekday) || weekday === true; const ticks = {}; let first = min; let time, count; if (hasWeekday) { first = +adapter.startOf(first, "isoWeek", weekday); } first = +adapter.startOf(first, hasWeekday ? "day" : minor); if (adapter.diff(max, min, minor) > 1e5 * stepSize) { throw new Error(min + " and " + max + " are too far apart with stepSize of " + stepSize + " " + minor); } const timestamps = options.ticks.source === "data" && this.getDataTimestamps(); for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) { addTick(ticks, time, timestamps); } if (time === max || options.bounds === "ticks" || count === 1) { addTick(ticks, time, timestamps); } return Object.keys(ticks).sort((a, b) => a - b).map((x) => +x); } getLabelForValue(value) { const adapter = this._adapter; const timeOpts = this.options.time; if (timeOpts.tooltipFormat) { return adapter.format(value, timeOpts.tooltipFormat); } return adapter.format(value, timeOpts.displayFormats.datetime); } format(value, format) { const options = this.options; const formats = options.time.displayFormats; const unit = this._unit; const fmt = format || formats[unit]; return this._adapter.format(value, fmt); } _tickFormatFunction(time, index, ticks, format) { const options = this.options; const formatter = options.ticks.callback; if (formatter) { return callback(formatter, [ time, index, ticks ], this); } const formats = options.time.displayFormats; const unit = this._unit; const majorUnit = this._majorUnit; const minorFormat = unit && formats[unit]; const majorFormat = majorUnit && formats[majorUnit]; const tick = ticks[index]; const major = majorUnit && majorFormat && tick && tick.major; return this._adapter.format(time, format || (major ? majorFormat : minorFormat)); } generateTickLabels(ticks) { let i, ilen, tick; for (i = 0, ilen = ticks.length; i < ilen; ++i) { tick = ticks[i]; tick.label = this._tickFormatFunction(tick.value, i, ticks); } } getDecimalForValue(value) { return value === null ? NaN : (value - this.min) / (this.max - this.min); } getPixelForValue(value) { const offsets = this._offsets; const pos = this.getDecimalForValue(value); return this.getPixelForDecimal((offsets.start + pos) * offsets.factor); } getValueForPixel(pixel) { const offsets = this._offsets; const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end; return this.min + pos * (this.max - this.min); } _getLabelSize(label) { const ticksOpts = this.options.ticks; const tickLabelWidth = this.ctx.measureText(label).width; const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation); const cosRotation = Math.cos(angle); const sinRotation = Math.sin(angle); const tickFontSize = this._resolveTickFontOptions(0).size; return { w: tickLabelWidth * cosRotation + tickFontSize * sinRotation, h: tickLabelWidth * sinRotation + tickFontSize * cosRotation }; } _getLabelCapacity(exampleTime) { const timeOpts = this.options.time; const displayFormats = timeOpts.displayFormats; const format = displayFormats[timeOpts.unit] || displayFormats.millisecond; const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [ exampleTime ], this._majorUnit), format); const size = this._getLabelSize(exampleLabel); const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1; return capacity > 0 ? capacity : 1; } getDataTimestamps() { let timestamps = this._cache.data || []; let i, ilen; if (timestamps.length) { return timestamps; } const metas = this.getMatchingVisibleMetas(); if (this._normalized && metas.length) { return this._cache.data = metas[0].controller.getAllParsedValues(this); } for (i = 0, ilen = metas.length; i < ilen; ++i) { timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this)); } return this._cache.data = this.normalize(timestamps); } getLabelTimestamps() { const timestamps = this._cache.labels || []; let i, ilen; if (timestamps.length) { return timestamps; } const labels = this.getLabels(); for (i = 0, ilen = labels.length; i < ilen; ++i) { timestamps.push(parse(this, labels[i])); } return this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps); } normalize(values) { return _arrayUnique(values.sort(sorter)); } }; __publicField(TimeScale, "id", "time"); __publicField(TimeScale, "defaults", { bounds: "data", adapters: {}, time: { parser: false, unit: false, round: false, isoWeekday: false, minUnit: "millisecond", displayFormats: {} }, ticks: { source: "auto", callback: false, major: { enabled: false } } }); function interpolate3(table, val, reverse) { let lo = 0; let hi = table.length - 1; let prevSource, nextSource, prevTarget, nextTarget; if (reverse) { if (val >= table[lo].pos && val <= table[hi].pos) { ({ lo, hi } = _lookupByKey(table, "pos", val)); } ({ pos: prevSource, time: prevTarget } = table[lo]); ({ pos: nextSource, time: nextTarget } = table[hi]); } else { if (val >= table[lo].time && val <= table[hi].time) { ({ lo, hi } = _lookupByKey(table, "time", val)); } ({ time: prevSource, pos: prevTarget } = table[lo]); ({ time: nextSource, pos: nextTarget } = table[hi]); } const span = nextSource - prevSource; return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget; } var TimeSeriesScale = class extends TimeScale { constructor(props) { super(props); this._table = []; this._minPos = void 0; this._tableRange = void 0; } initOffsets() { const timestamps = this._getTimestampsForTable(); const table = this._table = this.buildLookupTable(timestamps); this._minPos = interpolate3(table, this.min); this._tableRange = interpolate3(table, this.max) - this._minPos; super.initOffsets(timestamps); } buildLookupTable(timestamps) { const { min, max } = this; const items = []; const table = []; let i, ilen, prev, curr, next; for (i = 0, ilen = timestamps.length; i < ilen; ++i) { curr = timestamps[i]; if (curr >= min && curr <= max) { items.push(curr); } } if (items.length < 2) { return [ { time: min, pos: 0 }, { time: max, pos: 1 } ]; } for (i = 0, ilen = items.length; i < ilen; ++i) { next = items[i + 1]; prev = items[i - 1]; curr = items[i]; if (Math.round((next + prev) / 2) !== curr) { table.push({ time: curr, pos: i / (ilen - 1) }); } } return table; } _getTimestampsForTable() { let timestamps = this._cache.all || []; if (timestamps.length) { return timestamps; } const data = this.getDataTimestamps(); const label = this.getLabelTimestamps(); if (data.length && label.length) { timestamps = this.normalize(data.concat(label)); } else { timestamps = data.length ? data : label; } timestamps = this._cache.all = timestamps; return timestamps; } getDecimalForValue(value) { return (interpolate3(this._table, value) - this._minPos) / this._tableRange; } getValueForPixel(pixel) { const offsets = this._offsets; const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end; return interpolate3(this._table, decimal * this._tableRange + this._minPos, true); } }; __publicField(TimeSeriesScale, "id", "timeseries"); __publicField(TimeSeriesScale, "defaults", TimeScale.defaults); // src/stats-modal.tsx Chart.register( BarElement, BarController, plugin_legend, plugin_title, plugin_tooltip, plugin_subtitle, CategoryScale, LinearScale, PieController, ArcElement ); var StatsModal = class extends import_obsidian4.Modal { constructor(app2, plugin) { super(app2); this.plugin = plugin; this.titleEl.setText(`${t("STATS_TITLE")} `); this.titleEl.addClass("sr-centered"); this.titleEl.innerHTML += /* @__PURE__ */ (0, import_vhtml2.default)("select", { id: "sr-chart-period" }, /* @__PURE__ */ (0, import_vhtml2.default)("option", { value: "month", selected: true }, t("MONTH")), /* @__PURE__ */ (0, import_vhtml2.default)("option", { value: "quarter" }, t("QUARTER")), /* @__PURE__ */ (0, import_vhtml2.default)("option", { value: "year" }, t("YEAR")), /* @__PURE__ */ (0, import_vhtml2.default)("option", { value: "lifetime" }, t("LIFETIME"))); this.modalEl.style.height = "100%"; this.modalEl.style.width = "100%"; if (import_obsidian4.Platform.isMobile) { this.contentEl.style.display = "block"; } } onOpen() { const { contentEl } = this; contentEl.style.textAlign = "center"; let maxN = Math.max(...getKeysPreserveType(this.plugin.dueDatesFlashcards)); for (let dueOffset = 0; dueOffset <= maxN; dueOffset++) { if (!Object.prototype.hasOwnProperty.call(this.plugin.dueDatesFlashcards, dueOffset)) { this.plugin.dueDatesFlashcards[dueOffset] = 0; } } const dueDatesFlashcardsCopy = { 0: 0 }; for (const [dueOffset, dueCount] of getTypedObjectEntries(this.plugin.dueDatesFlashcards)) { if (dueOffset <= 0) { dueDatesFlashcardsCopy[0] += dueCount; } else { dueDatesFlashcardsCopy[dueOffset] = dueCount; } } const cardStats = this.plugin.cardStats; const scheduledCount = cardStats.youngCount + cardStats.matureCount; maxN = Math.max(maxN, 1); contentEl.innerHTML += /* @__PURE__ */ (0, import_vhtml2.default)("div", null, /* @__PURE__ */ (0, import_vhtml2.default)("canvas", { id: "forecastChart" }), /* @__PURE__ */ (0, import_vhtml2.default)("span", { id: "forecastChartSummary" }), /* @__PURE__ */ (0, import_vhtml2.default)("br", null), /* @__PURE__ */ (0, import_vhtml2.default)("br", null), /* @__PURE__ */ (0, import_vhtml2.default)("canvas", { id: "intervalsChart" }), /* @__PURE__ */ (0, import_vhtml2.default)("span", { id: "intervalsChartSummary" }), /* @__PURE__ */ (0, import_vhtml2.default)("br", null), /* @__PURE__ */ (0, import_vhtml2.default)("br", null), /* @__PURE__ */ (0, import_vhtml2.default)("canvas", { id: "easesChart" }), /* @__PURE__ */ (0, import_vhtml2.default)("span", { id: "easesChartSummary" }), /* @__PURE__ */ (0, import_vhtml2.default)("br", null), /* @__PURE__ */ (0, import_vhtml2.default)("br", null), /* @__PURE__ */ (0, import_vhtml2.default)("canvas", { id: "cardTypesChart" }), /* @__PURE__ */ (0, import_vhtml2.default)("br", null), /* @__PURE__ */ (0, import_vhtml2.default)("span", { id: "cardTypesChartSummary" })); createStatsChart( "bar", "forecastChart", t("FORECAST"), t("FORECAST_DESC"), Object.keys(dueDatesFlashcardsCopy), Object.values(dueDatesFlashcardsCopy), t("REVIEWS_PER_DAY", { avg: (scheduledCount / maxN).toFixed(1) }), t("SCHEDULED"), t("DAYS"), t("NUMBER_OF_CARDS") ); maxN = Math.max(...getKeysPreserveType(cardStats.intervals)); for (let interval = 0; interval <= maxN; interval++) { if (!Object.prototype.hasOwnProperty.call(cardStats.intervals, interval)) { cardStats.intervals[interval] = 0; } } const average_interval = textInterval( Math.round( getTypedObjectEntries(cardStats.intervals).map(([interval, count]) => interval * count).reduce((a, b) => a + b, 0) / scheduledCount * 10 ) / 10 || 0, false ), longest_interval = textInterval( Math.max(...getKeysPreserveType(cardStats.intervals)) || 0, false ); createStatsChart( "bar", "intervalsChart", t("INTERVALS"), t("INTERVALS_DESC"), Object.keys(cardStats.intervals), Object.values(cardStats.intervals), t("INTERVALS_SUMMARY", { avg: average_interval, longest: longest_interval }), t("COUNT"), t("DAYS"), t("NUMBER_OF_CARDS") ); const eases = getKeysPreserveType(cardStats.eases); for (let ease = Math.min(...eases); ease <= Math.max(...eases); ease++) { if (!Object.prototype.hasOwnProperty.call(cardStats.eases, ease)) { cardStats.eases[ease] = 0; } } const average_ease = Math.round( getTypedObjectEntries(cardStats.eases).map(([ease, count]) => ease * count).reduce((a, b) => a + b, 0) / scheduledCount ) || 0; createStatsChart( "bar", "easesChart", t("EASES"), "", Object.keys(cardStats.eases), Object.values(cardStats.eases), t("EASES_SUMMARY", { avgEase: average_ease }), t("COUNT"), t("EASES"), t("NUMBER_OF_CARDS") ); const totalCardsCount = this.plugin.deckTree.totalFlashcards; createStatsChart( "pie", "cardTypesChart", t("CARD_TYPES"), t("CARD_TYPES_DESC"), [ `${t("CARD_TYPE_NEW")} - ${Math.round( cardStats.newCount / totalCardsCount * 100 )}%`, `${t("CARD_TYPE_YOUNG")} - ${Math.round( cardStats.youngCount / totalCardsCount * 100 )}%`, `${t("CARD_TYPE_MATURE")} - ${Math.round( cardStats.matureCount / totalCardsCount * 100 )}%` ], [cardStats.newCount, cardStats.youngCount, cardStats.matureCount], t("CARD_TYPES_SUMMARY", { totalCardsCount }) ); } onClose() { const { contentEl } = this; contentEl.empty(); } }; function createStatsChart(type, canvasId, title, subtitle, labels, data, summary, seriesTitle = "", xAxisTitle = "", yAxisTitle = "") { const style = getComputedStyle(document.body); const textColor = style.getPropertyValue("--text-normal"); let scales = {}, backgroundColor = ["#2196f3"]; if (type !== "pie") { scales = { x: { title: { display: true, text: xAxisTitle, color: textColor } }, y: { title: { display: true, text: yAxisTitle, color: textColor } } }; } else { backgroundColor = ["#2196f3", "#4caf50", "green"]; } const shouldFilter = canvasId === "forecastChart" || canvasId === "intervalsChart"; const statsChart = new Chart(document.getElementById(canvasId), { type, data: { labels: shouldFilter ? labels.slice(0, 31) : labels, datasets: [ { label: seriesTitle, backgroundColor, data: shouldFilter ? data.slice(0, 31) : data } ] }, options: { scales, plugins: { title: { display: true, text: title, font: { size: 22 }, color: textColor }, subtitle: { display: true, text: subtitle, font: { size: 16, style: "italic" }, color: textColor }, legend: { display: false } }, aspectRatio: 2 } }); if (shouldFilter) { const chartPeriodEl = document.getElementById("sr-chart-period"); chartPeriodEl.addEventListener("click", () => { let filteredLabels, filteredData; const chartPeriod = chartPeriodEl.value; if (chartPeriod === "month") { filteredLabels = labels.slice(0, 31); filteredData = data.slice(0, 31); } else if (chartPeriod === "quarter") { filteredLabels = labels.slice(0, 91); filteredData = data.slice(0, 91); } else if (chartPeriod === "year") { filteredLabels = labels.slice(0, 366); filteredData = data.slice(0, 366); } else { filteredLabels = labels; filteredData = data; } statsChart.data.labels = filteredLabels; statsChart.data.datasets[0] = { label: seriesTitle, backgroundColor, data: filteredData }; statsChart.update(); }); } document.getElementById(`${canvasId}Summary`).innerText = summary; } // src/sidebar.ts var import_obsidian5 = require("obsidian"); var REVIEW_QUEUE_VIEW_TYPE = "review-queue-list-view"; var ReviewQueueListView = class extends import_obsidian5.ItemView { constructor(leaf, plugin) { super(leaf); this.plugin = plugin; this.registerEvent(this.app.workspace.on("file-open", () => this.redraw())); this.registerEvent(this.app.vault.on("rename", () => this.redraw())); } getViewType() { return REVIEW_QUEUE_VIEW_TYPE; } getDisplayText() { return t("NOTES_REVIEW_QUEUE"); } getIcon() { return "SpacedRepIcon"; } onHeaderMenu(menu) { menu.addItem((item) => { item.setTitle(t("CLOSE")).setIcon("cross").onClick(() => { this.app.workspace.detachLeavesOfType(REVIEW_QUEUE_VIEW_TYPE); }); }); } redraw() { const activeFile = this.app.workspace.getActiveFile(); const rootEl = createDiv("nav-folder mod-root"); const childrenEl = rootEl.createDiv("nav-folder-children"); for (const deckKey in this.plugin.reviewDecks) { const deck = this.plugin.reviewDecks[deckKey]; const deckCollapsed = !deck.activeFolders.has(deck.deckName); const deckFolderEl = this.createRightPaneFolder( childrenEl, deckKey, deckCollapsed, false, deck ).getElementsByClassName("nav-folder-children")[0]; if (deck.newNotes.length > 0) { const newNotesFolderEl = this.createRightPaneFolder( deckFolderEl, t("NEW"), !deck.activeFolders.has(t("NEW")), deckCollapsed, deck ); for (const newFile of deck.newNotes) { const fileIsOpen = activeFile && newFile.path === activeFile.path; if (fileIsOpen) { deck.activeFolders.add(deck.deckName); deck.activeFolders.add(t("NEW")); this.changeFolderIconToExpanded(newNotesFolderEl); this.changeFolderIconToExpanded(deckFolderEl); } this.createRightPaneFile( newNotesFolderEl, newFile, fileIsOpen, !deck.activeFolders.has(t("NEW")), deck, this.plugin ); } } if (deck.scheduledNotes.length > 0) { const now = Date.now(); let currUnix = -1; let schedFolderEl = null, folderTitle = ""; const maxDaysToRender = this.plugin.data.settings.maxNDaysNotesReviewQueue; for (const sNote of deck.scheduledNotes) { if (sNote.dueUnix != currUnix) { const nDays = Math.ceil((sNote.dueUnix - now) / (24 * 3600 * 1e3)); if (nDays > maxDaysToRender) { break; } if (nDays === -1) { folderTitle = t("YESTERDAY"); } else if (nDays === 0) { folderTitle = t("TODAY"); } else if (nDays === 1) { folderTitle = t("TOMORROW"); } else { folderTitle = new Date(sNote.dueUnix).toDateString(); } schedFolderEl = this.createRightPaneFolder( deckFolderEl, folderTitle, !deck.activeFolders.has(folderTitle), deckCollapsed, deck ); currUnix = sNote.dueUnix; } const fileIsOpen = activeFile && sNote.note.path === activeFile.path; if (fileIsOpen) { deck.activeFolders.add(deck.deckName); deck.activeFolders.add(folderTitle); this.changeFolderIconToExpanded(schedFolderEl); this.changeFolderIconToExpanded(deckFolderEl); } this.createRightPaneFile( schedFolderEl, sNote.note, fileIsOpen, !deck.activeFolders.has(folderTitle), deck, this.plugin ); } } } const contentEl = this.containerEl.children[1]; contentEl.empty(); contentEl.appendChild(rootEl); } createRightPaneFolder(parentEl, folderTitle, collapsed, hidden, deck) { const folderEl = parentEl.createDiv("nav-folder"); const folderTitleEl = folderEl.createDiv("nav-folder-title"); const childrenEl = folderEl.createDiv("nav-folder-children"); const collapseIconEl = folderTitleEl.createDiv( "nav-folder-collapse-indicator collapse-icon" ); collapseIconEl.innerHTML = COLLAPSE_ICON; if (collapsed) { collapseIconEl.childNodes[0].style.transform = "rotate(-90deg)"; } folderTitleEl.createDiv("nav-folder-title-content").setText(folderTitle); if (hidden) { folderEl.style.display = "none"; } folderTitleEl.onClickEvent(() => { for (const child of childrenEl.childNodes) { if (child.style.display === "block" || child.style.display === "") { child.style.display = "none"; collapseIconEl.childNodes[0].style.transform = "rotate(-90deg)"; deck.activeFolders.delete(folderTitle); } else { child.style.display = "block"; collapseIconEl.childNodes[0].style.transform = ""; deck.activeFolders.add(folderTitle); } } }); return folderEl; } createRightPaneFile(folderEl, file, fileElActive, hidden, deck, plugin) { const navFileEl = folderEl.getElementsByClassName("nav-folder-children")[0].createDiv("nav-file"); if (hidden) { navFileEl.style.display = "none"; } const navFileTitle = navFileEl.createDiv("nav-file-title"); if (fileElActive) { navFileTitle.addClass("is-active"); } navFileTitle.createDiv("nav-file-title-content").setText(file.basename); navFileTitle.addEventListener( "click", async (event) => { event.preventDefault(); plugin.lastSelectedReviewDeck = deck.deckName; await this.app.workspace.getLeaf().openFile(file); return false; }, false ); navFileTitle.addEventListener( "contextmenu", (event) => { event.preventDefault(); const fileMenu = new import_obsidian5.Menu(); this.app.workspace.trigger("file-menu", fileMenu, file, "my-context-menu", null); fileMenu.showAtPosition({ x: event.pageX, y: event.pageY }); return false; }, false ); } changeFolderIconToExpanded(folderEl) { const collapseIconEl = folderEl.find("div.nav-folder-collapse-indicator"); collapseIconEl.childNodes[0].style.transform = ""; } }; // src/review-deck.ts var import_obsidian6 = require("obsidian"); var ReviewDeck = class { constructor(name) { this.newNotes = []; this.scheduledNotes = []; this.dueNotesCount = 0; this.deckName = name; this.activeFolders = /* @__PURE__ */ new Set([this.deckName, t("TODAY")]); } sortNotes(pageranks) { this.newNotes = this.newNotes.sort( (a, b) => (pageranks[b.path] || 0) - (pageranks[a.path] || 0) ); this.scheduledNotes = this.scheduledNotes.sort((a, b) => { const result = a.dueUnix - b.dueUnix; if (result != 0) { return result; } return (pageranks[b.note.path] || 0) - (pageranks[a.note.path] || 0); }); } }; var ReviewDeckSelectionModal = class extends import_obsidian6.FuzzySuggestModal { constructor(app2, deckKeys) { super(app2); this.deckKeys = []; this.deckKeys = deckKeys; } getItems() { return this.deckKeys; } getItemText(item) { return item; } onChooseItem(deckKey, _) { this.close(); this.submitCallback(deckKey); } }; // src/parser.ts function parse2(text, singlelineCardSeparator, singlelineReversedCardSeparator, multilineCardSeparator, multilineReversedCardSeparator, convertHighlightsToClozes, convertBoldTextToClozes, convertCurlyBracketsToClozes) { let cardText = ""; const cards = []; let cardType = null; let lineNo = 0; const lines = text.replaceAll("\r\n", "\n").split("\n"); for (let i = 0; i < lines.length; i++) { if (lines[i].length === 0) { if (cardType) { cards.push([cardType, cardText, lineNo]); cardType = null; } cardText = ""; continue; } else if (lines[i].startsWith("")) i++; i++; continue; } if (cardText.length > 0) { cardText += "\n"; } cardText += lines[i]; if (lines[i].includes(singlelineReversedCardSeparator) || lines[i].includes(singlelineCardSeparator)) { cardType = lines[i].includes(singlelineReversedCardSeparator) ? 1 /* SingleLineReversed */ : 0 /* SingleLineBasic */; cardText = lines[i]; lineNo = i; if (i + 1 < lines.length && lines[i + 1].startsWith(""; const replacementRegex = new RegExp(escapeRegexString(cardText), "gm"); fileText = fileText.replace(replacementRegex, () => newCardText); fileChanged = true; } const context = settings.showContextInCards ? getCardContext(lineNo, headings, note.basename) : ""; const siblings = []; for (let i = 0; i < siblingMatches.length; i++) { const front = siblingMatches[i][0].trim(), back = siblingMatches[i][1].trim(); const cardObj = { isDue: i < scheduling.length, note, lineNo, front, back, cardText, context, cardType, siblingIdx: i, siblings, editLater: false }; if (ignoreStats) { this.cardStats.newCount++; cardObj.isDue = true; this.deckTree.insertFlashcard([...deckPath], cardObj); } else if (i < scheduling.length) { const dueUnix = window.moment(scheduling[i][1], ["YYYY-MM-DD", "DD-MM-YYYY"]).valueOf(); const nDays = Math.ceil((dueUnix - now) / (24 * 3600 * 1e3)); if (!Object.prototype.hasOwnProperty.call(this.dueDatesFlashcards, nDays)) { this.dueDatesFlashcards[nDays] = 0; } this.dueDatesFlashcards[nDays]++; const interval = parseInt(scheduling[i][2]), ease = parseInt(scheduling[i][3]); if (!Object.prototype.hasOwnProperty.call(this.cardStats.intervals, interval)) { this.cardStats.intervals[interval] = 0; } this.cardStats.intervals[interval]++; if (!Object.prototype.hasOwnProperty.call(this.cardStats.eases, ease)) { this.cardStats.eases[ease] = 0; } this.cardStats.eases[ease]++; totalNoteEase += ease; scheduledCount++; if (interval >= 32) { this.cardStats.matureCount++; } else { this.cardStats.youngCount++; } if (this.data.buryList.includes(cardTextHash)) { this.deckTree.countFlashcard([...deckPath]); continue; } if (dueUnix <= now) { cardObj.interval = interval; cardObj.ease = ease; cardObj.delayBeforeReview = now - dueUnix; this.deckTree.insertFlashcard([...deckPath], cardObj); } else { this.deckTree.countFlashcard([...deckPath]); continue; } } else { this.cardStats.newCount++; if (this.data.buryList.includes(cyrb53(cardText))) { this.deckTree.countFlashcard([...deckPath]); continue; } this.deckTree.insertFlashcard([...deckPath], cardObj); } siblings.push(cardObj); } } if (fileChanged) { await this.app.vault.modify(note, fileText); } if (scheduledCount > 0) { const flashcardsInNoteAvgEase = totalNoteEase / scheduledCount; const flashcardContribution = Math.min( 1, Math.log(scheduledCount + 0.5) / Math.log(64) ); return flashcardsInNoteAvgEase * flashcardContribution + settings.baseEase * (1 - flashcardContribution); } return 0; } async loadPluginData() { this.data = Object.assign({}, DEFAULT_DATA, await this.loadData()); this.data.settings = Object.assign({}, DEFAULT_SETTINGS, this.data.settings); } async savePluginData() { await this.saveData(this.data); } initView() { this.registerView( REVIEW_QUEUE_VIEW_TYPE, (leaf) => this.reviewQueueView = new ReviewQueueListView(leaf, this) ); if (this.data.settings.enableNoteReviewPaneOnStartup && app.workspace.getLeavesOfType(REVIEW_QUEUE_VIEW_TYPE).length == 0) { this.app.workspace.getRightLeaf(false).setViewState({ type: REVIEW_QUEUE_VIEW_TYPE, active: true }); } } }; function getCardContext(cardLine, headings, note_title) { const stack = []; for (const heading of headings) { if (heading.position.start.line > cardLine) { break; } while (stack.length > 0 && stack[stack.length - 1].level >= heading.level) { stack.pop(); } stack.push(heading); } let context = `${note_title} > `; for (const headingObj of stack) { headingObj.heading = headingObj.heading.replace(/\[\^\d+\]/gm, "").trim(); context += `${headingObj.heading} > `; } return context.slice(0, -3); } /*! Bundled license information: @kurkle/color/dist/color.esm.js: (*! * @kurkle/color v0.3.2 * https://github.com/kurkle/color#readme * (c) 2023 Jukka Kurkela * Released under the MIT License *) chart.js/dist/chunks/helpers.segment.js: (*! * Chart.js v4.3.0 * https://www.chartjs.org * (c) 2023 Chart.js Contributors * Released under the MIT License *) chart.js/dist/chart.js: (*! * Chart.js v4.3.0 * https://www.chartjs.org * (c) 2023 Chart.js Contributors * Released under the MIT License *) */ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL3BhZ2VyYW5rLmpzL2xpYi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdmh0bWwvc3JjL2VtcHR5LXRhZ3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3ZodG1sL3NyYy92aHRtbC5qcyIsICIuLi9zcmMvbWFpbi50cyIsICIuLi9zcmMvc2V0dGluZ3MudHMiLCAiLi4vc3JjL2xhbmcvaGVscGVycy50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvYWYudHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL2FyLnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS9jei50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvYm4udHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL2RhLnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS9kZS50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvZW4udHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL2VuLWdiLnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS9lcy50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvZnIudHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL2hpLnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS9pZC50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvaXQudHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL2phLnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS9rby50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvbXIudHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL25sLnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS9uby50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvcGwudHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL3B0LnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS9wdC1ici50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvcm8udHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL3J1LnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS90YS50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvdGUudHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL3RoLnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS90ci50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvdWsudHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL3VyLnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS92aS50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvemgtY24udHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL3poLXR3LnRzIiwgIi4uL3NyYy9mbGFzaGNhcmQtbW9kYWwudHN4IiwgIi4uL3NyYy9zY2hlZHVsaW5nLnRzIiwgIi4uL3NyYy9jb25zdGFudHMudHMiLCAiLi4vc3JjL3V0aWxzLnRzIiwgIi4uL3NyYy9zdGF0cy1tb2RhbC50c3giLCAiLi4vbm9kZV9tb2R1bGVzL0BrdXJrbGUvY29sb3IvZGlzdC9jb2xvci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMuY29yZS50cyIsICIuLi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2hlbHBlcnMvaGVscGVycy5tYXRoLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvaGVscGVycy9oZWxwZXJzLmNvbGxlY3Rpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMuZXh0cmFzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvaGVscGVycy9oZWxwZXJzLmVhc2luZy50cyIsICIuLi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2hlbHBlcnMvaGVscGVycy5jb2xvci50cyIsICIuLi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS5hbmltYXRpb25zLmRlZmF1bHRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLmxheW91dHMuZGVmYXVsdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMuaW50bC50cyIsICIuLi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS50aWNrcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS5zY2FsZS5kZWZhdWx0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS5kZWZhdWx0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2hlbHBlcnMvaGVscGVycy5jYW52YXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMub3B0aW9ucy50cyIsICIuLi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2hlbHBlcnMvaGVscGVycy5jb25maWcudHMiLCAiLi4vbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMuY3VydmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMuZG9tLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvaGVscGVycy9oZWxwZXJzLmludGVycG9sYXRpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMucnRsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvaGVscGVycy9oZWxwZXJzLnNlZ21lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUuYW5pbWF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUuYW5pbWF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLmFuaW1hdGlvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUuZGF0YXNldENvbnRyb2xsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb250cm9sbGVycy9jb250cm9sbGVyLmJhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvbnRyb2xsZXJzL2NvbnRyb2xsZXIuYnViYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29udHJvbGxlcnMvY29udHJvbGxlci5kb3VnaG51dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvbnRyb2xsZXJzL2NvbnRyb2xsZXIubGluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvbnRyb2xsZXJzL2NvbnRyb2xsZXIucG9sYXJBcmVhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29udHJvbGxlcnMvY29udHJvbGxlci5waWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb250cm9sbGVycy9jb250cm9sbGVyLnJhZGFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29udHJvbGxlcnMvY29udHJvbGxlci5zY2F0dGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLmFkYXB0ZXJzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLmludGVyYWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLmxheW91dHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbGF0Zm9ybS9wbGF0Zm9ybS5iYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvcGxhdGZvcm0vcGxhdGZvcm0uYmFzaWMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbGF0Zm9ybS9wbGF0Zm9ybS5kb20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbGF0Zm9ybS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS5lbGVtZW50LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLnNjYWxlLmF1dG9za2lwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLnNjYWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLnR5cGVkUmVnaXN0cnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUucmVnaXN0cnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUucGx1Z2lucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS5jb25maWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUuY29udHJvbGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2VsZW1lbnRzL2VsZW1lbnQuYXJjLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvZWxlbWVudHMvZWxlbWVudC5saW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvZWxlbWVudHMvZWxlbWVudC5wb2ludC50cyIsICIuLi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2VsZW1lbnRzL2VsZW1lbnQuYmFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvcGx1Z2lucy9wbHVnaW4uY29sb3JzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvcGx1Z2lucy9wbHVnaW4uZGVjaW1hdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3BsdWdpbnMvcGx1Z2luLmZpbGxlci9maWxsZXIuc2VnbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3BsdWdpbnMvcGx1Z2luLmZpbGxlci9maWxsZXIuaGVscGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvcGx1Z2lucy9wbHVnaW4uZmlsbGVyL2ZpbGxlci5vcHRpb25zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvcGx1Z2lucy9wbHVnaW4uZmlsbGVyL2ZpbGxlci50YXJnZXQuc3RhY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbHVnaW5zL3BsdWdpbi5maWxsZXIvc2ltcGxlQXJjLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvcGx1Z2lucy9wbHVnaW4uZmlsbGVyL2ZpbGxlci50YXJnZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbHVnaW5zL3BsdWdpbi5maWxsZXIvZmlsbGVyLmRyYXdpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbHVnaW5zL3BsdWdpbi5maWxsZXIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbHVnaW5zL3BsdWdpbi5sZWdlbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbHVnaW5zL3BsdWdpbi50aXRsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3BsdWdpbnMvcGx1Z2luLnN1YnRpdGxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvcGx1Z2lucy9wbHVnaW4udG9vbHRpcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3NjYWxlcy9zY2FsZS5jYXRlZ29yeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3NjYWxlcy9zY2FsZS5saW5lYXJiYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvc2NhbGVzL3NjYWxlLmxpbmVhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3NjYWxlcy9zY2FsZS5sb2dhcml0aG1pYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3NjYWxlcy9zY2FsZS5yYWRpYWxMaW5lYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9zY2FsZXMvc2NhbGUudGltZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3NjYWxlcy9zY2FsZS50aW1lc2VyaWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvaW5kZXgudHMiLCAiLi4vc3JjL3NpZGViYXIudHMiLCAiLi4vc3JjL3Jldmlldy1kZWNrLnRzIiwgIi4uL3NyYy9wYXJzZXIudHMiLCAiLi4vc3JjL2ljb25zL2FwcGljb24udHMiXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBLG1EQUFBQSxTQUFBO0FBQUE7QUFFQSxhQUFTLE9BQU8sUUFBUUMsV0FBVTtBQUM5QixVQUFLLE9BQU8sV0FBVyxZQUFjLE9BQU9BLGNBQWEsWUFBYTtBQUNsRSxpQkFBUyxPQUFPLFFBQVE7QUFDcEIsY0FBSSxPQUFPLGVBQWUsR0FBRyxNQUFNLE1BQU07QUFDckMsZ0JBQUlBLFVBQVMsS0FBSyxPQUFPLEdBQUcsQ0FBQyxNQUFNLE9BQU87QUFDdEM7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUVBLElBQUFELFFBQU8sVUFBVyxXQUFZO0FBQzFCLFVBQUksT0FBTztBQUFBLFFBQ1AsT0FBTztBQUFBLFFBQ1AsT0FBTyxDQUFDO0FBQUEsUUFDUixPQUFPLENBQUM7QUFBQSxNQUNaO0FBRUEsV0FBSyxPQUFPLFNBQVUsUUFBUSxRQUFRLFFBQVE7QUFDMUMsWUFBSyxTQUFTLE1BQU0sTUFBTSxRQUFVLFdBQVcsTUFBTztBQUNsRCxtQkFBUztBQUFBLFFBQ2I7QUFFQSxpQkFBUyxXQUFXLE1BQU07QUFFMUIsWUFBSSxLQUFLLE1BQU0sZUFBZSxNQUFNLE1BQU0sTUFBTTtBQUM1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LEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFBQSxFQUNILEdBQUc7QUFDTDtBQUNBLElBQU0sVUFBVTtBQUFBLEVBQ2QsUUFBUTtBQUFBLEVBQ1IsYUFBYTtBQUFBLEVBQ2IsTUFBTTtBQUFBLEVBQ04sV0FBVztBQUFBLEVBQ1gsTUFBTTtBQUFBLEVBQ04sT0FBTztBQUFBLEVBQ1AsUUFBUTtBQUFBLEVBQ1IsT0FBTztBQUFBLEVBQ1AsY0FBYztBQUFBLEVBQ2QsSUFBSTtBQUFBLEVBQ0osU0FBUztBQUFBLEVBQ1QsTUFBTTtBQUFBLEVBQ04sV0FBVztBQUFBLEVBQ1gsUUFBUTtBQUFBLEVBQ1IsVUFBVTtBQUFBLEVBQ1YsU0FBUztBQUFBLEVBQ1QsS0FBSztBQUFBLEVBQ0wsYUFBYTtBQUFBLEVBQ2IsU0FBUztBQUFBLEVBQ1QsU0FBUztBQUFBLEVBQ1QsTUFBTTtBQUFBLEVBQ04sS0FBSztBQUFBLEVBQ0wsT0FBTztBQUFBLEVBQ1AsU0FBUztBQUFBLEVBQ1QsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sUUFBUTtBQUFBLEVBQ1IsU0FBUztBQUFBLEVBQ1QsVUFBVTtBQUFBLEVBQ1YsUUFBUTtBQUFBLEVBQ1IsT0FBTztBQUFBLEVBQ1AsS0FBSztBQUFBLEVBQ0wsUUFBUTtBQUFBLEVBQ1IsUUFBUTtBQUFBLEVBQ1IsTUFBTTtBQUFBLEVBQ04sT0FBTztBQUFBLEVBQ1AsT0FBTztBQUFBLEVBQ1AsS0FBSztBQUFBLEVBQ0wsUUFBUTtBQUFBLEVBQ1IsUUFBUTtBQUFBLEVBQ1IsVUFBVTtBQUFBLEVBQ1YsUUFBUTtBQUFBLEVBQ1IsUUFBUTtBQUFBLEVBQ1IsVUFBVTtBQUFBLEVBQ1YsVUFBVTtBQUFBLEVBQ1YsVUFBVTtBQUFBLEVBQ1YsVUFBVTtBQUFBLEVBQ1YsUUFBUTtBQUFBLEVBQ1IsU0FBUztBQUFBLEVBQ1QsV0FBVztBQUFBLEVBQ1gsS0FBSztBQUFBLEVBQ0wsUUFBUTtBQUFBLEVBQ1IsS0FBSztBQUFBLEVBQ0wsS0FBSztBQUFBLEVBQ0wsT0FBTztBQUFBLEVBQ1AsS0FBSztBQUFBLEVBQ0wsU0FBUztBQUFBLEVBQ1QsUUFBUTtBQUFBLEVBQ1IsU0FBUztBQUFBLEVBQ1QsT0FBTztBQUFBLEVBQ1AsTUFBTTtBQUFBLEVBQ04sT0FBTztBQUFBLEVBQ1AsUUFBUTtBQUFBLEVBQ1IsV0FBVztBQUFBLEVBQ1gsU0FBUztBQUFBLEVBQ1QsWUFBWTtBQUFBLEVBQ1osS0FBSztBQUFBLEVBQ0wsTUFBTTtBQUFBLEVBQ04sT0FBTztBQUFBLEVBQ1AsV0FBVztBQUFBLEVBQ1gsTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sTUFBTTtBQUFBLEVBQ04sUUFBUTtBQUFBLEVBQ1IsUUFBUTtBQUFBLEVBQ1IsUUFBUTtBQUFBLEVBQ1IsT0FBTztBQUFBLEVBQ1AsT0FBTztBQUFBLEVBQ1AsU0FBUztBQUFBLEVBQ1QsS0FBSztBQUFBLEVBQ0wsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUFBLEVBQ1QsS0FBSztBQUFBLEVBQ0wsUUFBUTtBQUFBLEVBQ1IsT0FBTztBQUFBLEVBQ1AsWUFBWTtBQUFBLEVBQ1osS0FBSztBQUFBLEVBQ0wsT0FBTztBQUFBLEVBQ1AsUUFBUTtBQUFBLEVBQ1IsUUFBUTtBQUFBLEVBQ1IsTUFBTTtBQUFBLEVBQ04sV0FBVztBQUFBLEVBQ1gsS0FBSztBQUFBLEVBQ0wsVUFBVTtBQUFBLEVBQ1YsWUFBWTtBQUFBLEVBQ1osU0FBUztBQUFBLEVBQ1QsVUFBVTtBQUFBLEVBQ1YsU0FBUztBQUFBLEVBQ1QsWUFBWTtBQUFBLEVBQ1osTUFBTTtBQUFBLEVBQ04sUUFBUTtBQUFBLEVBQ1IsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUFBLEVBQ1QsT0FBTztBQUFBLEVBQ1AsU0FBUztBQUFBLEVBQ1QsTUFBTTtBQUFBLEVBQ04sV0FBVztBQUFBLEVBQ1gsUUFBUTtBQUFBLEVBQ1IsT0FBTztBQUFBLEVBQ1AsWUFBWTtBQUFBLEVBQ1osV0FBVztBQUFB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QUFBQSxRQUNoRCxNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsTUFDWixDQUFDO0FBQUEsSUFDTDtBQUFBLEVBQ0o7QUFDSjtBQUVBLFNBQVMsZUFBZSxVQUFrQixVQUEwQixZQUE0QjtBQUM1RixRQUFNLFFBQXdCLENBQUM7QUFDL0IsYUFBVyxXQUFXLFVBQVU7QUFDNUIsUUFBSSxRQUFRLFNBQVMsTUFBTSxPQUFPLFVBQVU7QUFDeEM7QUFBQSxJQUNKO0FBRUEsV0FBTyxNQUFNLFNBQVMsS0FBSyxNQUFNLE1BQU0sU0FBUyxDQUFDLEVBQUUsU0FBUyxRQUFRLE9BQU87QUFDdkUsWUFBTSxJQUFJO0FBQUEsSUFDZDtBQUVBLFVBQU0sS0FBSyxPQUFPO0FBQUEsRUFDdEI7QUFFQSxNQUFJLFVBQVUsR0FBRztBQUNqQixhQUFXLGNBQWMsT0FBTztBQUM1QixlQUFXLFVBQVUsV0FBVyxRQUFRLFFBQVEsZUFBZSxFQUFFLEVBQUUsS0FBSztBQUN4RSxlQUFXLEdBQUcsV0FBVztBQUFBLEVBQzdCO0FBQ0EsU0FBTyxRQUFRLE1BQU0sR0FBRyxFQUFFO0FBQzlCOyIsCiAgIm5hbWVzIjogWyJtb2R1bGUiLCAiY2FsbGJhY2siLCAiYWxwaGEiLCAiZXNjIiwgIlN0cmluZyIsICJzdHIiLCAicmVwbGFjZSIsICJtYXAiLCAicyIsICJzZXRJbm5lckhUTUxBdHRyIiwgIkRPTUF0dHJpYnV0ZU5hbWVzIiwgInNhbml0aXplZCIsICJoIiwgIm5hbWUiLCAiYXR0cnMiLCAic3RhY2siLCAiaSIsICJhcmd1bWVudHMiLCAibGVuZ3RoIiwgInB1c2giLCAiY2hpbGRyZW4iLCAicmV2ZXJzZSIsICJlbXB0eVRhZ3MiLCAiaW5kZXhPZiIsICJfX2h0bWwiLCAiY2hpbGQiLCAicG9wIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAibmFtZXMiLCAiY2FsbGJhY2siLCAiYXBwIiwgImltcG9ydF9vYnNpZGlhbiIsICJoMSIsICJoMiIsICJhcHAiLCAicmVzb2x2ZSIsICJjYWxsYmFjayIsICJ2YWx1ZSIsICJoIiwgImxpbmsiLCAiZGVjayIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X3ZodG1sIiwgImgiLCAiaCIsICJpbnRlcnBvbGF0ZSIsICJ0IiwgImNvbG9yIiwgIm5vb3AiLCAidWlkIiwgImlkIiwgImlzTnVsbE9yVW5kZWYiLCAidmFsdWUiLCAiaXNBcnJheSIsICJBcnJheSIsICJ0eXBlIiwgIk9iamVjdCIsICJwcm90b3R5cGUiLCAidG9TdHJpbmciLCAiY2FsbCIsICJzbGljZSIsICJpc09iamVjdCIsICJpc051bWJlckZpbml0ZSIsICJOdW1iZXIiLCAiaXNGaW5pdGUiLCAiZmluaXRlT3JEZWZhdWx0IiwgImRlZmF1bHRWYWx1ZSIsICJ2YWx1ZU9yRGVmYXVsdCIsICJ0b1BlcmNlbnRhZ2UiLCAiZGltZW5zaW9uIiwgImVuZHNXaXRoIiwgInBhcnNlRmxvYXQiLCAidG9EaW1lbnNpb24iLCAiY2FsbGJhY2siLCAiZm4iLCAiYXJncyIsICJ0aGlzQXJnIiwgImFwcGx5IiwgImVhY2giLCAibG9vcGFibGUiLCAicmV2ZXJzZSIsICJpIiwgImxlbiIsICJrZXlzIiwgImxlbmd0aCIsICJfZWxlbWVudHNFcXVhbCIsICJhMCIsICJhMSIsICJpbGVuIiwgInYwIiwgInYxIiwgImRhdGFzZXRJbmRleCIsICJpbmRleCIsICJjbG9uZSIsICJzb3VyY2UiLCAibWFwIiwgInRhcmdldCIsICJjcmVhdGUiLCAia2xlbiIsICJrIiwgImlzVmFsaWRLZXkiLCAia2V5IiwgImluZGV4T2YiLCAiX21lcmdlciIsICJvcHRpb25zIiwgInR2YWwiLCAic3ZhbCIsICJtZXJnZSIsICJzb3VyY2VzIiwgIm1lcmdlciIsICJjdXJyZW50IiwgIm1lcmdlSWYiLCAiX21lcmdlcklmIiwgImhhc093blByb3BlcnR5IiwgImtleVJlc29sdmVycyIsICJ2IiwgIngiLCAibyIsICJ5IiwgIl9zcGxpdEtleSIsICJrZXkiLCAicGFydHMiLCAic3BsaXQiLCAia2V5cyIsICJ0bXAiLCAicGFydCIsICJlbmRzV2l0aCIsICJzbGljZSIsICJwdXNoIiwgIl9nZXRLZXlSZXNvbHZlciIsICJvYmoiLCAiayIsICJyZXNvbHZlT2JqZWN0S2V5IiwgInJlc29sdmVyIiwgIl9jYXBpdGFsaXplIiwgInN0ciIsICJjaGFyQXQiLCAidG9VcHBlckNhc2UiLCAiZGVmaW5lZCIsICJ2YWx1ZSIsICJpc0Z1bmN0aW9uIiwgInNldHNFcXVhbCIsICJhIiwgImIiLCAic2l6ZSIsICJpdGVtIiwgImhhcyIsICJfaXNDbGlja0V2ZW50IiwgImUiLCAidHlwZSIsICJQSSIsICJNYXRoIiwgIlRBVSIsICJQSVRBVSIsICJJTkZJTklUWSIsICJOdW1iZXIiLCAiUE9TSVRJVkVfSU5GSU5JVFkiLCAiUkFEX1BFUl9ERUciLCAiSEFMRl9QSSIsICJRVUFSVEVSX1BJIiwgIlRXT19USElSRFNfUEkiLCAibG9nMTAiLCAic2lnbiIsICJhbG1vc3RFcXVhbHMiLCAiZXBzaWxvbiIsICJhYnMiLCAibmljZU51bSIsICJyYW5nZSIsICJyb3VuZGVkUmFuZ2UiLCAicm91bmQiLCAibmljZVJhbmdlIiwgInBvdyIsICJmbG9vciIsICJmcmFjdGlvbiIsICJuaWNlRnJhY3Rpb24iLCAiX2ZhY3Rvcml6ZSIsICJyZXN1bHQiLCAic3FydCIsICJpIiwgInNvcnQiLCAicG9wIiwgImlzTnVtYmVyIiwgIm4iLCAiaXNOYU4iLCAicGFyc2VGbG9hdCIsICJpc0Zpbml0ZSIsICJhbG1vc3RXaG9sZSIsICJyb3VuZGVkIiwgIl9zZXRNaW5BbmRNYXhCeUtleSIsICJhcnJheSIsICJ0YXJnZXQiLCAicHJvcGVydHkiLCAiaWxlbiIsICJsZW5ndGgiLCAibWluIiwgIm1heCIsICJ0b1JhZGlhbnMiLCAiZGVncmVlcyIsICJ0b0RlZ3JlZXMiLCAicmFkaWFucyIsICJfZGVjaW1hbFBsYWNlcyIsICJpc0Zpbml0ZU51bWJlciIsICJwIiwgImdldEFuZ2xlRnJvbVBvaW50IiwgImNlbnRyZVBvaW50IiwgImFuZ2xlUG9pbnQiLCAiZGlzdGFuY2VGcm9tWENlbnRlciIsICJkaXN0YW5jZUZyb21ZQ2VudGVyIiwgInJhZGlhbERpc3RhbmNlRnJvbUNlbnRlciIsICJhbmdsZSIsICJhdGFuMiIsICJkaXN0YW5jZSIsICJkaXN0YW5jZUJldHdlZW5Qb2ludHMiLCAicHQxIiwgInB0MiIsICJfbm9ybWFsaXplQW5nbGUiLCAiYSIsICJUQVUiLCAiX2FuZ2xlQmV0d2VlbiIsICJhbmdsZSIsICJzdGFydCIsICJlbmQiLCAic2FtZUFuZ2xlSXNGdWxsQ2lyY2xlIiwgInMiLCAiZSIsICJhbmdsZVRvU3RhcnQiLCAiYW5nbGVUb0VuZCIsICJzdGFydFRvQW5nbGUiLCAiZW5kVG9BbmdsZSIsICJfbGltaXRWYWx1ZSIsICJ2YWx1ZSIsICJtaW4iLCAibWF4IiwgIk1hdGgiLCAiX2ludDE2UmFuZ2UiLCAiX2lzQmV0d2VlbiIsICJlcHNpbG9uIiwgIl9sb29rdXAiLCAidGFibGUiLCAiY21wIiwgImluZGV4IiwgImhpIiwgImxlbmd0aCIsICJsbyIsICJtaWQiLCAiX2xvb2t1cEJ5S2V5IiwgImtleSIsICJsYXN0IiwgInRpIiwgIl9ybG9va3VwQnlLZXkiLCAiX2ZpbHRlckJldHdlZW4iLCAidmFsdWVzIiwgInNsaWNlIiwgImFycmF5RXZlbnRzIiwgImxpc3RlbkFycmF5RXZlbnRzIiwgImFycmF5IiwgImxpc3RlbmVyIiwgIl9jaGFydGpzIiwgImxpc3RlbmVycyIsICJwdXNoIiwgIk9iamVjdCIsICJkZWZpbmVQcm9wZXJ0eSIsICJjb25maWd1cmFibGUiLCAiZW51bWVyYWJsZSIsICJmb3JFYWNoIiwgIm1ldGhvZCIsICJfY2FwaXRhbGl6ZSIsICJiYXNlIiwgImFyZ3MiLCAicmVzIiwgImFwcGx5IiwgIm9iamVjdCIsICJ1bmxpc3RlbkFycmF5RXZlbnRzIiwgInN0dWIiLCAiaW5kZXhPZiIsICJzcGxpY2UiLCAiX2FycmF5VW5pcXVlIiwgIml0ZW1zIiwgInNldCIsICJTZXQiLCAic2l6ZSIsICJBcnJheSIsICJmcm9tIiwgInJlcXVlc3RBbmltRnJhbWUiLCAid2luZG93IiwgImNhbGxiYWNrIiwgInJlcXVlc3RBbmltYXRpb25GcmFtZSIsICJ0aHJvdHRsZWQiLCAiZm4iLCAidGhpc0FyZyIsICJhcmdzVG9Vc2UiLCAidGlja2luZyIsICJhcmdzIiwgImNhbGwiLCAiYXBwbHkiLCAiZGVib3VuY2UiLCAiZGVsYXkiLCAidGltZW91dCIsICJjbGVhclRpbWVvdXQiLCAic2V0VGltZW91dCIsICJfdG9MZWZ0UmlnaHRDZW50ZXIiLCAiYWxpZ24iLCAiX2FsaWduU3RhcnRFbmQiLCAic3RhcnQiLCAiZW5kIiwgIl90ZXh0WCIsICJsZWZ0IiwgInJpZ2h0IiwgInJ0bCIsICJjaGVjayIsICJhdEVkZ2UiLCAidCIsICJlbGFzdGljSW4iLCAicyIsICJwIiwgIk1hdGgiLCAicG93IiwgInNpbiIsICJUQVUiLCAiZWxhc3RpY091dCIsICJlZmZlY3RzIiwgImxpbmVhciIsICJlYXNlSW5RdWFkIiwgImVhc2VPdXRRdWFkIiwgImVhc2VJbk91dFF1YWQiLCAiZWFzZUluQ3ViaWMiLCAiZWFzZU91dEN1YmljIiwgImVhc2VJbk91dEN1YmljIiwgImVhc2VJblF1YXJ0IiwgImVhc2VPdXRRdWFydCIsICJlYXNlSW5PdXRRdWFydCIsICJlYXNlSW5RdWludCIsICJlYXNlT3V0UXVpbnQiLCAiZWFzZUluT3V0UXVpbnQiLCAiZWFzZUluU2luZSIsICJjb3MiLCAiSEFMRl9QSSIsICJlYXNlT3V0U2luZSIsICJlYXNlSW5PdXRTaW5lIiwgIlBJIiwgImVhc2VJbkV4cG8iLCAiZWFzZU91dEV4cG8iLCAiZWFzZUluT3V0RXhwbyIsICJlYXNlSW5DaXJjIiwgInNxcnQiLCAiZWFzZU91dENpcmMiLCAiZWFzZUluT3V0Q2lyYyIsICJlYXNlSW5FbGFzdGljIiwgImVhc2VPdXRFbGFzdGljIiwgImVhc2VJbk91dEVsYXN0aWMiLCAiZWFzZUluQmFjayIsICJlYXNlT3V0QmFjayIsICJlYXNlSW5PdXRCYWNrIiwgImVhc2VJbkJvdW5jZSIsICJlYXNlT3V0Qm91bmNlIiwgIm0iLCAiZCIsICJlYXNlSW5PdXRCb3VuY2UiLCAiaXNQYXR0ZXJuT3JHcmFkaWVudCIsICJ2YWx1ZSIsICJ0eXBlIiwgInRvU3RyaW5nIiwgImNvbG9yIiwgIkNvbG9yIiwgImdldEhvdmVyQ29sb3IiLCAic2F0dXJhdGUiLCAiZGFya2VuIiwgImhleFN0cmluZyIsICJudW1iZXJzIiwgImNvbG9ycyIsICJhcHBseUFuaW1hdGlvbnNEZWZhdWx0cyIsICJkZWZhdWx0cyIsICJzZXQiLCAiZGVsYXkiLCAidW5kZWZpbmVkIiwgImR1cmF0aW9uIiwgImVhc2luZyIsICJmbiIsICJmcm9tIiwgImxvb3AiLCAidG8iLCAiZGVzY3JpYmUiLCAiX2ZhbGxiYWNrIiwgIl9pbmRleGFibGUiLCAiX3NjcmlwdGFibGUiLCAibmFtZSIsICJwcm9wZXJ0aWVzIiwgImFjdGl2ZSIsICJhbmltYXRpb24iLCAicmVzaXplIiwgInNob3ciLCAiYW5pbWF0aW9ucyIsICJ2aXNpYmxlIiwgImhpZGUiLCAidiIsICJhcHBseUxheW91dHNEZWZhdWx0cyIsICJhdXRvUGFkZGluZyIsICJwYWRkaW5nIiwgInRvcCIsICJyaWdodCIsICJib3R0b20iLCAibGVmdCIsICJpbnRsQ2FjaGUiLCAiTWFwIiwgImdldE51bWJlckZvcm1hdCIsICJsb2NhbGUiLCAib3B0aW9ucyIsICJjYWNoZUtleSIsICJKU09OIiwgInN0cmluZ2lmeSIsICJmb3JtYXR0ZXIiLCAiZ2V0IiwgIkludGwiLCAiTnVtYmVyRm9ybWF0IiwgImZvcm1hdE51bWJlciIsICJudW0iLCAiZm9ybWF0IiwgImZvcm1hdHRlcnMiLCAidmFsdWVzIiwgImlzQXJyYXkiLCAibnVtZXJpYyIsICJ0aWNrVmFsdWUiLCAiaW5kZXgiLCAidGlja3MiLCAiY2hhcnQiLCAibm90YXRpb24iLCAiZGVsdGEiLCAibGVuZ3RoIiwgIm1heFRpY2siLCAibWF4IiwgImFicyIsICJjYWxjdWxhdGVEZWx0YSIsICJsb2dEZWx0YSIsICJsb2cxMCIsICJudW1EZWNpbWFsIiwgImlzTmFOIiwgIm1pbiIsICJmbG9vciIsICJtaW5pbXVtRnJhY3Rpb25EaWdpdHMiLCAibWF4aW11bUZyYWN0aW9uRGlnaXRzIiwgIk9iamVjdCIsICJhc3NpZ24iLCAibG9nYXJpdGhtaWMiLCAicmVtYWluIiwgInNpZ25pZmljYW5kIiwgImluY2x1ZGVzIiwgImNhbGwiLCAiYXBwbHlTY2FsZURlZmF1bHRzIiwgImRpc3BsYXkiLCAib2Zmc2V0IiwgInJldmVyc2UiLCAiYmVnaW5BdFplcm8iLCAiYm91bmRzIiwgImdyYWNlIiwgImdyaWQiLCAibGluZVdpZHRoIiwgImRyYXdPbkNoYXJ0QXJlYSIsICJkcmF3VGlja3MiLCAidGlja0xlbmd0aCIsICJ0aWNrV2lkdGgiLCAiX2N0eCIsICJ0aWNrQ29sb3IiLCAiYm9yZGVyIiwgImRhc2giLCAiZGFzaE9mZnNldCIsICJ3aWR0aCIsICJ0aXRsZSIsICJ0ZXh0IiwgIm1pblJvdGF0aW9uIiwgIm1heFJvdGF0aW9uIiwgIm1pcnJvciIsICJ0ZXh0U3Ryb2tlV2lkdGgiLCAidGV4dFN0cm9rZUNvbG9yIiwgImF1dG9Ta2lwIiwgImF1dG9Ta2lwUGFkZGluZyIsICJsYWJlbE9mZnNldCIsICJjYWxsYmFjayIsICJUaWNrcyIsICJtaW5vciIsICJtYWpvciIsICJhbGlnbiIsICJjcm9zc0FsaWduIiwgInNob3dMYWJlbEJhY2tkcm9wIiwgImJhY2tkcm9wQ29sb3IiLCAiYmFja2Ryb3BQYWRkaW5nIiwgInJvdXRlIiwgInN0YXJ0c1dpdGgiLCAib3ZlcnJpZGVzIiwgImNyZWF0ZSIsICJkZXNjcmlwdG9ycyIsICJnZXRTY29wZSIsICJub2RlIiwgImtleSIsICJrZXlzIiwgInNwbGl0IiwgImkiLCAibiIsICJrIiwgInJvb3QiLCAic2NvcGUiLCAibWVyZ2UiLCAiRGVmYXVsdHMiLCAiY29uc3RydWN0b3IiLCAiX2Rlc2NyaXB0b3JzIiwgIl9hcHBsaWVycyIsICJiYWNrZ3JvdW5kQ29sb3IiLCAiYm9yZGVyQ29sb3IiLCAiZGF0YXNldHMiLCAiZGV2aWNlUGl4ZWxSYXRpbyIsICJjb250ZXh0IiwgInBsYXRmb3JtIiwgImdldERldmljZVBpeGVsUmF0aW8iLCAiZWxlbWVudHMiLCAiZXZlbnRzIiwgImZvbnQiLCAiZmFtaWx5IiwgInNpemUiLCAic3R5bGUiLCAibGluZUhlaWdodCIsICJ3ZWlnaHQiLCAiaG92ZXIiLCAiaG92ZXJCYWNrZ3JvdW5kQ29sb3IiLCAiY3R4IiwgImhvdmVyQm9yZGVyQ29sb3IiLCAiaG92ZXJDb2xvciIsICJpbmRleEF4aXMiLCAiaW50ZXJhY3Rpb24iLCAibW9kZSIsICJpbnRlcnNlY3QiLCAiaW5jbHVkZUludmlzaWJsZSIsICJtYWludGFpbkFzcGVjdFJhdGlvIiwgIm9uSG92ZXIiLCAib25DbGljayIsICJwYXJzaW5nIiwgInBsdWdpbnMiLCAicmVzcG9uc2l2ZSIsICJzY2FsZSIsICJzY2FsZXMiLCAic2hvd0xpbmUiLCAiZHJhd0FjdGl2ZUVsZW1lbnRzT25Ub3AiLCAiYXBwbHkiLCAib3ZlcnJpZGUiLCAidGFyZ2V0U2NvcGUiLCAidGFyZ2V0TmFtZSIsICJzY29wZU9iamVjdCIsICJ0YXJnZXRTY29wZU9iamVjdCIsICJwcml2YXRlTmFtZSIsICJkZWZpbmVQcm9wZXJ0aWVzIiwgIndyaXRhYmxlIiwgImVudW1lcmFibGUiLCAibG9jYWwiLCAidGFyZ2V0IiwgImlzT2JqZWN0IiwgInZhbHVlT3JEZWZhdWx0IiwgImFwcGxpZXJzIiwgImZvckVhY2giLCAidG9Gb250U3RyaW5nIiwgImlzTnVsbE9yVW5kZWYiLCAiX21lYXN1cmVUZXh0IiwgImRhdGEiLCAiZ2MiLCAibG9uZ2VzdCIsICJzdHJpbmciLCAidGV4dFdpZHRoIiwgIm1lYXN1cmVUZXh0IiwgInB1c2giLCAiX2xvbmdlc3RUZXh0IiwgImFycmF5T2ZUaGluZ3MiLCAiY2FjaGUiLCAiZ2FyYmFnZUNvbGxlY3QiLCAic2F2ZSIsICJpbGVuIiwgImoiLCAiamxlbiIsICJ0aGluZyIsICJuZXN0ZWRUaGluZyIsICJyZXN0b3JlIiwgImdjTGVuIiwgInNwbGljZSIsICJfYWxpZ25QaXhlbCIsICJwaXhlbCIsICJjdXJyZW50RGV2aWNlUGl4ZWxSYXRpbyIsICJoYWxmV2lkdGgiLCAicm91bmQiLCAiY2xlYXJDYW52YXMiLCAiY2FudmFzIiwgImdldENvbnRleHQiLCAicmVzZXRUcmFuc2Zvcm0iLCAiY2xlYXJSZWN0IiwgImhlaWdodCIsICJkcmF3UG9pbnQiLCAieCIsICJ5IiwgImRyYXdQb2ludExlZ2VuZCIsICJ3IiwgInhPZmZzZXQiLCAieU9mZnNldCIsICJjb3JuZXJSYWRpdXMiLCAieE9mZnNldFciLCAieU9mZnNldFciLCAicG9pbnRTdHlsZSIsICJyb3RhdGlvbiIsICJyYWRpdXMiLCAicmFkIiwgIlJBRF9QRVJfREVHIiwgInRyYW5zbGF0ZSIsICJyb3RhdGUiLCAiZHJhd0ltYWdlIiwgImJlZ2luUGF0aCIsICJlbGxpcHNlIiwgImFyYyIsICJjbG9zZVBhdGgiLCAibW92ZVRvIiwgIlRXT19USElSRFNfUEkiLCAibGluZVRvIiwgIlFVQVJURVJfUEkiLCAiU1FSVDFfMiIsICJyZWN0IiwgImZpbGwiLCAiYm9yZGVyV2lkdGgiLCAic3Ryb2tlIiwgIl9pc1BvaW50SW5BcmVhIiwgInBvaW50IiwgImFyZWEiLCAibWFyZ2luIiwgImNsaXBBcmVhIiwgImNsaXAiLCAidW5jbGlwQXJlYSIsICJzZXRSZW5kZXJPcHRzIiwgImN0eCIsICJvcHRzIiwgInRyYW5zbGF0aW9uIiwgInRyYW5zbGF0ZSIsICJpc051bGxPclVuZGVmIiwgInJvdGF0aW9uIiwgInJvdGF0ZSIsICJjb2xvciIsICJmaWxsU3R5bGUiLCAidGV4dEFsaWduIiwgInRleHRCYXNlbGluZSIsICJkZWNvcmF0ZVRleHQiLCAieCIsICJ5IiwgImxpbmUiLCAic3RyaWtldGhyb3VnaCIsICJ1bmRlcmxpbmUiLCAibWV0cmljcyIsICJtZWFzdXJlVGV4dCIsICJsZWZ0IiwgImFjdHVhbEJvdW5kaW5nQm94TGVmdCIsICJyaWdodCIsICJhY3R1YWxCb3VuZGluZ0JveFJpZ2h0IiwgInRvcCIsICJhY3R1YWxCb3VuZGluZ0JveEFzY2VudCIsICJib3R0b20iLCAiYWN0dWFsQm91bmRpbmdCb3hEZXNjZW50IiwgInlEZWNvcmF0aW9uIiwgInN0cm9rZVN0eWxlIiwgImJlZ2luUGF0aCIsICJsaW5lV2lkdGgiLCAiZGVjb3JhdGlvbldpZHRoIiwgIm1vdmVUbyIsICJsaW5lVG8iLCAic3Ryb2tlIiwgImRyYXdCYWNrZHJvcCIsICJvbGRDb2xvciIsICJmaWxsUmVjdCIsICJ3aWR0aCIsICJoZWlnaHQiLCAicmVuZGVyVGV4dCIsICJ0ZXh0IiwgImZvbnQiLCAibGluZXMiLCAiaXNBcnJheSIsICJzdHJva2VXaWR0aCIsICJzdHJva2VDb2xvciIsICJpIiwgInNhdmUiLCAic3RyaW5nIiwgImxlbmd0aCIsICJiYWNrZHJvcCIsICJzdHJva2VUZXh0IiwgIm1heFdpZHRoIiwgImZpbGxUZXh0IiwgIk51bWJlciIsICJsaW5lSGVpZ2h0IiwgInJlc3RvcmUiLCAiYWRkUm91bmRlZFJlY3RQYXRoIiwgInJlY3QiLCAidyIsICJoIiwgInJhZGl1cyIsICJhcmMiLCAidG9wTGVmdCIsICJIQUxGX1BJIiwgIlBJIiwgImJvdHRvbUxlZnQiLCAiYm90dG9tUmlnaHQiLCAidG9wUmlnaHQiLCAiTElORV9IRUlHSFQiLCAiRk9OVF9TVFlMRSIsICJ0b0xpbmVIZWlnaHQiLCAidmFsdWUiLCAic2l6ZSIsICJtYXRjaGVzIiwgIm1hdGNoIiwgIm51bWJlck9yWmVybyIsICJ2IiwgIl9yZWFkVmFsdWVUb1Byb3BzIiwgInByb3BzIiwgInJldCIsICJvYmpQcm9wcyIsICJpc09iamVjdCIsICJrZXlzIiwgIk9iamVjdCIsICJyZWFkIiwgInByb3AiLCAidmFsdWVPckRlZmF1bHQiLCAidG9UUkJMIiwgInRvVFJCTENvcm5lcnMiLCAidG9QYWRkaW5nIiwgIm9iaiIsICJ0b0ZvbnQiLCAib3B0aW9ucyIsICJmYWxsYmFjayIsICJkZWZhdWx0cyIsICJwYXJzZUludCIsICJzdHlsZSIsICJjb25zb2xlIiwgIndhcm4iLCAidW5kZWZpbmVkIiwgImZhbWlseSIsICJ3ZWlnaHQiLCAidG9Gb250U3RyaW5nIiwgInJlc29sdmUiLCAiaW5wdXRzIiwgImNvbnRleHQiLCAiaW5kZXgiLCAiaW5mbyIsICJjYWNoZWFibGUiLCAiaWxlbiIsICJfYWRkR3JhY2UiLCAibWlubWF4IiwgImdyYWNlIiwgImJlZ2luQXRaZXJvIiwgIm1pbiIsICJtYXgiLCAiY2hhbmdlIiwgInRvRGltZW5zaW9uIiwgImtlZXBaZXJvIiwgImFkZCIsICJNYXRoIiwgImFicyIsICJjcmVhdGVDb250ZXh0IiwgInBhcmVudENvbnRleHQiLCAiYXNzaWduIiwgImNyZWF0ZSIsICJfY3JlYXRlUmVzb2x2ZXIiLCAic2NvcGVzIiwgInByZWZpeGVzIiwgInJvb3RTY29wZXMiLCAiZ2V0VGFyZ2V0IiwgImZpbmFsUm9vdFNjb3BlcyIsICJfcmVzb2x2ZSIsICJjYWNoZSIsICJTeW1ib2wiLCAidG9TdHJpbmdUYWciLCAiX2NhY2hlYWJsZSIsICJfc2NvcGVzIiwgIl9yb290U2NvcGVzIiwgIl9mYWxsYmFjayIsICJfZ2V0VGFyZ2V0IiwgIm92ZXJyaWRlIiwgInNjb3BlIiwgIlByb3h5IiwgImRlbGV0ZVByb3BlcnR5IiwgInRhcmdldCIsICJfa2V5cyIsICJnZXQiLCAiX2NhY2hlZCIsICJfcmVzb2x2ZVdpdGhQcmVmaXhlcyIsICJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCAiUmVmbGVjdCIsICJnZXRQcm90b3R5cGVPZiIsICJoYXMiLCAiZ2V0S2V5c0Zyb21BbGxTY29wZXMiLCAiaW5jbHVkZXMiLCAib3duS2V5cyIsICJzZXQiLCAic3RvcmFnZSIsICJfc3RvcmFnZSIsICJfYXR0YWNoQ29udGV4dCIsICJwcm94eSIsICJzdWJQcm94eSIsICJkZXNjcmlwdG9yRGVmYXVsdHMiLCAiX3Byb3h5IiwgIl9jb250ZXh0IiwgIl9zdWJQcm94eSIsICJfc3RhY2siLCAiU2V0IiwgIl9kZXNjcmlwdG9ycyIsICJzZXRDb250ZXh0IiwgInJlY2VpdmVyIiwgIl9yZXNvbHZlV2l0aENvbnRleHQiLCAiYWxsS2V5cyIsICJlbnVtZXJhYmxlIiwgImNvbmZpZ3VyYWJsZSIsICJzY3JpcHRhYmxlIiwgImluZGV4YWJsZSIsICJfc2NyaXB0YWJsZSIsICJfaW5kZXhhYmxlIiwgIl9hbGxLZXlzIiwgImlzU2NyaXB0YWJsZSIsICJpc0Z1bmN0aW9uIiwgImlzSW5kZXhhYmxlIiwgInJlYWRLZXkiLCAicHJlZml4IiwgIm5hbWUiLCAiX2NhcGl0YWxpemUiLCAibmVlZHNTdWJSZXNvbHZlciIsICJjb25zdHJ1Y3RvciIsICJwcm90b3R5cGUiLCAiaGFzT3duUHJvcGVydHkiLCAiY2FsbCIsICJkZXNjcmlwdG9ycyIsICJfcmVzb2x2ZVNjcmlwdGFibGUiLCAiX3Jlc29sdmVBcnJheSIsICJnZXRWYWx1ZSIsICJFcnJvciIsICJBcnJheSIsICJmcm9tIiwgImpvaW4iLCAiZGVsZXRlIiwgImNyZWF0ZVN1YlJlc29sdmVyIiwgImFyciIsICJmaWx0ZXIiLCAicyIsICJpdGVtIiwgInJlc29sdmVyIiwgInB1c2giLCAicmVzb2x2ZUZhbGxiYWNrIiwgImdldFNjb3BlIiwgImtleSIsICJwYXJlbnQiLCAicmVzb2x2ZU9iamVjdEtleSIsICJhZGRTY29wZXMiLCAicGFyZW50U2NvcGVzIiwgInBhcmVudEZhbGxiYWNrIiwgImFsbFNjb3BlcyIsICJhZGRTY29wZXNGcm9tS2V5IiwgInN1YkdldFRhcmdldCIsICJyZXNvbHZlS2V5c0Zyb21BbGxTY29wZXMiLCAiayIsICJzdGFydHNXaXRoIiwgIkVQU0lMT04iLCAiTnVtYmVyIiwgIl9pc0RvbVN1cHBvcnRlZCIsICJ3aW5kb3ciLCAiZG9jdW1lbnQiLCAiX2dldFBhcmVudE5vZGUiLCAiZG9tTm9kZSIsICJwYXJlbnQiLCAicGFyZW50Tm9kZSIsICJ0b1N0cmluZyIsICJob3N0IiwgInBhcnNlTWF4U3R5bGUiLCAic3R5bGVWYWx1ZSIsICJub2RlIiwgInBhcmVudFByb3BlcnR5IiwgInZhbHVlSW5QaXhlbHMiLCAicGFyc2VJbnQiLCAiaW5kZXhPZiIsICJnZXRDb21wdXRlZFN0eWxlIiwgImVsZW1lbnQiLCAib3duZXJEb2N1bWVudCIsICJkZWZhdWx0VmlldyIsICJnZXRTdHlsZSIsICJlbCIsICJwcm9wZXJ0eSIsICJnZXRQcm9wZXJ0eVZhbHVlIiwgInBvc2l0aW9ucyIsICJnZXRQb3NpdGlvbmVkU3R5bGUiLCAic3R5bGVzIiwgInN0eWxlIiwgInN1ZmZpeCIsICJyZXN1bHQiLCAiaSIsICJwb3MiLCAicGFyc2VGbG9hdCIsICJ3aWR0aCIsICJsZWZ0IiwgInJpZ2h0IiwgImhlaWdodCIsICJ0b3AiLCAiYm90dG9tIiwgInVzZU9mZnNldFBvcyIsICJ4IiwgInkiLCAidGFyZ2V0IiwgInNoYWRvd1Jvb3QiLCAiZ2V0Q2FudmFzUG9zaXRpb24iLCAiZSIsICJjYW52YXMiLCAidG91Y2hlcyIsICJzb3VyY2UiLCAibGVuZ3RoIiwgIm9mZnNldFgiLCAib2Zmc2V0WSIsICJib3giLCAicmVjdCIsICJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCAiY2xpZW50WCIsICJjbGllbnRZIiwgImdldFJlbGF0aXZlUG9zaXRpb24iLCAiZXZlbnQiLCAiY2hhcnQiLCAiY3VycmVudERldmljZVBpeGVsUmF0aW8iLCAiYm9yZGVyQm94IiwgImJveFNpemluZyIsICJwYWRkaW5ncyIsICJib3JkZXJzIiwgInhPZmZzZXQiLCAieU9mZnNldCIsICJNYXRoIiwgInJvdW5kIiwgImdldENvbnRhaW5lclNpemUiLCAibWF4V2lkdGgiLCAibWF4SGVpZ2h0IiwgInVuZGVmaW5lZCIsICJjb250YWluZXIiLCAiY2xpZW50V2lkdGgiLCAiY2xpZW50SGVpZ2h0IiwgImNvbnRhaW5lclN0eWxlIiwgImNvbnRhaW5lckJvcmRlciIsICJjb250YWluZXJQYWRkaW5nIiwgIklORklOSVRZIiwgInJvdW5kMSIsICJ2IiwgImdldE1heGltdW1TaXplIiwgImJiV2lkdGgiLCAiYmJIZWlnaHQiLCAiYXNwZWN0UmF0aW8iLCAibWFyZ2lucyIsICJjb250YWluZXJTaXplIiwgIm1heCIsICJtaW4iLCAibWFpbnRhaW5IZWlnaHQiLCAiZmxvb3IiLCAicmV0aW5hU2NhbGUiLCAiZm9yY2VSYXRpbyIsICJmb3JjZVN0eWxlIiwgInBpeGVsUmF0aW8iLCAiZGV2aWNlSGVpZ2h0IiwgImRldmljZVdpZHRoIiwgImN0eCIsICJzZXRUcmFuc2Zvcm0iLCAic3VwcG9ydHNFdmVudExpc3RlbmVyT3B0aW9ucyIsICJwYXNzaXZlU3VwcG9ydGVkIiwgIm9wdGlvbnMiLCAicGFzc2l2ZSIsICJhZGRFdmVudExpc3RlbmVyIiwgInJlbW92ZUV2ZW50TGlzdGVuZXIiLCAicmVhZFVzZWRTaXplIiwgInZhbHVlIiwgIm1hdGNoZXMiLCAibWF0Y2giLCAiZ2V0UmlnaHRUb0xlZnRBZGFwdGVyIiwgInJlY3RYIiwgIndpZHRoIiwgIngiLCAic2V0V2lkdGgiLCAidyIsICJ0ZXh0QWxpZ24iLCAiYWxpZ24iLCAieFBsdXMiLCAidmFsdWUiLCAibGVmdEZvckx0ciIsICJpdGVtV2lkdGgiLCAiZ2V0TGVmdFRvUmlnaHRBZGFwdGVyIiwgIl9pdGVtV2lkdGgiLCAiZ2V0UnRsQWRhcHRlciIsICJydGwiLCAib3ZlcnJpZGVUZXh0RGlyZWN0aW9uIiwgImN0eCIsICJkaXJlY3Rpb24iLCAic3R5bGUiLCAib3JpZ2luYWwiLCAiY2FudmFzIiwgImdldFByb3BlcnR5VmFsdWUiLCAiZ2V0UHJvcGVydHlQcmlvcml0eSIsICJzZXRQcm9wZXJ0eSIsICJwcmV2VGV4dERpcmVjdGlvbiIsICJyZXN0b3JlVGV4dERpcmVjdGlvbiIsICJ1bmRlZmluZWQiLCAiQW5pbWF0b3IiLCAiY29uc3RydWN0b3IiLCAiX3JlcXVlc3QiLCAiX2NoYXJ0cyIsICJNYXAiLCAiX3J1bm5pbmciLCAiX2xhc3REYXRlIiwgInVuZGVmaW5lZCIsICJfbm90aWZ5IiwgImNoYXJ0IiwgImFuaW1zIiwgImRhdGUiLCAidHlwZSIsICJjYWxsYmFja3MiLCAibGlzdGVuZXJzIiwgIm51bVN0ZXBzIiwgImR1cmF0aW9uIiwgImZvckVhY2giLCAiZm4iLCAiaW5pdGlhbCIsICJjdXJyZW50U3RlcCIsICJNYXRoIiwgIm1pbiIsICJzdGFydCIsICJfcmVmcmVzaCIsICJyZXF1ZXN0QW5pbUZyYW1lIiwgImNhbGwiLCAid2luZG93IiwgIl91cGRhdGUiLCAiRGF0ZSIsICJub3ciLCAicmVtYWluaW5nIiwgInJ1bm5pbmciLCAiaXRlbXMiLCAibGVuZ3RoIiwgImkiLCAiZHJhdyIsICJpdGVtIiwgIl9hY3RpdmUiLCAiX3RvdGFsIiwgInRpY2siLCAicG9wIiwgIl9nZXRBbmltcyIsICJjaGFydHMiLCAiZ2V0IiwgImNvbXBsZXRlIiwgInByb2dyZXNzIiwgInNldCIsICJsaXN0ZW4iLCAiZXZlbnQiLCAiY2IiLCAicHVzaCIsICJhZGQiLCAiaGFzIiwgInJlZHVjZSIsICJhY2MiLCAiY3VyIiwgIm1heCIsICJfZHVyYXRpb24iLCAic3RvcCIsICJjYW5jZWwiLCAicmVtb3ZlIiwgImRlbGV0ZSIsICJ0cmFuc3BhcmVudCIsICJpbnRlcnBvbGF0b3JzIiwgImJvb2xlYW4iLCAiZnJvbSIsICJ0byIsICJmYWN0b3IiLCAiY29sb3IiLCAiYzAiLCAiaGVscGVyc0NvbG9yIiwgImMxIiwgInZhbGlkIiwgIm1peCIsICJoZXhTdHJpbmciLCAibnVtYmVyIiwgIkFuaW1hdGlvbiIsICJjZmciLCAidGFyZ2V0IiwgInByb3AiLCAiY3VycmVudFZhbHVlIiwgInJlc29sdmUiLCAiX2ZuIiwgIl9lYXNpbmciLCAiZWZmZWN0cyIsICJlYXNpbmciLCAibGluZWFyIiwgIl9zdGFydCIsICJmbG9vciIsICJkZWxheSIsICJfbG9vcCIsICJsb29wIiwgIl90YXJnZXQiLCAiX3Byb3AiLCAiX2Zyb20iLCAiX3RvIiwgIl9wcm9taXNlcyIsICJhY3RpdmUiLCAidXBkYXRlIiwgImVsYXBzZWQiLCAicmVtYWluIiwgIndhaXQiLCAicHJvbWlzZXMiLCAiUHJvbWlzZSIsICJyZXMiLCAicmVqIiwgInJlc29sdmVkIiwgIm1ldGhvZCIsICJBbmltYXRpb25zIiwgImNvbmZpZyIsICJfY2hhcnQiLCAiX3Byb3BlcnRpZXMiLCAiY29uZmlndXJlIiwgImlzT2JqZWN0IiwgImFuaW1hdGlvbk9wdGlvbnMiLCAiT2JqZWN0IiwgImtleXMiLCAiZGVmYXVsdHMiLCAiYW5pbWF0aW9uIiwgImFuaW1hdGVkUHJvcHMiLCAiZ2V0T3duUHJvcGVydHlOYW1lcyIsICJrZXkiLCAib3B0aW9uIiwgImlzQXJyYXkiLCAicHJvcGVydGllcyIsICJfYW5pbWF0ZU9wdGlvbnMiLCAidmFsdWVzIiwgIm5ld09wdGlvbnMiLCAib3B0aW9ucyIsICJyZXNvbHZlVGFyZ2V0T3B0aW9ucyIsICJhbmltYXRpb25zIiwgIl9jcmVhdGVBbmltYXRpb25zIiwgIiRzaGFyZWQiLCAiYXdhaXRBbGwiLCAiJGFuaW1hdGlvbnMiLCAidGhlbiIsICJwcm9wcyIsICJjaGFyQXQiLCAidmFsdWUiLCAic2l6ZSIsICJhc3NpZ24iLCAiYW5pbWF0b3IiLCAiYW5pbSIsICJhbGwiLCAic2NhbGVDbGlwIiwgInNjYWxlIiwgImFsbG93ZWRPdmVyZmxvdyIsICJvcHRzIiwgInJldmVyc2UiLCAiZW5kIiwgImRlZmF1bHRDbGlwIiwgInhTY2FsZSIsICJ5U2NhbGUiLCAieCIsICJ5IiwgInRvcCIsICJyaWdodCIsICJib3R0b20iLCAibGVmdCIsICJ0b0NsaXAiLCAidCIsICJyIiwgImIiLCAibCIsICJkaXNhYmxlZCIsICJnZXRTb3J0ZWREYXRhc2V0SW5kaWNlcyIsICJmaWx0ZXJWaXNpYmxlIiwgIm1ldGFzZXRzIiwgIl9nZXRTb3J0ZWREYXRhc2V0TWV0YXMiLCAiaWxlbiIsICJpbmRleCIsICJhcHBseVN0YWNrIiwgInN0YWNrIiwgImRzSW5kZXgiLCAic2luZ2xlTW9kZSIsICJtb2RlIiwgImRhdGFzZXRJbmRleCIsICJvdGhlclZhbHVlIiwgImlzRmluaXRlIiwgInNpZ24iLCAiY29udmVydE9iamVjdERhdGFUb0FycmF5IiwgImRhdGEiLCAiYWRhdGEiLCAiQXJyYXkiLCAiaXNTdGFja2VkIiwgIm1ldGEiLCAic3RhY2tlZCIsICJnZXRTdGFja0tleSIsICJpbmRleFNjYWxlIiwgInZhbHVlU2NhbGUiLCAiaWQiLCAiZ2V0VXNlckJvdW5kcyIsICJtaW5EZWZpbmVkIiwgIm1heERlZmluZWQiLCAiTnVtYmVyIiwgIk5FR0FUSVZFX0lORklOSVRZIiwgIlBPU0lUSVZFX0lORklOSVRZIiwgImdldE9yQ3JlYXRlU3RhY2siLCAic3RhY2tzIiwgInN0YWNrS2V5IiwgImluZGV4VmFsdWUiLCAic3ViU3RhY2siLCAiZ2V0TGFzdEluZGV4SW5TdGFjayIsICJ2U2NhbGUiLCAicG9zaXRpdmUiLCAiZ2V0TWF0Y2hpbmdWaXNpYmxlTWV0YXMiLCAidXBkYXRlU3RhY2tzIiwgImNvbnRyb2xsZXIiLCAicGFyc2VkIiwgIl9jYWNoZWRNZXRhIiwgIl9zdGFja3MiLCAiaVNjYWxlIiwgImlBeGlzIiwgImF4aXMiLCAidkF4aXMiLCAiaXRlbVN0YWNrcyIsICJfdG9wIiwgIl9ib3R0b20iLCAidmlzdWFsVmFsdWVzIiwgIl92aXN1YWxWYWx1ZXMiLCAiZ2V0Rmlyc3RTY2FsZUlkIiwgInNjYWxlcyIsICJmaWx0ZXIiLCAic2hpZnQiLCAiY3JlYXRlRGF0YXNldENvbnRleHQiLCAicGFyZW50IiwgImNyZWF0ZUNvbnRleHQiLCAiZGF0YXNldCIsICJjcmVhdGVEYXRhQ29udGV4dCIsICJlbGVtZW50IiwgImRhdGFJbmRleCIsICJyYXciLCAiY2xlYXJTdGFja3MiLCAiX3BhcnNlZCIsICJpc0RpcmVjdFVwZGF0ZU1vZGUiLCAiY2xvbmVJZk5vdFNoYXJlZCIsICJjYWNoZWQiLCAic2hhcmVkIiwgImNyZWF0ZVN0YWNrIiwgImNhblN0YWNrIiwgImhpZGRlbiIsICJfc3RhY2tlZCIsICJEYXRhc2V0Q29udHJvbGxlciIsICJfY3R4IiwgImN0eCIsICJfY2FjaGVkRGF0YU9wdHMiLCAiZ2V0TWV0YSIsICJfdHlwZSIsICJfcGFyc2luZyIsICJfZGF0YSIsICJfb2JqZWN0RGF0YSIsICJfc2hhcmVkT3B0aW9ucyIsICJfZHJhd1N0YXJ0IiwgIl9kcmF3Q291bnQiLCAiZW5hYmxlT3B0aW9uU2hhcmluZyIsICJzdXBwb3J0c0RlY2ltYXRpb24iLCAiJGNvbnRleHQiLCAiX3N5bmNMaXN0IiwgImRhdGFzZXRFbGVtZW50VHlwZSIsICJkYXRhRWxlbWVudFR5cGUiLCAiaW5pdGlhbGl6ZSIsICJsaW5rU2NhbGVzIiwgImFkZEVsZW1lbnRzIiwgImZpbGwiLCAiaXNQbHVnaW5FbmFibGVkIiwgImNvbnNvbGUiLCAid2FybiIsICJ1cGRhdGVJbmRleCIsICJnZXREYXRhc2V0IiwgImNob29zZUlkIiwgInhpZCIsICJ4QXhpc0lEIiwgInZhbHVlT3JEZWZhdWx0IiwgInlpZCIsICJ5QXhpc0lEIiwgInJpZCIsICJyQXhpc0lEIiwgImluZGV4QXhpcyIsICJpaWQiLCAiaUF4aXNJRCIsICJ2aWQiLCAidkF4aXNJRCIsICJnZXRTY2FsZUZvcklkIiwgInJTY2FsZSIsICJkYXRhc2V0cyIsICJnZXREYXRhc2V0TWV0YSIsICJzY2FsZUlEIiwgIl9nZXRPdGhlclNjYWxlIiwgInJlc2V0IiwgIl9kZXN0cm95IiwgInVubGlzdGVuQXJyYXlFdmVudHMiLCAiX2RhdGFDaGVjayIsICJpc0V4dGVuc2libGUiLCAibGlzdGVuQXJyYXlFdmVudHMiLCAiYnVpbGRPclVwZGF0ZUVsZW1lbnRzIiwgInJlc2V0TmV3RWxlbWVudHMiLCAic3RhY2tDaGFuZ2VkIiwgIm9sZFN0YWNrZWQiLCAiX3Jlc3luY0VsZW1lbnRzIiwgInNjb3BlS2V5cyIsICJkYXRhc2V0U2NvcGVLZXlzIiwgInNjb3BlcyIsICJnZXRPcHRpb25TY29wZXMiLCAiY3JlYXRlUmVzb2x2ZXIiLCAiZ2V0Q29udGV4dCIsICJwYXJzaW5nIiwgInBhcnNlIiwgImNvdW50IiwgInNvcnRlZCIsICJfc29ydGVkIiwgInByZXYiLCAicGFyc2VBcnJheURhdGEiLCAicGFyc2VPYmplY3REYXRhIiwgInBhcnNlUHJpbWl0aXZlRGF0YSIsICJpc05vdEluT3JkZXJDb21wYXJlZFRvUHJldiIsICJsYWJlbHMiLCAiZ2V0TGFiZWxzIiwgInNpbmdsZVNjYWxlIiwgInhBeGlzS2V5IiwgInlBeGlzS2V5IiwgInJlc29sdmVPYmplY3RLZXkiLCAiZ2V0UGFyc2VkIiwgImdldERhdGFFbGVtZW50IiwgInVwZGF0ZVJhbmdlRnJvbVBhcnNlZCIsICJyYW5nZSIsICJwYXJzZWRWYWx1ZSIsICJOYU4iLCAiZ2V0TWluTWF4IiwgIm90aGVyU2NhbGUiLCAib3RoZXJNaW4iLCAib3RoZXJNYXgiLCAiX3NraXAiLCAiZ2V0QWxsUGFyc2VkVmFsdWVzIiwgImdldE1heE92ZXJmbG93IiwgImdldExhYmVsQW5kVmFsdWUiLCAibGFiZWwiLCAiZ2V0TGFiZWxGb3JWYWx1ZSIsICJfY2xpcCIsICJjbGlwIiwgImVsZW1lbnRzIiwgImFyZWEiLCAiY2hhcnRBcmVhIiwgImRyYXdBY3RpdmVFbGVtZW50c09uVG9wIiwgImdldFN0eWxlIiwgInJlc29sdmVEYXRhc2V0RWxlbWVudE9wdGlvbnMiLCAicmVzb2x2ZURhdGFFbGVtZW50T3B0aW9ucyIsICJjb250ZXh0IiwgIl9yZXNvbHZlRWxlbWVudE9wdGlvbnMiLCAiZWxlbWVudFR5cGUiLCAiY2FjaGUiLCAiY2FjaGVLZXkiLCAic2hhcmluZyIsICJkZWZpbmVkIiwgImRhdGFzZXRFbGVtZW50U2NvcGVLZXlzIiwgInByZWZpeGVzIiwgIm5hbWVzIiwgInJlc29sdmVOYW1lZE9wdGlvbnMiLCAiZnJlZXplIiwgIl9yZXNvbHZlQW5pbWF0aW9ucyIsICJ0cmFuc2l0aW9uIiwgImRhdGFzZXRBbmltYXRpb25TY29wZUtleXMiLCAiX2NhY2hlYWJsZSIsICJnZXRTaGFyZWRPcHRpb25zIiwgImluY2x1ZGVPcHRpb25zIiwgInNoYXJlZE9wdGlvbnMiLCAiX2FuaW1hdGlvbnNEaXNhYmxlZCIsICJfZ2V0U2hhcmVkT3B0aW9ucyIsICJmaXJzdE9wdHMiLCAicHJldmlvdXNseVNoYXJlZE9wdGlvbnMiLCAidXBkYXRlU2hhcmVkT3B0aW9ucyIsICJ1cGRhdGVFbGVtZW50IiwgIl9zZXRTdHlsZSIsICJyZW1vdmVIb3ZlclN0eWxlIiwgInNldEhvdmVyU3R5bGUiLCAiX3JlbW92ZURhdGFzZXRIb3ZlclN0eWxlIiwgIl9zZXREYXRhc2V0SG92ZXJTdHlsZSIsICJhcmcxIiwgImFyZzIiLCAibnVtTWV0YSIsICJudW1EYXRhIiwgIl9pbnNlcnRFbGVtZW50cyIsICJfcmVtb3ZlRWxlbWVudHMiLCAibW92ZSIsICJhcnIiLCAidXBkYXRlRWxlbWVudHMiLCAicmVtb3ZlZCIsICJzcGxpY2UiLCAiX3N5bmMiLCAiYXJncyIsICJfZGF0YUNoYW5nZXMiLCAiX29uRGF0YVB1c2giLCAiYXJndW1lbnRzIiwgIl9vbkRhdGFQb3AiLCAiX29uRGF0YVNoaWZ0IiwgIl9vbkRhdGFTcGxpY2UiLCAibmV3Q291bnQiLCAiX29uRGF0YVVuc2hpZnQiLCAiZ2V0QWxsU2NhbGVWYWx1ZXMiLCAiX2NhY2hlIiwgIiRiYXIiLCAidmlzaWJsZU1ldGFzIiwgImNvbmNhdCIsICJfYXJyYXlVbmlxdWUiLCAic29ydCIsICJhIiwgImNvbXB1dGVNaW5TYW1wbGVTaXplIiwgIl9sZW5ndGgiLCAiY3VyciIsICJ1cGRhdGVNaW5BbmRQcmV2IiwgImFicyIsICJnZXRQaXhlbEZvclZhbHVlIiwgInRpY2tzIiwgImdldFBpeGVsRm9yVGljayIsICJjb21wdXRlRml0Q2F0ZWdvcnlUcmFpdHMiLCAicnVsZXIiLCAic3RhY2tDb3VudCIsICJ0aGlja25lc3MiLCAiYmFyVGhpY2tuZXNzIiwgInJhdGlvIiwgImlzTnVsbE9yVW5kZWYiLCAiY2F0ZWdvcnlQZXJjZW50YWdlIiwgImJhclBlcmNlbnRhZ2UiLCAiY2h1bmsiLCAicGl4ZWxzIiwgImNvbXB1dGVGbGV4Q2F0ZWdvcnlUcmFpdHMiLCAibmV4dCIsICJwZXJjZW50IiwgInBhcnNlRmxvYXRCYXIiLCAiZW50cnkiLCAic3RhcnRWYWx1ZSIsICJlbmRWYWx1ZSIsICJiYXJTdGFydCIsICJiYXJFbmQiLCAiX2N1c3RvbSIsICJwYXJzZVZhbHVlIiwgInBhcnNlQXJyYXlPclByaW1pdGl2ZSIsICJpc0Zsb2F0QmFyIiwgImN1c3RvbSIsICJiYXJTaWduIiwgImFjdHVhbEJhc2UiLCAiaXNIb3Jpem9udGFsIiwgImJvcmRlclByb3BzIiwgImhvcml6b250YWwiLCAiYmFzZSIsICJzZXRCb3JkZXJTa2lwcGVkIiwgImVkZ2UiLCAiYm9yZGVyU2tpcHBlZCIsICJlbmFibGVCb3JkZXJSYWRpdXMiLCAicGFyc2VFZGdlIiwgInN3YXAiLCAic3RhcnRFbmQiLCAib3JpZyIsICJ2MSIsICJ2MiIsICJ2IiwgInNldEluZmxhdGVBbW91bnQiLCAiaW5mbGF0ZUFtb3VudCIsICJCYXJDb250cm9sbGVyIiwgImlBeGlzS2V5IiwgInZBeGlzS2V5IiwgIm9iaiIsICJiYXJzIiwgImdldEJhc2VQaXhlbCIsICJfZ2V0UnVsZXIiLCAidnBpeGVscyIsICJoZWFkIiwgIl9jYWxjdWxhdGVCYXJWYWx1ZVBpeGVscyIsICJpcGl4ZWxzIiwgIl9jYWxjdWxhdGVCYXJJbmRleFBpeGVscyIsICJjZW50ZXIiLCAiaGVpZ2h0IiwgIndpZHRoIiwgIl9nZXRTdGFja3MiLCAibGFzdCIsICJncm91cGVkIiwgInNraXBOdWxsIiwgInZhbCIsICJpc05hTiIsICJpbmRleE9mIiwgIl9nZXRTdGFja0NvdW50IiwgIl9nZXRTdGFja0luZGV4IiwgIm5hbWUiLCAiX3N0YXJ0UGl4ZWwiLCAiX2VuZFBpeGVsIiwgImJhc2VWYWx1ZSIsICJtaW5CYXJMZW5ndGgiLCAiZmxvYXRpbmciLCAiZ2V0RGF0YVZpc2liaWxpdHkiLCAic3RhcnRQaXhlbCIsICJnZXRQaXhlbEZvckRlY2ltYWwiLCAiZW5kUGl4ZWwiLCAiZ2V0VmFsdWVGb3JQaXhlbCIsICJoYWxmR3JpZCIsICJnZXRMaW5lV2lkdGhGb3JWYWx1ZSIsICJtYXhCYXJUaGlja25lc3MiLCAiSW5maW5pdHkiLCAic3RhY2tJbmRleCIsICJyZWN0cyIsICJudW1iZXJzIiwgIm92ZXJyaWRlcyIsICJfaW5kZXhfIiwgIm9mZnNldCIsICJncmlkIiwgIl92YWx1ZV8iLCAiYmVnaW5BdFplcm8iLCAiZ2V0UmF0aW9BbmRPZmZzZXQiLCAicm90YXRpb24iLCAiY2lyY3VtZmVyZW5jZSIsICJjdXRvdXQiLCAicmF0aW9YIiwgInJhdGlvWSIsICJvZmZzZXRYIiwgIm9mZnNldFkiLCAiVEFVIiwgInN0YXJ0QW5nbGUiLCAiZW5kQW5nbGUiLCAic3RhcnRYIiwgIk1hdGgiLCAiY29zIiwgInN0YXJ0WSIsICJzaW4iLCAiZW5kWCIsICJlbmRZIiwgImNhbGNNYXgiLCAiYW5nbGUiLCAiYSIsICJiIiwgIl9hbmdsZUJldHdlZW4iLCAibWF4IiwgImNhbGNNaW4iLCAibWluIiwgIm1heFgiLCAibWF4WSIsICJIQUxGX1BJIiwgIm1pblgiLCAiUEkiLCAibWluWSIsICJEb3VnaG51dENvbnRyb2xsZXIiLCAiRGF0YXNldENvbnRyb2xsZXIiLCAiY29uc3RydWN0b3IiLCAiY2hhcnQiLCAiZGF0YXNldEluZGV4IiwgImVuYWJsZU9wdGlvblNoYXJpbmciLCAiaW5uZXJSYWRpdXMiLCAidW5kZWZpbmVkIiwgIm91dGVyUmFkaXVzIiwgImxpbmtTY2FsZXMiLCAicGFyc2UiLCAic3RhcnQiLCAiY291bnQiLCAiZGF0YSIsICJnZXREYXRhc2V0IiwgIm1ldGEiLCAiX2NhY2hlZE1ldGEiLCAiX3BhcnNpbmciLCAiX3BhcnNlZCIsICJnZXR0ZXIiLCAiaSIsICJpc09iamVjdCIsICJrZXkiLCAicmVzb2x2ZU9iamVjdEtleSIsICJpbGVuIiwgIl9nZXRSb3RhdGlvbiIsICJ0b1JhZGlhbnMiLCAib3B0aW9ucyIsICJfZ2V0Q2lyY3VtZmVyZW5jZSIsICJfZ2V0Um90YXRpb25FeHRlbnRzIiwgImRhdGFzZXRzIiwgImxlbmd0aCIsICJpc0RhdGFzZXRWaXNpYmxlIiwgImdldERhdGFzZXRNZXRhIiwgInR5cGUiLCAiX3R5cGUiLCAiY29udHJvbGxlciIsICJ1cGRhdGUiLCAibW9kZSIsICJjaGFydEFyZWEiLCAiYXJjcyIsICJzcGFjaW5nIiwgImdldE1heEJvcmRlcldpZHRoIiwgImdldE1heE9mZnNldCIsICJtYXhTaXplIiwgIndpZHRoIiwgImhlaWdodCIsICJ0b1BlcmNlbnRhZ2UiLCAiY2hhcnRXZWlnaHQiLCAiX2dldFJpbmdXZWlnaHQiLCAiaW5kZXgiLCAibWF4V2lkdGgiLCAibWF4SGVpZ2h0IiwgIm1heFJhZGl1cyIsICJ0b0RpbWVuc2lvbiIsICJyYWRpdXMiLCAicmFkaXVzTGVuZ3RoIiwgIl9nZXRWaXNpYmxlRGF0YXNldFdlaWdodFRvdGFsIiwgInRvdGFsIiwgImNhbGN1bGF0ZVRvdGFsIiwgIl9nZXRSaW5nV2VpZ2h0T2Zmc2V0IiwgInVwZGF0ZUVsZW1lbnRzIiwgIl9jaXJjdW1mZXJlbmNlIiwgInJlc2V0IiwgIm9wdHMiLCAiYW5pbWF0aW9uIiwgImFuaW1hdGVSb3RhdGUiLCAiZ2V0RGF0YVZpc2liaWxpdHkiLCAiaGlkZGVuIiwgImNhbGN1bGF0ZUNpcmN1bWZlcmVuY2UiLCAiYW5pbWF0aW9uT3B0cyIsICJjZW50ZXJYIiwgImxlZnQiLCAicmlnaHQiLCAiY2VudGVyWSIsICJ0b3AiLCAiYm90dG9tIiwgImFuaW1hdGVTY2FsZSIsICJzaGFyZWRPcHRpb25zIiwgImluY2x1ZGVPcHRpb25zIiwgIl9nZXRTaGFyZWRPcHRpb25zIiwgImFyYyIsICJwcm9wZXJ0aWVzIiwgIngiLCAieSIsICJyZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zIiwgImFjdGl2ZSIsICJ1cGRhdGVFbGVtZW50IiwgIm1ldGFEYXRhIiwgInZhbHVlIiwgImlzTmFOIiwgImFicyIsICJnZXRMYWJlbEFuZFZhbHVlIiwgImxhYmVscyIsICJmb3JtYXROdW1iZXIiLCAibG9jYWxlIiwgImxhYmVsIiwgImJvcmRlckFsaWduIiwgImJvcmRlcldpZHRoIiwgImhvdmVyQm9yZGVyV2lkdGgiLCAib2Zmc2V0IiwgImhvdmVyT2Zmc2V0IiwgInJpbmdXZWlnaHRPZmZzZXQiLCAidmFsdWVPckRlZmF1bHQiLCAid2VpZ2h0IiwgImlkIiwgImRlZmF1bHRzIiwgImRhdGFzZXRFbGVtZW50VHlwZSIsICJkYXRhRWxlbWVudFR5cGUiLCAiYW5pbWF0aW9ucyIsICJudW1iZXJzIiwgImluZGV4QXhpcyIsICJkZXNjcmlwdG9ycyIsICJfc2NyaXB0YWJsZSIsICJuYW1lIiwgIl9pbmRleGFibGUiLCAic3RhcnRzV2l0aCIsICJvdmVycmlkZXMiLCAiYXNwZWN0UmF0aW8iLCAicGx1Z2lucyIsICJsZWdlbmQiLCAiZ2VuZXJhdGVMYWJlbHMiLCAicG9pbnRTdHlsZSIsICJjb2xvciIsICJtYXAiLCAic3R5bGUiLCAiZ2V0U3R5bGUiLCAidGV4dCIsICJmaWxsU3R5bGUiLCAiYmFja2dyb3VuZENvbG9yIiwgInN0cm9rZVN0eWxlIiwgImJvcmRlckNvbG9yIiwgImZvbnRDb2xvciIsICJsaW5lV2lkdGgiLCAib25DbGljayIsICJlIiwgImxlZ2VuZEl0ZW0iLCAidG9nZ2xlRGF0YVZpc2liaWxpdHkiLCAiUGllQ29udHJvbGxlciIsICJEb3VnaG51dENvbnRyb2xsZXIiLCAiaWQiLCAiZGVmYXVsdHMiLCAiY3V0b3V0IiwgInJvdGF0aW9uIiwgImNpcmN1bWZlcmVuY2UiLCAicmFkaXVzIiwgImFic3RyYWN0IiwgIkVycm9yIiwgIkRhdGVBZGFwdGVyQmFzZSIsICJjb25zdHJ1Y3RvciIsICJvcHRpb25zIiwgIm92ZXJyaWRlIiwgIm1lbWJlcnMiLCAiT2JqZWN0IiwgImFzc2lnbiIsICJwcm90b3R5cGUiLCAiaW5pdCIsICJmb3JtYXRzIiwgInBhcnNlIiwgImZvcm1hdCIsICJhZGQiLCAiZGlmZiIsICJzdGFydE9mIiwgImVuZE9mIiwgIl9kYXRlIiwgImJpbmFyeVNlYXJjaCIsICJtZXRhc2V0IiwgImF4aXMiLCAidmFsdWUiLCAiaW50ZXJzZWN0IiwgImNvbnRyb2xsZXIiLCAiZGF0YSIsICJfc29ydGVkIiwgImlTY2FsZSIsICJfY2FjaGVkTWV0YSIsICJsZW5ndGgiLCAibG9va3VwTWV0aG9kIiwgIl9yZXZlcnNlUGl4ZWxzIiwgIl9ybG9va3VwQnlLZXkiLCAiX2xvb2t1cEJ5S2V5IiwgIl9zaGFyZWRPcHRpb25zIiwgImVsIiwgInJhbmdlIiwgImdldFJhbmdlIiwgInN0YXJ0IiwgImVuZCIsICJsbyIsICJoaSIsICJldmFsdWF0ZUludGVyYWN0aW9uSXRlbXMiLCAiY2hhcnQiLCAicG9zaXRpb24iLCAiaGFuZGxlciIsICJtZXRhc2V0cyIsICJnZXRTb3J0ZWRWaXNpYmxlRGF0YXNldE1ldGFzIiwgImkiLCAiaWxlbiIsICJpbmRleCIsICJqIiwgImVsZW1lbnQiLCAic2tpcCIsICJnZXREaXN0YW5jZU1ldHJpY0ZvckF4aXMiLCAidXNlWCIsICJpbmRleE9mIiwgInVzZVkiLCAicHQxIiwgInB0MiIsICJkZWx0YVgiLCAiTWF0aCIsICJhYnMiLCAieCIsICJkZWx0YVkiLCAieSIsICJzcXJ0IiwgInBvdyIsICJnZXRJbnRlcnNlY3RJdGVtcyIsICJ1c2VGaW5hbFBvc2l0aW9uIiwgImluY2x1ZGVJbnZpc2libGUiLCAiaXRlbXMiLCAiaXNQb2ludEluQXJlYSIsICJldmFsdWF0aW9uRnVuYyIsICJkYXRhc2V0SW5kZXgiLCAiX2lzUG9pbnRJbkFyZWEiLCAiY2hhcnRBcmVhIiwgImluUmFuZ2UiLCAicHVzaCIsICJnZXROZWFyZXN0UmFkaWFsSXRlbXMiLCAic3RhcnRBbmdsZSIsICJlbmRBbmdsZSIsICJnZXRQcm9wcyIsICJhbmdsZSIsICJnZXRBbmdsZUZyb21Qb2ludCIsICJfYW5nbGVCZXR3ZWVuIiwgImdldE5lYXJlc3RDYXJ0ZXNpYW5JdGVtcyIsICJkaXN0YW5jZU1ldHJpYyIsICJtaW5EaXN0YW5jZSIsICJOdW1iZXIiLCAiUE9TSVRJVkVfSU5GSU5JVFkiLCAiY2VudGVyIiwgImdldENlbnRlclBvaW50IiwgInBvaW50SW5BcmVhIiwgImRpc3RhbmNlIiwgImdldE5lYXJlc3RJdGVtcyIsICJnZXRBeGlzSXRlbXMiLCAicmFuZ2VNZXRob2QiLCAiaW50ZXJzZWN0c0l0ZW0iLCAibW9kZXMiLCAiZSIsICJnZXRSZWxhdGl2ZVBvc2l0aW9uIiwgImVsZW1lbnRzIiwgImZvckVhY2giLCAibWV0YSIsICJkYXRhc2V0IiwgImdldERhdGFzZXRNZXRhIiwgInBvaW50IiwgIm5lYXJlc3QiLCAiU1RBVElDX1BPU0lUSU9OUyIsICJmaWx0ZXJCeVBvc2l0aW9uIiwgImFycmF5IiwgImZpbHRlciIsICJ2IiwgInBvcyIsICJmaWx0ZXJEeW5hbWljUG9zaXRpb25CeUF4aXMiLCAiYm94IiwgInNvcnRCeVdlaWdodCIsICJyZXZlcnNlIiwgInNvcnQiLCAiYSIsICJiIiwgInYwIiwgInYxIiwgIndlaWdodCIsICJ3cmFwQm94ZXMiLCAiYm94ZXMiLCAibGF5b3V0Qm94ZXMiLCAic3RhY2siLCAic3RhY2tXZWlnaHQiLCAiaG9yaXpvbnRhbCIsICJpc0hvcml6b250YWwiLCAiYnVpbGRTdGFja3MiLCAibGF5b3V0cyIsICJzdGFja3MiLCAid3JhcCIsICJpbmNsdWRlcyIsICJfc3RhY2siLCAiY291bnQiLCAicGxhY2VkIiwgInNpemUiLCAic2V0TGF5b3V0RGltcyIsICJwYXJhbXMiLCAidkJveE1heFdpZHRoIiwgImhCb3hNYXhIZWlnaHQiLCAibGF5b3V0IiwgImZ1bGxTaXplIiwgImZhY3RvciIsICJ3aWR0aCIsICJhdmFpbGFibGVXaWR0aCIsICJoZWlnaHQiLCAiYXZhaWxhYmxlSGVpZ2h0IiwgImJ1aWxkTGF5b3V0Qm94ZXMiLCAibGVmdCIsICJyaWdodCIsICJ0b3AiLCAiYm90dG9tIiwgImNlbnRlckhvcml6b250YWwiLCAiY2VudGVyVmVydGljYWwiLCAibGVmdEFuZFRvcCIsICJjb25jYXQiLCAicmlnaHRBbmRCb3R0b20iLCAidmVydGljYWwiLCAiZ2V0Q29tYmluZWRNYXgiLCAibWF4UGFkZGluZyIsICJtYXgiLCAidXBkYXRlTWF4UGFkZGluZyIsICJib3hQYWRkaW5nIiwgInVwZGF0ZURpbXMiLCAiaXNPYmplY3QiLCAiZ2V0UGFkZGluZyIsICJuZXdXaWR0aCIsICJvdXRlcldpZHRoIiwgIm5ld0hlaWdodCIsICJvdXRlckhlaWdodCIsICJ3aWR0aENoYW5nZWQiLCAidyIsICJoZWlnaHRDaGFuZ2VkIiwgImgiLCAic2FtZSIsICJvdGhlciIsICJoYW5kbGVNYXhQYWRkaW5nIiwgInVwZGF0ZVBvcyIsICJjaGFuZ2UiLCAiZ2V0TWFyZ2lucyIsICJtYXJnaW5Gb3JQb3NpdGlvbnMiLCAicG9zaXRpb25zIiwgIm1hcmdpbiIsICJmaXRCb3hlcyIsICJyZWZpdEJveGVzIiwgInJlZml0IiwgImNoYW5nZWQiLCAidXBkYXRlIiwgInNldEJveERpbXMiLCAicGxhY2VCb3hlcyIsICJ1c2VyUGFkZGluZyIsICJwYWRkaW5nIiwgImRlZmluZWQiLCAiYWRkQm94IiwgIml0ZW0iLCAiX2xheWVycyIsICJ6IiwgImRyYXciLCAicmVtb3ZlQm94IiwgImxheW91dEl0ZW0iLCAic3BsaWNlIiwgImNvbmZpZ3VyZSIsICJtaW5QYWRkaW5nIiwgInRvUGFkZGluZyIsICJ2ZXJ0aWNhbEJveGVzIiwgImhvcml6b250YWxCb3hlcyIsICJlYWNoIiwgImJlZm9yZUxheW91dCIsICJ2aXNpYmxlVmVydGljYWxCb3hDb3VudCIsICJyZWR1Y2UiLCAidG90YWwiLCAiZGlzcGxheSIsICJmcmVlemUiLCAiQmFzZVBsYXRmb3JtIiwgImFjcXVpcmVDb250ZXh0IiwgImNhbnZhcyIsICJhc3BlY3RSYXRpbyIsICJyZWxlYXNlQ29udGV4dCIsICJjb250ZXh0IiwgImFkZEV2ZW50TGlzdGVuZXIiLCAidHlwZSIsICJsaXN0ZW5lciIsICJyZW1vdmVFdmVudExpc3RlbmVyIiwgImdldERldmljZVBpeGVsUmF0aW8iLCAiZ2V0TWF4aW11bVNpemUiLCAiZmxvb3IiLCAiaXNBdHRhY2hlZCIsICJ1cGRhdGVDb25maWciLCAiY29uZmlnIiwgIkJhc2ljUGxhdGZvcm0iLCAiZ2V0Q29udGV4dCIsICJhbmltYXRpb24iLCAiRVhQQU5ET19LRVkiLCAiRVZFTlRfVFlQRVMiLCAidG91Y2hzdGFydCIsICJ0b3VjaG1vdmUiLCAidG91Y2hlbmQiLCAicG9pbnRlcmVudGVyIiwgInBvaW50ZXJkb3duIiwgInBvaW50ZXJtb3ZlIiwgInBvaW50ZXJ1cCIsICJwb2ludGVybGVhdmUiLCAicG9pbnRlcm91dCIsICJpc051bGxPckVtcHR5IiwgImluaXRDYW52YXMiLCAic3R5bGUiLCAicmVuZGVySGVpZ2h0IiwgImdldEF0dHJpYnV0ZSIsICJyZW5kZXJXaWR0aCIsICJpbml0aWFsIiwgImJveFNpemluZyIsICJkaXNwbGF5V2lkdGgiLCAicmVhZFVzZWRTaXplIiwgInVuZGVmaW5lZCIsICJkaXNwbGF5SGVpZ2h0IiwgImV2ZW50TGlzdGVuZXJPcHRpb25zIiwgInN1cHBvcnRzRXZlbnRMaXN0ZW5lck9wdGlvbnMiLCAicGFzc2l2ZSIsICJhZGRMaXN0ZW5lciIsICJub2RlIiwgInJlbW92ZUxpc3RlbmVyIiwgImZyb21OYXRpdmVFdmVudCIsICJldmVudCIsICJuYXRpdmUiLCAibm9kZUxpc3RDb250YWlucyIsICJub2RlTGlzdCIsICJjb250YWlucyIsICJjcmVhdGVBdHRhY2hPYnNlcnZlciIsICJvYnNlcnZlciIsICJNdXRhdGlvbk9ic2VydmVyIiwgImVudHJpZXMiLCAidHJpZ2dlciIsICJlbnRyeSIsICJhZGRlZE5vZGVzIiwgInJlbW92ZWROb2RlcyIsICJvYnNlcnZlIiwgImRvY3VtZW50IiwgImNoaWxkTGlzdCIsICJzdWJ0cmVlIiwgImNyZWF0ZURldGFjaE9ic2VydmVyIiwgImRycExpc3RlbmluZ0NoYXJ0cyIsICJNYXAiLCAib2xkRGV2aWNlUGl4ZWxSYXRpbyIsICJvbldpbmRvd1Jlc2l6ZSIsICJkcHIiLCAid2luZG93IiwgImRldmljZVBpeGVsUmF0aW8iLCAicmVzaXplIiwgImN1cnJlbnREZXZpY2VQaXhlbFJhdGlvIiwgImxpc3RlbkRldmljZVBpeGVsUmF0aW9DaGFuZ2VzIiwgInNldCIsICJ1bmxpc3RlbkRldmljZVBpeGVsUmF0aW9DaGFuZ2VzIiwgImRlbGV0ZSIsICJjcmVhdGVSZXNpemVPYnNlcnZlciIsICJjb250YWluZXIiLCAiX2dldFBhcmVudE5vZGUiLCAidGhyb3R0bGVkIiwgImNsaWVudFdpZHRoIiwgIlJlc2l6ZU9ic2VydmVyIiwgImNvbnRlbnRSZWN0IiwgInJlbGVhc2VPYnNlcnZlciIsICJkaXNjb25uZWN0IiwgImNyZWF0ZVByb3h5QW5kTGlzdGVuIiwgInByb3h5IiwgImN0eCIsICJEb21QbGF0Zm9ybSIsICJwcm9wIiwgImlzTnVsbE9yVW5kZWYiLCAicmVtb3ZlQXR0cmlidXRlIiwgInNldEF0dHJpYnV0ZSIsICJrZXlzIiwgImtleSIsICJwcm94aWVzIiwgIiRwcm94aWVzIiwgImhhbmRsZXJzIiwgImF0dGFjaCIsICJkZXRhY2giLCAiaXNDb25uZWN0ZWQiLCAiX2RldGVjdFBsYXRmb3JtIiwgIl9pc0RvbVN1cHBvcnRlZCIsICJPZmZzY3JlZW5DYW52YXMiLCAiRWxlbWVudCIsICJhY3RpdmUiLCAiJGFuaW1hdGlvbnMiLCAidG9vbHRpcFBvc2l0aW9uIiwgImhhc1ZhbHVlIiwgImlzTnVtYmVyIiwgInByb3BzIiwgImZpbmFsIiwgImFuaW1zIiwgInJldCIsICJfdG8iLCAiZGVmYXVsdHMiLCAiZGVmYXVsdFJvdXRlcyIsICJhdXRvU2tpcCIsICJzY2FsZSIsICJ0aWNrcyIsICJ0aWNrT3B0cyIsICJkZXRlcm1pbmVkTWF4VGlja3MiLCAiZGV0ZXJtaW5lTWF4VGlja3MiLCAidGlja3NMaW1pdCIsICJtaW4iLCAibWF4VGlja3NMaW1pdCIsICJtYWpvckluZGljZXMiLCAibWFqb3IiLCAiZW5hYmxlZCIsICJnZXRNYWpvckluZGljZXMiLCAibnVtTWFqb3JJbmRpY2VzIiwgImZpcnN0IiwgImxhc3QiLCAibmV3VGlja3MiLCAic2tpcE1ham9ycyIsICJzcGFjaW5nIiwgImNhbGN1bGF0ZVNwYWNpbmciLCAiYXZnTWFqb3JTcGFjaW5nIiwgInJvdW5kIiwgIm9mZnNldCIsICJ0aWNrTGVuZ3RoIiwgIl90aWNrU2l6ZSIsICJtYXhTY2FsZSIsICJfbGVuZ3RoIiwgIm1heENoYXJ0IiwgIl9tYXhMZW5ndGgiLCAiZXZlbk1ham9yU3BhY2luZyIsICJnZXRFdmVuU3BhY2luZyIsICJmYWN0b3JzIiwgIl9mYWN0b3JpemUiLCAicmVzdWx0IiwgIm5leHQiLCAiY2VpbCIsICJtYWpvclN0YXJ0IiwgIm1ham9yRW5kIiwgInZhbHVlT3JEZWZhdWx0IiwgImFyciIsICJsZW4iLCAicmV2ZXJzZUFsaWduIiwgImFsaWduIiwgIm9mZnNldEZyb21FZGdlIiwgImVkZ2UiLCAiZ2V0VGlja3NMaW1pdCIsICJ0aWNrc0xlbmd0aCIsICJzYW1wbGUiLCAibnVtSXRlbXMiLCAiaW5jcmVtZW50IiwgImdldFBpeGVsRm9yR3JpZExpbmUiLCAib2Zmc2V0R3JpZExpbmVzIiwgInZhbGlkSW5kZXgiLCAiX3N0YXJ0UGl4ZWwiLCAiX2VuZFBpeGVsIiwgImVwc2lsb24iLCAibGluZVZhbHVlIiwgImdldFBpeGVsRm9yVGljayIsICJnYXJiYWdlQ29sbGVjdCIsICJjYWNoZXMiLCAiY2FjaGUiLCAiZ2MiLCAiZ2NMZW4iLCAiZ2V0VGlja01hcmtMZW5ndGgiLCAiZHJhd1RpY2tzIiwgImdldFRpdGxlSGVpZ2h0IiwgImZhbGxiYWNrIiwgImZvbnQiLCAidG9Gb250IiwgImxpbmVzIiwgImlzQXJyYXkiLCAidGV4dCIsICJsaW5lSGVpZ2h0IiwgImNyZWF0ZVNjYWxlQ29udGV4dCIsICJwYXJlbnQiLCAiY3JlYXRlQ29udGV4dCIsICJjcmVhdGVUaWNrQ29udGV4dCIsICJ0aWNrIiwgInRpdGxlQWxpZ24iLCAiX3RvTGVmdFJpZ2h0Q2VudGVyIiwgInRpdGxlQXJncyIsICJzY2FsZXMiLCAicm90YXRpb24iLCAibWF4V2lkdGgiLCAidGl0bGVYIiwgInRpdGxlWSIsICJfYWxpZ25TdGFydEVuZCIsICJwb3NpdGlvbkF4aXNJRCIsICJnZXRQaXhlbEZvclZhbHVlIiwgIkhBTEZfUEkiLCAiU2NhbGUiLCAiY2ZnIiwgImlkIiwgIl9tYXJnaW5zIiwgIm1heEhlaWdodCIsICJwYWRkaW5nVG9wIiwgInBhZGRpbmdCb3R0b20iLCAicGFkZGluZ0xlZnQiLCAicGFkZGluZ1JpZ2h0IiwgImxhYmVsUm90YXRpb24iLCAiX3JhbmdlIiwgIl9ncmlkTGluZUl0ZW1zIiwgIl9sYWJlbEl0ZW1zIiwgIl9sYWJlbFNpemVzIiwgIl9sb25nZXN0VGV4dENhY2hlIiwgIl91c2VyTWF4IiwgIl91c2VyTWluIiwgIl9zdWdnZXN0ZWRNYXgiLCAiX3N1Z2dlc3RlZE1pbiIsICJfdGlja3NMZW5ndGgiLCAiX2JvcmRlclZhbHVlIiwgIl9jYWNoZSIsICJfZGF0YUxpbWl0c0NhY2hlZCIsICIkY29udGV4dCIsICJzZXRDb250ZXh0IiwgInN1Z2dlc3RlZE1pbiIsICJzdWdnZXN0ZWRNYXgiLCAicmF3IiwgImdldFVzZXJCb3VuZHMiLCAiZmluaXRlT3JEZWZhdWx0IiwgIk5FR0FUSVZFX0lORklOSVRZIiwgIm1pbkRlZmluZWQiLCAiaXNGaW5pdGUiLCAibWF4RGVmaW5lZCIsICJnZXRNaW5NYXgiLCAiY2FuU3RhY2siLCAibWV0YXMiLCAiZ2V0TWF0Y2hpbmdWaXNpYmxlTWV0YXMiLCAiZ2V0VGlja3MiLCAiZ2V0TGFiZWxzIiwgImxhYmVscyIsICJ4TGFiZWxzIiwgInlMYWJlbHMiLCAiZ2V0TGFiZWxJdGVtcyIsICJfY29tcHV0ZUxhYmVsSXRlbXMiLCAiYmVmb3JlVXBkYXRlIiwgImNhbGwiLCAibWFyZ2lucyIsICJiZWdpbkF0WmVybyIsICJncmFjZSIsICJzYW1wbGVTaXplIiwgImJlZm9yZVNldERpbWVuc2lvbnMiLCAic2V0RGltZW5zaW9ucyIsICJhZnRlclNldERpbWVuc2lvbnMiLCAiYmVmb3JlRGF0YUxpbWl0cyIsICJkZXRlcm1pbmVEYXRhTGltaXRzIiwgImFmdGVyRGF0YUxpbWl0cyIsICJfYWRkR3JhY2UiLCAiYmVmb3JlQnVpbGRUaWNrcyIsICJidWlsZFRpY2tzIiwgImFmdGVyQnVpbGRUaWNrcyIsICJzYW1wbGluZ0VuYWJsZWQiLCAiX2NvbnZlcnRUaWNrc1RvTGFiZWxzIiwgImJlZm9yZUNhbGN1bGF0ZUxhYmVsUm90YXRpb24iLCAiY2FsY3VsYXRlTGFiZWxSb3RhdGlvbiIsICJhZnRlckNhbGN1bGF0ZUxhYmVsUm90YXRpb24iLCAic291cmNlIiwgImFmdGVyQXV0b1NraXAiLCAiYmVmb3JlRml0IiwgImZpdCIsICJhZnRlckZpdCIsICJhZnRlclVwZGF0ZSIsICJyZXZlcnNlUGl4ZWxzIiwgInN0YXJ0UGl4ZWwiLCAiZW5kUGl4ZWwiLCAiX2FsaWduVG9QaXhlbHMiLCAiYWxpZ25Ub1BpeGVscyIsICJfY2FsbEhvb2tzIiwgIm5hbWUiLCAibm90aWZ5UGx1Z2lucyIsICJiZWZvcmVUaWNrVG9MYWJlbENvbnZlcnNpb24iLCAiZ2VuZXJhdGVUaWNrTGFiZWxzIiwgImxhYmVsIiwgImNhbGxiYWNrIiwgImFmdGVyVGlja1RvTGFiZWxDb252ZXJzaW9uIiwgIm51bVRpY2tzIiwgIm1pblJvdGF0aW9uIiwgIm1heFJvdGF0aW9uIiwgInRpY2tXaWR0aCIsICJtYXhMYWJlbERpYWdvbmFsIiwgIl9pc1Zpc2libGUiLCAibGFiZWxTaXplcyIsICJfZ2V0TGFiZWxTaXplcyIsICJtYXhMYWJlbFdpZHRoIiwgIndpZGVzdCIsICJtYXhMYWJlbEhlaWdodCIsICJoaWdoZXN0IiwgIl9saW1pdFZhbHVlIiwgImdyaWQiLCAidGl0bGUiLCAidG9EZWdyZWVzIiwgImFzaW4iLCAibWluU2l6ZSIsICJ0aXRsZU9wdHMiLCAiZ3JpZE9wdHMiLCAidGl0bGVIZWlnaHQiLCAidGlja1BhZGRpbmciLCAiYW5nbGVSYWRpYW5zIiwgInRvUmFkaWFucyIsICJjb3MiLCAic2luIiwgImxhYmVsSGVpZ2h0IiwgIm1pcnJvciIsICJsYWJlbFdpZHRoIiwgIl9jYWxjdWxhdGVQYWRkaW5nIiwgIl9oYW5kbGVNYXJnaW5zIiwgImlzUm90YXRlZCIsICJsYWJlbHNCZWxvd1RpY2tzIiwgIm9mZnNldExlZnQiLCAib2Zmc2V0UmlnaHQiLCAiaXNGdWxsU2l6ZSIsICJfY29tcHV0ZUxhYmVsU2l6ZXMiLCAid2lkdGhzIiwgImhlaWdodHMiLCAid2lkZXN0TGFiZWxTaXplIiwgImhpZ2hlc3RMYWJlbFNpemUiLCAiamxlbiIsICJ0aWNrRm9udCIsICJmb250U3RyaW5nIiwgIm5lc3RlZExhYmVsIiwgIl9yZXNvbHZlVGlja0ZvbnRPcHRpb25zIiwgInN0cmluZyIsICJfbWVhc3VyZVRleHQiLCAidmFsdWVBdCIsICJpZHgiLCAiZ2V0TGFiZWxGb3JWYWx1ZSIsICJOYU4iLCAiZ2V0VmFsdWVGb3JQaXhlbCIsICJwaXhlbCIsICJnZXRQaXhlbEZvckRlY2ltYWwiLCAiZGVjaW1hbCIsICJfaW50MTZSYW5nZSIsICJfYWxpZ25QaXhlbCIsICJnZXREZWNpbWFsRm9yUGl4ZWwiLCAiZ2V0QmFzZVBpeGVsIiwgImdldEJhc2VWYWx1ZSIsICJvcHRpb25UaWNrcyIsICJyb3QiLCAiYXV0b1NraXBQYWRkaW5nIiwgIl9jb21wdXRlR3JpZExpbmVJdGVtcyIsICJib3JkZXIiLCAidGwiLCAiYm9yZGVyT3B0cyIsICJheGlzV2lkdGgiLCAiYXhpc0hhbGZXaWR0aCIsICJhbGlnbkJvcmRlclZhbHVlIiwgImJvcmRlclZhbHVlIiwgImFsaWduZWRMaW5lVmFsdWUiLCAidHgxIiwgInR5MSIsICJ0eDIiLCAidHkyIiwgIngxIiwgInkxIiwgIngyIiwgInkyIiwgImxpbWl0IiwgInN0ZXAiLCAib3B0c0F0SW5kZXgiLCAib3B0c0F0SW5kZXhCb3JkZXIiLCAibGluZVdpZHRoIiwgImxpbmVDb2xvciIsICJjb2xvciIsICJib3JkZXJEYXNoIiwgImRhc2giLCAiYm9yZGVyRGFzaE9mZnNldCIsICJkYXNoT2Zmc2V0IiwgInRpY2tDb2xvciIsICJ0aWNrQm9yZGVyRGFzaCIsICJ0aWNrQm9yZGVyRGFzaE9mZnNldCIsICJjcm9zc0FsaWduIiwgInRpY2tBbmRQYWRkaW5nIiwgImhUaWNrQW5kUGFkZGluZyIsICJ0ZXh0QWxpZ24iLCAibGluZUNvdW50IiwgInRleHRPZmZzZXQiLCAidGV4dEJhc2VsaW5lIiwgIl9nZXRYQXhpc0xhYmVsQWxpZ25tZW50IiwgIl9nZXRZQXhpc0xhYmVsQWxpZ25tZW50IiwgImxhYmVsT2Zmc2V0IiwgImhhbGZDb3VudCIsICJzdHJva2VDb2xvciIsICJ0ZXh0U3Ryb2tlQ29sb3IiLCAic3Ryb2tlV2lkdGgiLCAidGV4dFN0cm9rZVdpZHRoIiwgInRpY2tUZXh0QWxpZ24iLCAic2hvd0xhYmVsQmFja2Ryb3AiLCAiYmFja2Ryb3AiLCAibGFiZWxQYWRkaW5nIiwgImJhY2tkcm9wUGFkZGluZyIsICJiYWNrZHJvcENvbG9yIiwgInRyYW5zbGF0aW9uIiwgIl9jb21wdXRlTGFiZWxBcmVhIiwgImRyYXdCYWNrZ3JvdW5kIiwgImJhY2tncm91bmRDb2xvciIsICJzYXZlIiwgImZpbGxTdHlsZSIsICJmaWxsUmVjdCIsICJyZXN0b3JlIiwgImdldExpbmVXaWR0aEZvclZhbHVlIiwgImZpbmRJbmRleCIsICJ0IiwgIm9wdHMiLCAiZHJhd0dyaWQiLCAiZHJhd0xpbmUiLCAicDEiLCAicDIiLCAic3Ryb2tlU3R5bGUiLCAic2V0TGluZURhc2giLCAibGluZURhc2hPZmZzZXQiLCAiYmVnaW5QYXRoIiwgIm1vdmVUbyIsICJsaW5lVG8iLCAic3Ryb2tlIiwgImRyYXdPbkNoYXJ0QXJlYSIsICJkcmF3Qm9yZGVyIiwgImxhc3RMaW5lV2lkdGgiLCAiZHJhd0xhYmVscyIsICJhcmVhIiwgImNsaXBBcmVhIiwgInJlbmRlclRleHRPcHRpb25zIiwgInJlbmRlclRleHQiLCAidW5jbGlwQXJlYSIsICJkcmF3VGl0bGUiLCAidHoiLCAiZ3oiLCAiYnoiLCAiYXhpc0lEIiwgIl9tYXhEaWdpdHMiLCAiZm9udFNpemUiLCAiVHlwZWRSZWdpc3RyeSIsICJzY29wZSIsICJjcmVhdGUiLCAiaXNGb3JUeXBlIiwgImlzUHJvdG90eXBlT2YiLCAicmVnaXN0ZXIiLCAicHJvdG8iLCAiZ2V0UHJvdG90eXBlT2YiLCAicGFyZW50U2NvcGUiLCAiaXNJQ2hhcnRDb21wb25lbnQiLCAicmVnaXN0ZXJEZWZhdWx0cyIsICJvdmVycmlkZXMiLCAiZ2V0IiwgInVucmVnaXN0ZXIiLCAiaXRlbURlZmF1bHRzIiwgIm1lcmdlIiwgInJvdXRlRGVmYXVsdHMiLCAiZGVzY3JpcHRvcnMiLCAiZGVzY3JpYmUiLCAicm91dGVzIiwgInByb3BlcnR5IiwgInByb3BlcnR5UGFydHMiLCAic3BsaXQiLCAic291cmNlTmFtZSIsICJwb3AiLCAic291cmNlU2NvcGUiLCAiam9pbiIsICJwYXJ0cyIsICJ0YXJnZXROYW1lIiwgInRhcmdldFNjb3BlIiwgInJvdXRlIiwgIlJlZ2lzdHJ5IiwgImNvbnRyb2xsZXJzIiwgIkRhdGFzZXRDb250cm9sbGVyIiwgInBsdWdpbnMiLCAiX3R5cGVkUmVnaXN0cmllcyIsICJhcmdzIiwgIl9lYWNoIiwgInJlbW92ZSIsICJhZGRDb250cm9sbGVycyIsICJhZGRFbGVtZW50cyIsICJhZGRQbHVnaW5zIiwgImFkZFNjYWxlcyIsICJnZXRDb250cm9sbGVyIiwgIl9nZXQiLCAiZ2V0RWxlbWVudCIsICJnZXRQbHVnaW4iLCAiZ2V0U2NhbGUiLCAicmVtb3ZlQ29udHJvbGxlcnMiLCAicmVtb3ZlRWxlbWVudHMiLCAicmVtb3ZlUGx1Z2lucyIsICJyZW1vdmVTY2FsZXMiLCAibWV0aG9kIiwgInR5cGVkUmVnaXN0cnkiLCAiYXJnIiwgInJlZyIsICJfZ2V0UmVnaXN0cnlGb3JUeXBlIiwgIl9leGVjIiwgIml0ZW1SZWciLCAicmVnaXN0cnkiLCAiY29tcG9uZW50IiwgImNhbWVsTWV0aG9kIiwgIl9jYXBpdGFsaXplIiwgIlBsdWdpblNlcnZpY2UiLCAiX2luaXQiLCAibm90aWZ5IiwgImhvb2siLCAiX2NyZWF0ZURlc2NyaXB0b3JzIiwgIl9ub3RpZnkiLCAiX2Rlc2NyaXB0b3JzIiwgImRlc2NyaXB0b3IiLCAicGx1Z2luIiwgImNhbGxDYWxsYmFjayIsICJjYW5jZWxhYmxlIiwgImludmFsaWRhdGUiLCAiX29sZENhY2hlIiwgIl9ub3RpZnlTdGF0ZUNoYW5nZXMiLCAiYWxsIiwgImFsbFBsdWdpbnMiLCAiY3JlYXRlRGVzY3JpcHRvcnMiLCAicHJldmlvdXNEZXNjcmlwdG9ycyIsICJzb21lIiwgImxvY2FsSWRzIiwgImxvY2FsIiwgImdldE9wdHMiLCAicGx1Z2luT3B0cyIsICJwbHVnaW5TY29wZUtleXMiLCAic2NvcGVzIiwgImdldE9wdGlvblNjb3BlcyIsICJjcmVhdGVSZXNvbHZlciIsICJzY3JpcHRhYmxlIiwgImluZGV4YWJsZSIsICJhbGxLZXlzIiwgImdldEluZGV4QXhpcyIsICJkYXRhc2V0RGVmYXVsdHMiLCAiZGF0YXNldHMiLCAiZGF0YXNldE9wdGlvbnMiLCAiaW5kZXhBeGlzIiwgImdldEF4aXNGcm9tRGVmYXVsdFNjYWxlSUQiLCAiZ2V0RGVmYXVsdFNjYWxlSURGcm9tQXhpcyIsICJpZE1hdGNoZXNBeGlzIiwgImF4aXNGcm9tUG9zaXRpb24iLCAiZGV0ZXJtaW5lQXhpcyIsICJzY2FsZU9wdGlvbnMiLCAidG9Mb3dlckNhc2UiLCAiZ2V0QXhpc0Zyb21EYXRhc2V0IiwgInJldHJpZXZlQXhpc0Zyb21EYXRhc2V0cyIsICJib3VuZERzIiwgImQiLCAieEF4aXNJRCIsICJ5QXhpc0lEIiwgIm1lcmdlU2NhbGVDb25maWciLCAiY2hhcnREZWZhdWx0cyIsICJjb25maWdTY2FsZXMiLCAiY2hhcnRJbmRleEF4aXMiLCAic2NhbGVDb25mIiwgImNvbnNvbGUiLCAiZXJyb3IiLCAiX3Byb3h5IiwgIndhcm4iLCAiZGVmYXVsdElkIiwgImRlZmF1bHRTY2FsZU9wdGlvbnMiLCAibWVyZ2VJZiIsICJkZWZhdWx0SUQiLCAiaW5pdE9wdGlvbnMiLCAiaW5pdERhdGEiLCAiaW5pdENvbmZpZyIsICJrZXlDYWNoZSIsICJrZXlzQ2FjaGVkIiwgIlNldCIsICJjYWNoZWRLZXlzIiwgImNhY2hlS2V5IiwgImdlbmVyYXRlIiwgImFkZElmRm91bmQiLCAib2JqIiwgInJlc29sdmVPYmplY3RLZXkiLCAiQ29uZmlnIiwgIl9jb25maWciLCAiX3Njb3BlQ2FjaGUiLCAiX3Jlc29sdmVyQ2FjaGUiLCAicGxhdGZvcm0iLCAiY2xlYXJDYWNoZSIsICJjbGVhciIsICJkYXRhc2V0U2NvcGVLZXlzIiwgImRhdGFzZXRUeXBlIiwgImRhdGFzZXRBbmltYXRpb25TY29wZUtleXMiLCAidHJhbnNpdGlvbiIsICJkYXRhc2V0RWxlbWVudFNjb3BlS2V5cyIsICJlbGVtZW50VHlwZSIsICJhZGRpdGlvbmFsT3B0aW9uU2NvcGVzIiwgIl9jYWNoZWRTY29wZXMiLCAibWFpblNjb3BlIiwgInJlc2V0Q2FjaGUiLCAia2V5TGlzdHMiLCAiY2FjaGVkIiwgIkFycmF5IiwgImZyb20iLCAiaGFzIiwgImNoYXJ0T3B0aW9uU2NvcGVzIiwgInJlc29sdmVOYW1lZE9wdGlvbnMiLCAibmFtZXMiLCAicHJlZml4ZXMiLCAiJHNoYXJlZCIsICJyZXNvbHZlciIsICJzdWJQcmVmaXhlcyIsICJnZXRSZXNvbHZlciIsICJuZWVkQ29udGV4dCIsICJpc0Z1bmN0aW9uIiwgInN1YlJlc29sdmVyIiwgIl9hdHRhY2hDb250ZXh0IiwgImRlc2NyaXB0b3JEZWZhdWx0cyIsICJyZXNvbHZlckNhY2hlIiwgIl9jcmVhdGVSZXNvbHZlciIsICJwIiwgImhhc0Z1bmN0aW9uIiwgImdldE93blByb3BlcnR5TmFtZXMiLCAiYWNjIiwgImlzU2NyaXB0YWJsZSIsICJpc0luZGV4YWJsZSIsICJLTk9XTl9QT1NJVElPTlMiLCAicG9zaXRpb25Jc0hvcml6b250YWwiLCAiY29tcGFyZTJMZXZlbCIsICJsMSIsICJsMiIsICJvbkFuaW1hdGlvbnNDb21wbGV0ZSIsICJhbmltYXRpb25PcHRpb25zIiwgIm9uQ29tcGxldGUiLCAib25BbmltYXRpb25Qcm9ncmVzcyIsICJvblByb2dyZXNzIiwgImdldENhbnZhcyIsICJnZXRFbGVtZW50QnlJZCIsICJpbnN0YW5jZXMiLCAiZ2V0Q2hhcnQiLCAidmFsdWVzIiwgImMiLCAibW92ZU51bWVyaWNLZXlzIiwgIm1vdmUiLCAiaW50S2V5IiwgImRldGVybWluZUxhc3RFdmVudCIsICJsYXN0RXZlbnQiLCAiaW5DaGFydEFyZWEiLCAiaXNDbGljayIsICJnZXREYXRhc2V0QXJlYSIsICJ4U2NhbGUiLCAieVNjYWxlIiwgIkNoYXJ0IiwgImludmFsaWRhdGVQbHVnaW5zIiwgInVzZXJDb25maWciLCAiaW5pdGlhbENhbnZhcyIsICJleGlzdGluZ0NoYXJ0IiwgInVpZCIsICJfb3B0aW9ucyIsICJfYXNwZWN0UmF0aW8iLCAiX21ldGFzZXRzIiwgIl9zdGFja3MiLCAiX2FjdGl2ZSIsICJfbGFzdEV2ZW50IiwgIl9saXN0ZW5lcnMiLCAiX3Jlc3BvbnNpdmVMaXN0ZW5lcnMiLCAiX3NvcnRlZE1ldGFzZXRzIiwgIl9wbHVnaW5zIiwgIl9oaWRkZW5JbmRpY2VzIiwgImF0dGFjaGVkIiwgIl9hbmltYXRpb25zRGlzYWJsZWQiLCAiX2RvUmVzaXplIiwgImRlYm91bmNlIiwgIm1vZGUiLCAicmVzaXplRGVsYXkiLCAiX2RhdGFDaGFuZ2VzIiwgImFuaW1hdG9yIiwgImxpc3RlbiIsICJfaW5pdGlhbGl6ZSIsICJtYWludGFpbkFzcGVjdFJhdGlvIiwgInJlc3BvbnNpdmUiLCAicmV0aW5hU2NhbGUiLCAiYmluZEV2ZW50cyIsICJjbGVhckNhbnZhcyIsICJzdG9wIiwgInJ1bm5pbmciLCAiX3Jlc2l6ZSIsICJfcmVzaXplQmVmb3JlRHJhdyIsICJuZXdTaXplIiwgIm5ld1JhdGlvIiwgIm9uUmVzaXplIiwgInJlbmRlciIsICJlbnN1cmVTY2FsZXNIYXZlSURzIiwgInNjYWxlc09wdGlvbnMiLCAiYXhpc09wdGlvbnMiLCAiYnVpbGRPclVwZGF0ZVNjYWxlcyIsICJzY2FsZU9wdHMiLCAidXBkYXRlZCIsICJtYXAiLCAiaXNSYWRpYWwiLCAiZHBvc2l0aW9uIiwgImR0eXBlIiwgInNjYWxlVHlwZSIsICJzY2FsZUNsYXNzIiwgImhhc1VwZGF0ZWQiLCAiX3VwZGF0ZU1ldGFzZXRzIiwgIm51bURhdGEiLCAibnVtTWV0YSIsICJfZGVzdHJveURhdGFzZXRNZXRhIiwgInNsaWNlIiwgIl9yZW1vdmVVbnJlZmVyZW5jZWRNZXRhc2V0cyIsICJfZGF0YXNldCIsICJidWlsZE9yVXBkYXRlQ29udHJvbGxlcnMiLCAibmV3Q29udHJvbGxlcnMiLCAib3JkZXIiLCAidmlzaWJsZSIsICJpc0RhdGFzZXRWaXNpYmxlIiwgInVwZGF0ZUluZGV4IiwgImxpbmtTY2FsZXMiLCAiQ29udHJvbGxlckNsYXNzIiwgImRhdGFzZXRFbGVtZW50VHlwZSIsICJkYXRhRWxlbWVudFR5cGUiLCAiX3Jlc2V0RWxlbWVudHMiLCAicmVzZXQiLCAiYW5pbXNEaXNhYmxlZCIsICJfdXBkYXRlU2NhbGVzIiwgIl9jaGVja0V2ZW50QmluZGluZ3MiLCAiX3VwZGF0ZUhpZGRlbkluZGljZXMiLCAiYnVpbGRPclVwZGF0ZUVsZW1lbnRzIiwgImdldE1heE92ZXJmbG93IiwgIl9taW5QYWRkaW5nIiwgImF1dG9QYWRkaW5nIiwgIl91cGRhdGVMYXlvdXQiLCAiX3VwZGF0ZURhdGFzZXRzIiwgIl9ldmVudEhhbmRsZXIiLCAiX3VwZGF0ZUhvdmVyU3R5bGVzIiwgImV4aXN0aW5nRXZlbnRzIiwgIm5ld0V2ZW50cyIsICJldmVudHMiLCAic2V0c0VxdWFsIiwgInVuYmluZEV2ZW50cyIsICJjaGFuZ2VzIiwgIl9nZXRVbmlmb3JtRGF0YUNoYW5nZXMiLCAiZGF0YXNldENvdW50IiwgIm1ha2VTZXQiLCAiY2hhbmdlU2V0IiwgIm5vQXJlYSIsICJfaWR4IiwgIl91cGRhdGVEYXRhc2V0IiwgIl91cGRhdGUiLCAibGF5ZXJzIiwgIl9kcmF3RGF0YXNldHMiLCAiX2dldFNvcnRlZERhdGFzZXRNZXRhcyIsICJmaWx0ZXJWaXNpYmxlIiwgIl9kcmF3RGF0YXNldCIsICJjbGlwIiwgIl9jbGlwIiwgInVzZUNsaXAiLCAiZGlzYWJsZWQiLCAiZ2V0RWxlbWVudHNBdEV2ZW50Rm9yTW9kZSIsICJJbnRlcmFjdGlvbiIsICJoaWRkZW4iLCAiX3BhcnNlZCIsICJnZXRWaXNpYmxlRGF0YXNldENvdW50IiwgInNldERhdGFzZXRWaXNpYmlsaXR5IiwgInRvZ2dsZURhdGFWaXNpYmlsaXR5IiwgImdldERhdGFWaXNpYmlsaXR5IiwgIl91cGRhdGVWaXNpYmlsaXR5IiwgImRhdGFJbmRleCIsICJfcmVzb2x2ZUFuaW1hdGlvbnMiLCAiaGlkZSIsICJzaG93IiwgIl9kZXN0cm95IiwgIl9zdG9wIiwgImRlc3Ryb3kiLCAidG9CYXNlNjRJbWFnZSIsICJ0b0RhdGFVUkwiLCAiYmluZFVzZXJFdmVudHMiLCAiYmluZFJlc3BvbnNpdmVFdmVudHMiLCAibGlzdGVuZXJzIiwgIl9hZGQiLCAib2Zmc2V0WCIsICJvZmZzZXRZIiwgIl9yZW1vdmUiLCAiZGV0YWNoZWQiLCAidXBkYXRlSG92ZXJTdHlsZSIsICJwcmVmaXgiLCAiZ2V0QWN0aXZlRWxlbWVudHMiLCAic2V0QWN0aXZlRWxlbWVudHMiLCAiYWN0aXZlRWxlbWVudHMiLCAibGFzdEFjdGl2ZSIsICJfZWxlbWVudHNFcXVhbCIsICJpc1BsdWdpbkVuYWJsZWQiLCAicGx1Z2luSWQiLCAicmVwbGF5IiwgImhvdmVyT3B0aW9ucyIsICJob3ZlciIsICJkZWFjdGl2YXRlZCIsICJhY3RpdmF0ZWQiLCAiZXZlbnRGaWx0ZXIiLCAiX2hhbmRsZUV2ZW50IiwgIl9nZXRBY3RpdmVFbGVtZW50cyIsICJfaXNDbGlja0V2ZW50IiwgIm9uSG92ZXIiLCAib25DbGljayIsICJ2ZXJzaW9uIiwgImNsaXBBcmMiLCAicGl4ZWxNYXJnaW4iLCAib3V0ZXJSYWRpdXMiLCAiaW5uZXJSYWRpdXMiLCAiYW5nbGVNYXJnaW4iLCAiYXJjIiwgImNsb3NlUGF0aCIsICJ0b1JhZGl1c0Nvcm5lcnMiLCAiX3JlYWRWYWx1ZVRvUHJvcHMiLCAicGFyc2VCb3JkZXJSYWRpdXMiLCAiYW5nbGVEZWx0YSIsICJvIiwgImJvcmRlclJhZGl1cyIsICJoYWxmVGhpY2tuZXNzIiwgImlubmVyTGltaXQiLCAiY29tcHV0ZU91dGVyTGltaXQiLCAidmFsIiwgIm91dGVyQXJjTGltaXQiLCAib3V0ZXJTdGFydCIsICJvdXRlckVuZCIsICJpbm5lclN0YXJ0IiwgImlubmVyRW5kIiwgInJUaGV0YVRvWFkiLCAiciIsICJ0aGV0YSIsICJwYXRoQXJjIiwgImNpcmN1bGFyIiwgImlubmVyUiIsICJzcGFjaW5nT2Zmc2V0IiwgImFscGhhIiwgIm5vU3BhY2luZ0lubmVyUmFkaXVzIiwgIm5vU3BhY2luZ091dGVyUmFkaXVzIiwgImF2Tm9nU3BhY2luZ1JhZGl1cyIsICJhZGp1c3RlZEFuZ2xlIiwgImJldGEiLCAiUEkiLCAiYW5nbGVPZmZzZXQiLCAib3V0ZXJTdGFydEFkanVzdGVkUmFkaXVzIiwgIm91dGVyRW5kQWRqdXN0ZWRSYWRpdXMiLCAib3V0ZXJTdGFydEFkanVzdGVkQW5nbGUiLCAib3V0ZXJFbmRBZGp1c3RlZEFuZ2xlIiwgImlubmVyU3RhcnRBZGp1c3RlZFJhZGl1cyIsICJpbm5lckVuZEFkanVzdGVkUmFkaXVzIiwgImlubmVyU3RhcnRBZGp1c3RlZEFuZ2xlIiwgImlubmVyRW5kQWRqdXN0ZWRBbmdsZSIsICJvdXRlck1pZEFkanVzdGVkQW5nbGUiLCAicENlbnRlciIsICJwNCIsICJpbm5lck1pZEFkanVzdGVkQW5nbGUiLCAicDgiLCAib3V0ZXJTdGFydFgiLCAib3V0ZXJTdGFydFkiLCAib3V0ZXJFbmRYIiwgIm91dGVyRW5kWSIsICJkcmF3QXJjIiwgImZ1bGxDaXJjbGVzIiwgImNpcmN1bWZlcmVuY2UiLCAiZmlsbCIsICJpc05hTiIsICJUQVUiLCAiYm9yZGVyV2lkdGgiLCAiYm9yZGVySm9pblN0eWxlIiwgImlubmVyIiwgImJvcmRlckFsaWduIiwgImxpbmVKb2luIiwgIkFyY0VsZW1lbnQiLCAiY2hhcnRYIiwgImNoYXJ0WSIsICJyQWRqdXN0IiwgIl9jaXJjdW1mZXJlbmNlIiwgImJldHdlZW5BbmdsZXMiLCAid2l0aGluUmFkaXVzIiwgIl9pc0JldHdlZW4iLCAiaGFsZkFuZ2xlIiwgImhhbGZSYWRpdXMiLCAidHJhbnNsYXRlIiwgImZpeCIsICJyYWRpdXNPZmZzZXQiLCAiYm9yZGVyQ29sb3IiLCAiX3NjcmlwdGFibGUiLCAiX2luZGV4YWJsZSIsICJnZXRCYXJCb3VuZHMiLCAiYmFyIiwgInVzZUZpbmFsUG9zaXRpb24iLCAieCIsICJ5IiwgImJhc2UiLCAid2lkdGgiLCAiaGVpZ2h0IiwgImdldFByb3BzIiwgImxlZnQiLCAicmlnaHQiLCAidG9wIiwgImJvdHRvbSIsICJoYWxmIiwgImhvcml6b250YWwiLCAiTWF0aCIsICJtaW4iLCAibWF4IiwgInNraXBPckxpbWl0IiwgInNraXAiLCAidmFsdWUiLCAiX2xpbWl0VmFsdWUiLCAicGFyc2VCb3JkZXJXaWR0aCIsICJtYXhXIiwgIm1heEgiLCAib3B0aW9ucyIsICJib3JkZXJXaWR0aCIsICJib3JkZXJTa2lwcGVkIiwgIm8iLCAidG9UUkJMIiwgInQiLCAiciIsICJiIiwgImwiLCAicGFyc2VCb3JkZXJSYWRpdXMiLCAiZW5hYmxlQm9yZGVyUmFkaXVzIiwgImJvcmRlclJhZGl1cyIsICJ0b1RSQkxDb3JuZXJzIiwgIm1heFIiLCAiZW5hYmxlQm9yZGVyIiwgImlzT2JqZWN0IiwgInRvcExlZnQiLCAidG9wUmlnaHQiLCAiYm90dG9tTGVmdCIsICJib3R0b21SaWdodCIsICJib3VuZGluZ1JlY3RzIiwgImJvdW5kcyIsICJib3JkZXIiLCAicmFkaXVzIiwgIm91dGVyIiwgInciLCAiaCIsICJpbm5lciIsICJpblJhbmdlIiwgInNraXBYIiwgInNraXBZIiwgInNraXBCb3RoIiwgIl9pc0JldHdlZW4iLCAiaGFzUmFkaXVzIiwgImFkZE5vcm1hbFJlY3RQYXRoIiwgImN0eCIsICJyZWN0IiwgImluZmxhdGVSZWN0IiwgImFtb3VudCIsICJyZWZSZWN0IiwgIkJhckVsZW1lbnQiLCAiRWxlbWVudCIsICJjb25zdHJ1Y3RvciIsICJjZmciLCAidW5kZWZpbmVkIiwgImluZmxhdGVBbW91bnQiLCAiT2JqZWN0IiwgImFzc2lnbiIsICJkcmF3IiwgImJvcmRlckNvbG9yIiwgImJhY2tncm91bmRDb2xvciIsICJhZGRSZWN0UGF0aCIsICJhZGRSb3VuZGVkUmVjdFBhdGgiLCAic2F2ZSIsICJiZWdpblBhdGgiLCAiY2xpcCIsICJmaWxsU3R5bGUiLCAiZmlsbCIsICJyZXN0b3JlIiwgIm1vdXNlWCIsICJtb3VzZVkiLCAiaW5YUmFuZ2UiLCAiaW5ZUmFuZ2UiLCAiZ2V0Q2VudGVyUG9pbnQiLCAiZ2V0UmFuZ2UiLCAiYXhpcyIsICJpZCIsICJkZWZhdWx0cyIsICJwb2ludFN0eWxlIiwgImRlZmF1bHRSb3V0ZXMiLCAiZ2V0Qm94U2l6ZSIsICJsYWJlbE9wdHMiLCAiZm9udFNpemUiLCAiYm94SGVpZ2h0IiwgImJveFdpZHRoIiwgInVzZVBvaW50U3R5bGUiLCAiTWF0aCIsICJtaW4iLCAicG9pbnRTdHlsZVdpZHRoIiwgIml0ZW1IZWlnaHQiLCAibWF4IiwgIml0ZW1zRXF1YWwiLCAiYSIsICJiIiwgImRhdGFzZXRJbmRleCIsICJpbmRleCIsICJMZWdlbmQiLCAiRWxlbWVudCIsICJjb25zdHJ1Y3RvciIsICJjb25maWciLCAiX2FkZGVkIiwgImxlZ2VuZEhpdEJveGVzIiwgIl9ob3ZlcmVkSXRlbSIsICJkb3VnaG51dE1vZGUiLCAiY2hhcnQiLCAib3B0aW9ucyIsICJjdHgiLCAibGVnZW5kSXRlbXMiLCAidW5kZWZpbmVkIiwgImNvbHVtblNpemVzIiwgImxpbmVXaWR0aHMiLCAibWF4SGVpZ2h0IiwgIm1heFdpZHRoIiwgInRvcCIsICJib3R0b20iLCAibGVmdCIsICJyaWdodCIsICJoZWlnaHQiLCAid2lkdGgiLCAiX21hcmdpbnMiLCAicG9zaXRpb24iLCAid2VpZ2h0IiwgImZ1bGxTaXplIiwgInVwZGF0ZSIsICJtYXJnaW5zIiwgInNldERpbWVuc2lvbnMiLCAiYnVpbGRMYWJlbHMiLCAiZml0IiwgImlzSG9yaXpvbnRhbCIsICJsYWJlbHMiLCAiY2FsbCIsICJnZW5lcmF0ZUxhYmVscyIsICJmaWx0ZXIiLCAiaXRlbSIsICJkYXRhIiwgInNvcnQiLCAicmV2ZXJzZSIsICJkaXNwbGF5IiwgImxhYmVsRm9udCIsICJ0b0ZvbnQiLCAiZm9udCIsICJzaXplIiwgInRpdGxlSGVpZ2h0IiwgIl9jb21wdXRlVGl0bGVIZWlnaHQiLCAic3RyaW5nIiwgIl9maXRSb3dzIiwgIl9maXRDb2xzIiwgInBhZGRpbmciLCAiaGl0Ym94ZXMiLCAibGluZUhlaWdodCIsICJ0b3RhbEhlaWdodCIsICJ0ZXh0QWxpZ24iLCAidGV4dEJhc2VsaW5lIiwgInJvdyIsICJmb3JFYWNoIiwgImxlZ2VuZEl0ZW0iLCAiaSIsICJpdGVtV2lkdGgiLCAibWVhc3VyZVRleHQiLCAidGV4dCIsICJsZW5ndGgiLCAiX2l0ZW1IZWlnaHQiLCAiaGVpZ2h0TGltaXQiLCAidG90YWxXaWR0aCIsICJjdXJyZW50Q29sV2lkdGgiLCAiY3VycmVudENvbEhlaWdodCIsICJjb2wiLCAiY2FsY3VsYXRlSXRlbVNpemUiLCAicHVzaCIsICJhZGp1c3RIaXRCb3hlcyIsICJhbGlnbiIsICJydGwiLCAicnRsSGVscGVyIiwgImdldFJ0bEFkYXB0ZXIiLCAiX2FsaWduU3RhcnRFbmQiLCAiaGl0Ym94IiwgImxlZnRGb3JMdHIiLCAieCIsICJkcmF3IiwgImNsaXBBcmVhIiwgIl9kcmF3IiwgInVuY2xpcEFyZWEiLCAib3B0cyIsICJkZWZhdWx0Q29sb3IiLCAiZGVmYXVsdHMiLCAiY29sb3IiLCAiaGFsZkZvbnRTaXplIiwgImN1cnNvciIsICJkcmF3VGl0bGUiLCAibGluZVdpZHRoIiwgImRyYXdMZWdlbmRCb3giLCAieSIsICJpc05hTiIsICJzYXZlIiwgInZhbHVlT3JEZWZhdWx0IiwgImZpbGxTdHlsZSIsICJsaW5lQ2FwIiwgImxpbmVEYXNoT2Zmc2V0IiwgImxpbmVKb2luIiwgInN0cm9rZVN0eWxlIiwgInNldExpbmVEYXNoIiwgImxpbmVEYXNoIiwgImRyYXdPcHRpb25zIiwgInJhZGl1cyIsICJTUVJUMiIsICJwb2ludFN0eWxlIiwgInJvdGF0aW9uIiwgImJvcmRlcldpZHRoIiwgImNlbnRlclgiLCAieFBsdXMiLCAiY2VudGVyWSIsICJkcmF3UG9pbnRMZWdlbmQiLCAieUJveFRvcCIsICJ4Qm94TGVmdCIsICJib3JkZXJSYWRpdXMiLCAidG9UUkJMQ29ybmVycyIsICJiZWdpblBhdGgiLCAiT2JqZWN0IiwgInZhbHVlcyIsICJzb21lIiwgInYiLCAiYWRkUm91bmRlZFJlY3RQYXRoIiwgInciLCAiaCIsICJyZWN0IiwgImZpbGwiLCAic3Ryb2tlIiwgInJlc3RvcmUiLCAiZmlsbFRleHQiLCAicmVuZGVyVGV4dCIsICJzdHJpa2V0aHJvdWdoIiwgImhpZGRlbiIsICJsaW5lIiwgIm92ZXJyaWRlVGV4dERpcmVjdGlvbiIsICJ0ZXh0RGlyZWN0aW9uIiwgImZvbnRDb2xvciIsICJ0ZXh0V2lkdGgiLCAic2V0V2lkdGgiLCAicmVhbFgiLCAiX3RleHRYIiwgImZvbnRMaW5lSGVpZ2h0IiwgImNhbGN1bGF0ZUxlZ2VuZEl0ZW1IZWlnaHQiLCAicmVzdG9yZVRleHREaXJlY3Rpb24iLCAidGl0bGVPcHRzIiwgInRpdGxlIiwgInRpdGxlRm9udCIsICJ0aXRsZVBhZGRpbmciLCAidG9QYWRkaW5nIiwgInRvcFBhZGRpbmdQbHVzSGFsZkZvbnRTaXplIiwgInJlZHVjZSIsICJhY2MiLCAiX3RvTGVmdFJpZ2h0Q2VudGVyIiwgIl9nZXRMZWdlbmRJdGVtQXQiLCAiaGl0Qm94IiwgImxoIiwgIl9pc0JldHdlZW4iLCAiaGFuZGxlRXZlbnQiLCAiZSIsICJpc0xpc3RlbmVkIiwgInR5cGUiLCAiaG92ZXJlZEl0ZW0iLCAicHJldmlvdXMiLCAic2FtZUl0ZW0iLCAib25MZWF2ZSIsICJvbkhvdmVyIiwgIm9uQ2xpY2siLCAiY2FsY3VsYXRlSXRlbVdpZHRoIiwgImNhbGN1bGF0ZUl0ZW1IZWlnaHQiLCAibGVnZW5kSXRlbVRleHQiLCAibGFiZWxIZWlnaHQiLCAiaWQiLCAiX2VsZW1lbnQiLCAic3RhcnQiLCAiX2FyZ3MiLCAibGVnZW5kIiwgImxheW91dHMiLCAiY29uZmlndXJlIiwgImFkZEJveCIsICJzdG9wIiwgInJlbW92ZUJveCIsICJiZWZvcmVVcGRhdGUiLCAiYWZ0ZXJVcGRhdGUiLCAiYWZ0ZXJFdmVudCIsICJhcmdzIiwgInJlcGxheSIsICJldmVudCIsICJjaSIsICJpc0RhdGFzZXRWaXNpYmxlIiwgImhpZGUiLCAic2hvdyIsICJkYXRhc2V0cyIsICJ1c2VCb3JkZXJSYWRpdXMiLCAiX2dldFNvcnRlZERhdGFzZXRNZXRhcyIsICJtYXAiLCAibWV0YSIsICJzdHlsZSIsICJjb250cm9sbGVyIiwgImdldFN0eWxlIiwgImxhYmVsIiwgImJhY2tncm91bmRDb2xvciIsICJ2aXNpYmxlIiwgImJvcmRlckNhcFN0eWxlIiwgImJvcmRlckRhc2giLCAiYm9yZGVyRGFzaE9mZnNldCIsICJib3JkZXJKb2luU3R5bGUiLCAiYm9yZGVyQ29sb3IiLCAiZGVzY3JpcHRvcnMiLCAiX3NjcmlwdGFibGUiLCAibmFtZSIsICJzdGFydHNXaXRoIiwgImluY2x1ZGVzIiwgIlRpdGxlIiwgIl9wYWRkaW5nIiwgImxpbmVDb3VudCIsICJpc0FycmF5IiwgInRleHRTaXplIiwgInBvcyIsICJfZHJhd0FyZ3MiLCAib2Zmc2V0IiwgInRpdGxlWCIsICJ0aXRsZVkiLCAiUEkiLCAiZm9udE9wdHMiLCAidHJhbnNsYXRpb24iLCAiY3JlYXRlVGl0bGUiLCAidGl0bGVCbG9jayIsICJkZWZhdWx0Um91dGVzIiwgIl9pbmRleGFibGUiLCAiV2Vha01hcCIsICJzZXQiLCAiZ2V0IiwgImRlbGV0ZSIsICJwb3NpdGlvbmVycyIsICJhdmVyYWdlIiwgIml0ZW1zIiwgImxlbiIsICJjb3VudCIsICJlbCIsICJlbGVtZW50IiwgImhhc1ZhbHVlIiwgInRvb2x0aXBQb3NpdGlvbiIsICJuZWFyZXN0IiwgImV2ZW50UG9zaXRpb24iLCAibWluRGlzdGFuY2UiLCAiTnVtYmVyIiwgIlBPU0lUSVZFX0lORklOSVRZIiwgIm5lYXJlc3RFbGVtZW50IiwgImNlbnRlciIsICJnZXRDZW50ZXJQb2ludCIsICJkIiwgImRpc3RhbmNlQmV0d2VlblBvaW50cyIsICJ0cCIsICJwdXNoT3JDb25jYXQiLCAiYmFzZSIsICJ0b1B1c2giLCAiQXJyYXkiLCAicHJvdG90eXBlIiwgImFwcGx5IiwgInNwbGl0TmV3bGluZXMiLCAic3RyIiwgIlN0cmluZyIsICJpbmRleE9mIiwgInNwbGl0IiwgImNyZWF0ZVRvb2x0aXBJdGVtIiwgImdldERhdGFzZXRNZXRhIiwgInZhbHVlIiwgImdldExhYmVsQW5kVmFsdWUiLCAicGFyc2VkIiwgImdldFBhcnNlZCIsICJyYXciLCAiZm9ybWF0dGVkVmFsdWUiLCAiZGF0YXNldCIsICJnZXREYXRhc2V0IiwgImRhdGFJbmRleCIsICJnZXRUb29sdGlwU2l6ZSIsICJ0b29sdGlwIiwgImJvZHkiLCAiZm9vdGVyIiwgImJvZHlGb250IiwgImZvb3RlckZvbnQiLCAidGl0bGVMaW5lQ291bnQiLCAiZm9vdGVyTGluZUNvdW50IiwgImJvZHlMaW5lSXRlbUNvdW50IiwgImNvbWJpbmVkQm9keUxlbmd0aCIsICJib2R5SXRlbSIsICJiZWZvcmUiLCAibGluZXMiLCAiYWZ0ZXIiLCAiYmVmb3JlQm9keSIsICJhZnRlckJvZHkiLCAidGl0bGVTcGFjaW5nIiwgInRpdGxlTWFyZ2luQm90dG9tIiwgImJvZHlMaW5lSGVpZ2h0IiwgImRpc3BsYXlDb2xvcnMiLCAiYm9keVNwYWNpbmciLCAiZm9vdGVyTWFyZ2luVG9wIiwgImZvb3RlclNwYWNpbmciLCAid2lkdGhQYWRkaW5nIiwgIm1heExpbmVXaWR0aCIsICJlYWNoIiwgImNvbmNhdCIsICJib3hQYWRkaW5nIiwgImRldGVybWluZVlBbGlnbiIsICJkb2VzTm90Rml0V2l0aEFsaWduIiwgInhBbGlnbiIsICJjYXJldCIsICJjYXJldFNpemUiLCAiY2FyZXRQYWRkaW5nIiwgImRldGVybWluZVhBbGlnbiIsICJ5QWxpZ24iLCAiY2hhcnRXaWR0aCIsICJjaGFydEFyZWEiLCAiZGV0ZXJtaW5lQWxpZ25tZW50IiwgImFsaWduWCIsICJhbGlnblkiLCAicGFkZGluZ0FuZFNpemUiLCAiZ2V0QmFja2dyb3VuZFBvaW50IiwgImFsaWdubWVudCIsICJjb3JuZXJSYWRpdXMiLCAidG9wTGVmdCIsICJ0b3BSaWdodCIsICJib3R0b21MZWZ0IiwgImJvdHRvbVJpZ2h0IiwgIl9saW1pdFZhbHVlIiwgImdldEFsaWduZWRYIiwgImdldEJlZm9yZUFmdGVyQm9keUxpbmVzIiwgImNhbGxiYWNrIiwgImNyZWF0ZVRvb2x0aXBDb250ZXh0IiwgInBhcmVudCIsICJ0b29sdGlwSXRlbXMiLCAiY3JlYXRlQ29udGV4dCIsICJvdmVycmlkZUNhbGxiYWNrcyIsICJjYWxsYmFja3MiLCAiY29udGV4dCIsICJvdmVycmlkZSIsICJkZWZhdWx0Q2FsbGJhY2tzIiwgImJlZm9yZVRpdGxlIiwgIm5vb3AiLCAibGFiZWxDb3VudCIsICJtb2RlIiwgImFmdGVyVGl0bGUiLCAiYmVmb3JlTGFiZWwiLCAidG9vbHRpcEl0ZW0iLCAiaXNOdWxsT3JVbmRlZiIsICJsYWJlbENvbG9yIiwgImxhYmVsVGV4dENvbG9yIiwgImJvZHlDb2xvciIsICJsYWJlbFBvaW50U3R5bGUiLCAiYWZ0ZXJMYWJlbCIsICJiZWZvcmVGb290ZXIiLCAiYWZ0ZXJGb290ZXIiLCAiaW52b2tlQ2FsbGJhY2tXaXRoRmFsbGJhY2siLCAiYXJnIiwgInJlc3VsdCIsICJUb29sdGlwIiwgIm9wYWNpdHkiLCAiX2FjdGl2ZSIsICJfZXZlbnRQb3NpdGlvbiIsICJfc2l6ZSIsICJfY2FjaGVkQW5pbWF0aW9ucyIsICJfdG9vbHRpcEl0ZW1zIiwgIiRhbmltYXRpb25zIiwgIiRjb250ZXh0IiwgImRhdGFQb2ludHMiLCAiY2FyZXRYIiwgImNhcmV0WSIsICJsYWJlbENvbG9ycyIsICJsYWJlbFBvaW50U3R5bGVzIiwgImxhYmVsVGV4dENvbG9ycyIsICJpbml0aWFsaXplIiwgIl9yZXNvbHZlQW5pbWF0aW9ucyIsICJjYWNoZWQiLCAic2V0Q29udGV4dCIsICJnZXRDb250ZXh0IiwgImVuYWJsZWQiLCAiYW5pbWF0aW9uIiwgImFuaW1hdGlvbnMiLCAiQW5pbWF0aW9ucyIsICJfY2FjaGVhYmxlIiwgImZyZWV6ZSIsICJnZXRUaXRsZSIsICJnZXRCZWZvcmVCb2R5IiwgImdldEJvZHkiLCAiYm9keUl0ZW1zIiwgInNjb3BlZCIsICJnZXRBZnRlckJvZHkiLCAiZ2V0Rm9vdGVyIiwgIl9jcmVhdGVJdGVtcyIsICJhY3RpdmUiLCAiYXJyYXkiLCAiaXRlbVNvcnQiLCAiY2hhbmdlZCIsICJwcm9wZXJ0aWVzIiwgInBvc2l0aW9uQW5kU2l6ZSIsICJhc3NpZ24iLCAiYmFja2dyb3VuZFBvaW50IiwgImV4dGVybmFsIiwgImRyYXdDYXJldCIsICJ0b29sdGlwUG9pbnQiLCAiY2FyZXRQb3NpdGlvbiIsICJnZXRDYXJldFBvc2l0aW9uIiwgImxpbmVUbyIsICJ4MSIsICJ5MSIsICJ4MiIsICJ5MiIsICJ4MyIsICJ5MyIsICJwdFgiLCAicHRZIiwgInB0IiwgInRpdGxlQWxpZ24iLCAidGl0bGVDb2xvciIsICJfZHJhd0NvbG9yQm94IiwgImNvbG9yWCIsICJydGxDb2xvclgiLCAieU9mZlNldCIsICJjb2xvclkiLCAibXVsdGlLZXlCYWNrZ3JvdW5kIiwgImRyYXdQb2ludCIsICJpc09iamVjdCIsICJvdXRlclgiLCAiaW5uZXJYIiwgImZpbGxSZWN0IiwgInN0cm9rZVJlY3QiLCAiZHJhd0JvZHkiLCAiYm9keUFsaWduIiwgInhMaW5lUGFkZGluZyIsICJmaWxsTGluZU9mVGV4dCIsICJib2R5QWxpZ25Gb3JDYWxjdWxhdGlvbiIsICJ0ZXh0Q29sb3IiLCAiaiIsICJpbGVuIiwgImpsZW4iLCAiZHJhd0Zvb3RlciIsICJmb290ZXJBbGlnbiIsICJmb290ZXJDb2xvciIsICJkcmF3QmFja2dyb3VuZCIsICJ0b29sdGlwU2l6ZSIsICJtb3ZlVG8iLCAicXVhZHJhdGljQ3VydmVUbyIsICJjbG9zZVBhdGgiLCAiX3VwZGF0ZUFuaW1hdGlvblRhcmdldCIsICJhbmltcyIsICJhbmltWCIsICJhbmltWSIsICJwb2ludCIsICJfdG8iLCAiX3dpbGxSZW5kZXIiLCAiYWJzIiwgImhhc1Rvb2x0aXBDb250ZW50IiwgImdsb2JhbEFscGhhIiwgImdldEFjdGl2ZUVsZW1lbnRzIiwgInNldEFjdGl2ZUVsZW1lbnRzIiwgImFjdGl2ZUVsZW1lbnRzIiwgImxhc3RBY3RpdmUiLCAiRXJyb3IiLCAiX2VsZW1lbnRzRXF1YWwiLCAicG9zaXRpb25DaGFuZ2VkIiwgIl9wb3NpdGlvbkNoYW5nZWQiLCAiX2lnbm9yZVJlcGxheUV2ZW50cyIsICJpbkNoYXJ0QXJlYSIsICJfZ2V0QWN0aXZlRWxlbWVudHMiLCAiZ2V0RWxlbWVudHNBdEV2ZW50Rm9yTW9kZSIsICJhZnRlckluaXQiLCAicmVzZXQiLCAiYWZ0ZXJEcmF3IiwgIm5vdGlmeVBsdWdpbnMiLCAiY2FuY2VsYWJsZSIsICJ1c2VGaW5hbFBvc2l0aW9uIiwgImR1cmF0aW9uIiwgImVhc2luZyIsICJudW1iZXJzIiwgIl9mYWxsYmFjayIsICJhZGRpdGlvbmFsT3B0aW9uU2NvcGVzIiwgImFkZElmU3RyaW5nIiwgImxhYmVscyIsICJyYXciLCAiaW5kZXgiLCAiYWRkZWRMYWJlbHMiLCAicHVzaCIsICJ1bnNoaWZ0IiwgImxhYmVsIiwgImlzTmFOIiwgImZpbmRPckFkZExhYmVsIiwgImZpcnN0IiwgImluZGV4T2YiLCAibGFzdCIsICJsYXN0SW5kZXhPZiIsICJ2YWxpZEluZGV4IiwgIm1heCIsICJfbGltaXRWYWx1ZSIsICJNYXRoIiwgInJvdW5kIiwgIl9nZXRMYWJlbEZvclZhbHVlIiwgInZhbHVlIiwgImdldExhYmVscyIsICJsZW5ndGgiLCAiQ2F0ZWdvcnlTY2FsZSIsICJTY2FsZSIsICJjb25zdHJ1Y3RvciIsICJjZmciLCAiX3N0YXJ0VmFsdWUiLCAidW5kZWZpbmVkIiwgIl92YWx1ZVJhbmdlIiwgIl9hZGRlZExhYmVscyIsICJpbml0IiwgInNjYWxlT3B0aW9ucyIsICJhZGRlZCIsICJzcGxpY2UiLCAicGFyc2UiLCAiaXNOdWxsT3JVbmRlZiIsICJpc0Zpbml0ZSIsICJ2YWx1ZU9yRGVmYXVsdCIsICJkZXRlcm1pbmVEYXRhTGltaXRzIiwgIm1pbkRlZmluZWQiLCAibWF4RGVmaW5lZCIsICJnZXRVc2VyQm91bmRzIiwgIm1pbiIsICJnZXRNaW5NYXgiLCAib3B0aW9ucyIsICJib3VuZHMiLCAiYnVpbGRUaWNrcyIsICJvZmZzZXQiLCAidGlja3MiLCAic2xpY2UiLCAiZ2V0TGFiZWxGb3JWYWx1ZSIsICJjYWxsIiwgImNvbmZpZ3VyZSIsICJpc0hvcml6b250YWwiLCAiX3JldmVyc2VQaXhlbHMiLCAiZ2V0UGl4ZWxGb3JWYWx1ZSIsICJOYU4iLCAiZ2V0UGl4ZWxGb3JEZWNpbWFsIiwgImdldFBpeGVsRm9yVGljayIsICJnZXRWYWx1ZUZvclBpeGVsIiwgInBpeGVsIiwgImdldERlY2ltYWxGb3JQaXhlbCIsICJnZXRCYXNlUGl4ZWwiLCAiYm90dG9tIiwgImlkIiwgImRlZmF1bHRzIiwgImNhbGxiYWNrIiwgImdlbmVyYXRlVGlja3MiLCAiZ2VuZXJhdGlvbk9wdGlvbnMiLCAiZGF0YVJhbmdlIiwgIk1JTl9TUEFDSU5HIiwgInN0ZXAiLCAicHJlY2lzaW9uIiwgImNvdW50IiwgIm1heFRpY2tzIiwgIm1heERpZ2l0cyIsICJpbmNsdWRlQm91bmRzIiwgInVuaXQiLCAibWF4U3BhY2VzIiwgInJtaW4iLCAicm1heCIsICJjb3VudERlZmluZWQiLCAibWluU3BhY2luZyIsICJzcGFjaW5nIiwgIm5pY2VOdW0iLCAiZmFjdG9yIiwgIm5pY2VNaW4iLCAibmljZU1heCIsICJudW1TcGFjZXMiLCAiY2VpbCIsICJmbG9vciIsICJwb3ciLCAiYWxtb3N0V2hvbGUiLCAiYWxtb3N0RXF1YWxzIiwgImRlY2ltYWxQbGFjZXMiLCAiX2RlY2ltYWxQbGFjZXMiLCAiaiIsICJyZWxhdGl2ZUxhYmVsU2l6ZSIsICJ0aWNrVmFsdWUiLCAiaG9yaXpvbnRhbCIsICJtaW5Sb3RhdGlvbiIsICJyYWQiLCAidG9SYWRpYW5zIiwgInJhdGlvIiwgInNpbiIsICJjb3MiLCAiTGluZWFyU2NhbGVCYXNlIiwgInN0YXJ0IiwgImVuZCIsICJfZW5kVmFsdWUiLCAiTnVtYmVyIiwgImhhbmRsZVRpY2tSYW5nZU9wdGlvbnMiLCAiYmVnaW5BdFplcm8iLCAic2V0TWluIiwgInYiLCAic2V0TWF4IiwgIm1pblNpZ24iLCAic2lnbiIsICJtYXhTaWduIiwgImFicyIsICJnZXRUaWNrTGltaXQiLCAidGlja09wdHMiLCAibWF4VGlja3NMaW1pdCIsICJzdGVwU2l6ZSIsICJjb25zb2xlIiwgIndhcm4iLCAiY29tcHV0ZVRpY2tMaW1pdCIsICJQT1NJVElWRV9JTkZJTklUWSIsICJvcHRzIiwgIm51bWVyaWNHZW5lcmF0b3JPcHRpb25zIiwgIl9tYXhEaWdpdHMiLCAiX3JhbmdlIiwgIl9zZXRNaW5BbmRNYXhCeUtleSIsICJyZXZlcnNlIiwgImZvcm1hdE51bWJlciIsICJjaGFydCIsICJsb2NhbGUiLCAiZm9ybWF0IiwgIkxpbmVhclNjYWxlIiwgIndpZHRoIiwgImhlaWdodCIsICJ0aWNrRm9udCIsICJfcmVzb2x2ZVRpY2tGb250T3B0aW9ucyIsICJsaW5lSGVpZ2h0IiwgIlRpY2tzIiwgImZvcm1hdHRlcnMiLCAibnVtZXJpYyIsICJsb2cxMEZsb29yIiwgImxvZzEwIiwgImNoYW5nZUV4cG9uZW50IiwgIm0iLCAiaXNNYWpvciIsICJ0aWNrVmFsIiwgInJlbWFpbiIsICJzdGVwcyIsICJyYW5nZUV4cCIsICJyYW5nZVN0ZXAiLCAic3RhcnRFeHAiLCAicmFuZ2UiLCAiZmluaXRlT3JEZWZhdWx0IiwgIm1pbkV4cCIsICJleHAiLCAiYmFzZSIsICJzaWduaWZpY2FuZCIsICJtYWpvciIsICJsYXN0VGljayIsICJMb2dhcml0aG1pY1NjYWxlIiwgInByb3RvdHlwZSIsICJhcHBseSIsICJfemVybyIsICJfc3VnZ2VzdGVkTWluIiwgIl91c2VyTWluIiwgIl91c2VyTWF4IiwgImRlY2ltYWwiLCAibG9nYXJpdGhtaWMiLCAiZW5hYmxlZCIsICJnZXRUaWNrQmFja2Ryb3BIZWlnaHQiLCAiZGlzcGxheSIsICJwYWRkaW5nIiwgInRvUGFkZGluZyIsICJiYWNrZHJvcFBhZGRpbmciLCAiZm9udCIsICJzaXplIiwgIm1lYXN1cmVMYWJlbFNpemUiLCAiY3R4IiwgImlzQXJyYXkiLCAidyIsICJfbG9uZ2VzdFRleHQiLCAic3RyaW5nIiwgImgiLCAiZGV0ZXJtaW5lTGltaXRzIiwgImFuZ2xlIiwgInBvcyIsICJmaXRXaXRoUG9pbnRMYWJlbHMiLCAic2NhbGUiLCAib3JpZyIsICJsIiwgImxlZnQiLCAiX3BhZGRpbmciLCAiciIsICJyaWdodCIsICJ0IiwgInRvcCIsICJiIiwgImxpbWl0cyIsICJPYmplY3QiLCAiYXNzaWduIiwgImxhYmVsU2l6ZXMiLCAidmFsdWVDb3VudCIsICJfcG9pbnRMYWJlbHMiLCAicG9pbnRMYWJlbE9wdHMiLCAicG9pbnRMYWJlbHMiLCAiYWRkaXRpb25hbEFuZ2xlIiwgImNlbnRlclBvaW50TGFiZWxzIiwgIlBJIiwgImkiLCAic2V0Q29udGV4dCIsICJnZXRQb2ludExhYmVsQ29udGV4dCIsICJwb2ludFBvc2l0aW9uIiwgImdldFBvaW50UG9zaXRpb24iLCAiZHJhd2luZ0FyZWEiLCAicGxGb250IiwgInRvRm9udCIsICJ0ZXh0U2l6ZSIsICJhbmdsZVJhZGlhbnMiLCAiX25vcm1hbGl6ZUFuZ2xlIiwgImdldEluZGV4QW5nbGUiLCAidG9EZWdyZWVzIiwgImhMaW1pdHMiLCAieCIsICJ2TGltaXRzIiwgInkiLCAidXBkYXRlTGltaXRzIiwgInNldENlbnRlclBvaW50IiwgIl9wb2ludExhYmVsSXRlbXMiLCAiYnVpbGRQb2ludExhYmVsSXRlbXMiLCAiY3JlYXRlUG9pbnRMYWJlbEl0ZW0iLCAiaXRlbU9wdHMiLCAib3V0ZXJEaXN0YW5jZSIsICJleHRyYSIsICJwb2ludExhYmVsUG9zaXRpb24iLCAiSEFMRl9QSSIsICJ5Rm9yQW5nbGUiLCAidGV4dEFsaWduIiwgImdldFRleHRBbGlnbkZvckFuZ2xlIiwgImxlZnRGb3JUZXh0QWxpZ24iLCAidmlzaWJsZSIsICJpc05vdE92ZXJsYXBwZWQiLCAiaXRlbSIsICJhcmVhIiwgImFwZXhlc0luQXJlYSIsICJfaXNQb2ludEluQXJlYSIsICJpdGVtcyIsICJhbGlnbiIsICJkcmF3UG9pbnRMYWJlbEJveCIsICJiYWNrZHJvcENvbG9yIiwgImJvcmRlclJhZGl1cyIsICJ0b1RSQkxDb3JuZXJzIiwgImZpbGxTdHlsZSIsICJiYWNrZHJvcExlZnQiLCAiYmFja2Ryb3BUb3AiLCAiYmFja2Ryb3BXaWR0aCIsICJiYWNrZHJvcEhlaWdodCIsICJ2YWx1ZXMiLCAic29tZSIsICJiZWdpblBhdGgiLCAiYWRkUm91bmRlZFJlY3RQYXRoIiwgInJhZGl1cyIsICJmaWxsIiwgImZpbGxSZWN0IiwgImRyYXdQb2ludExhYmVscyIsICJsYWJlbENvdW50IiwgIm9wdHNBdEluZGV4IiwgInJlbmRlclRleHQiLCAiY29sb3IiLCAidGV4dEJhc2VsaW5lIiwgInBhdGhSYWRpdXNMaW5lIiwgImNpcmN1bGFyIiwgImFyYyIsICJ4Q2VudGVyIiwgInlDZW50ZXIiLCAiVEFVIiwgIm1vdmVUbyIsICJsaW5lVG8iLCAiZHJhd1JhZGl1c0xpbmUiLCAiZ3JpZExpbmVPcHRzIiwgImJvcmRlck9wdHMiLCAibGluZVdpZHRoIiwgInNhdmUiLCAic3Ryb2tlU3R5bGUiLCAic2V0TGluZURhc2giLCAiZGFzaCIsICJsaW5lRGFzaE9mZnNldCIsICJkYXNoT2Zmc2V0IiwgImNsb3NlUGF0aCIsICJzdHJva2UiLCAicmVzdG9yZSIsICJjcmVhdGVQb2ludExhYmVsQ29udGV4dCIsICJwYXJlbnQiLCAiY3JlYXRlQ29udGV4dCIsICJ0eXBlIiwgIlJhZGlhbExpbmVhclNjYWxlIiwgInNldERpbWVuc2lvbnMiLCAibWF4V2lkdGgiLCAibWF4SGVpZ2h0IiwgImdlbmVyYXRlVGlja0xhYmVscyIsICJtYXAiLCAiY2FsbENhbGxiYWNrIiwgImZpbHRlciIsICJnZXREYXRhVmlzaWJpbGl0eSIsICJmaXQiLCAibGVmdE1vdmVtZW50IiwgInJpZ2h0TW92ZW1lbnQiLCAidG9wTW92ZW1lbnQiLCAiYm90dG9tTW92ZW1lbnQiLCAiYW5nbGVNdWx0aXBsaWVyIiwgInN0YXJ0QW5nbGUiLCAiZ2V0RGlzdGFuY2VGcm9tQ2VudGVyRm9yVmFsdWUiLCAic2NhbGluZ0ZhY3RvciIsICJnZXRWYWx1ZUZvckRpc3RhbmNlRnJvbUNlbnRlciIsICJkaXN0YW5jZSIsICJzY2FsZWREaXN0YW5jZSIsICJwb2ludExhYmVsIiwgImdldENvbnRleHQiLCAiZGlzdGFuY2VGcm9tQ2VudGVyIiwgImdldFBvaW50UG9zaXRpb25Gb3JWYWx1ZSIsICJnZXRCYXNlUG9zaXRpb24iLCAiZ2V0QmFzZVZhbHVlIiwgImdldFBvaW50TGFiZWxQb3NpdGlvbiIsICJkcmF3QmFja2dyb3VuZCIsICJiYWNrZ3JvdW5kQ29sb3IiLCAiZ3JpZCIsICJkcmF3R3JpZCIsICJhbmdsZUxpbmVzIiwgImJvcmRlciIsICJwb3NpdGlvbiIsICJmb3JFYWNoIiwgInRpY2siLCAiY29udGV4dCIsICJvcHRzQXRJbmRleEJvcmRlciIsICJib3JkZXJEYXNoIiwgImJvcmRlckRhc2hPZmZzZXQiLCAiZHJhd0JvcmRlciIsICJkcmF3TGFiZWxzIiwgInRyYW5zbGF0ZSIsICJyb3RhdGUiLCAic2hvd0xhYmVsQmFja2Ryb3AiLCAibWVhc3VyZVRleHQiLCAiZHJhd1RpdGxlIiwgImFuaW1hdGUiLCAiZGVmYXVsdFJvdXRlcyIsICJkZXNjcmlwdG9ycyIsICJfZmFsbGJhY2siLCAiSU5URVJWQUxTIiwgIm1pbGxpc2Vjb25kIiwgImNvbW1vbiIsICJzZWNvbmQiLCAibWludXRlIiwgImhvdXIiLCAiZGF5IiwgIndlZWsiLCAibW9udGgiLCAicXVhcnRlciIsICJ5ZWFyIiwgIlVOSVRTIiwgImtleXMiLCAic29ydGVyIiwgImEiLCAiaW5wdXQiLCAiYWRhcHRlciIsICJfYWRhcHRlciIsICJwYXJzZXIiLCAiaXNvV2Vla2RheSIsICJfcGFyc2VPcHRzIiwgImlzTnVtYmVyIiwgInN0YXJ0T2YiLCAiZGV0ZXJtaW5lVW5pdEZvckF1dG9UaWNrcyIsICJtaW5Vbml0IiwgImNhcGFjaXR5IiwgImlsZW4iLCAiaW50ZXJ2YWwiLCAiTUFYX1NBRkVfSU5URUdFUiIsICJkZXRlcm1pbmVVbml0Rm9yRm9ybWF0dGluZyIsICJudW1UaWNrcyIsICJkaWZmIiwgImRldGVybWluZU1ham9yVW5pdCIsICJhZGRUaWNrIiwgInRpbWUiLCAidGltZXN0YW1wcyIsICJsbyIsICJoaSIsICJfbG9va3VwIiwgInRpbWVzdGFtcCIsICJzZXRNYWpvclRpY2tzIiwgIm1ham9yVW5pdCIsICJhZGQiLCAidGlja3NGcm9tVGltZXN0YW1wcyIsICJUaW1lU2NhbGUiLCAicHJvcHMiLCAiX2NhY2hlIiwgImRhdGEiLCAiYWxsIiwgIl91bml0IiwgIl9tYWpvclVuaXQiLCAiX29mZnNldHMiLCAiX25vcm1hbGl6ZWQiLCAic2NhbGVPcHRzIiwgImFkYXB0ZXJzIiwgIl9kYXRlIiwgImRhdGUiLCAibWVyZ2VJZiIsICJkaXNwbGF5Rm9ybWF0cyIsICJmb3JtYXRzIiwgIm5vcm1hbGl6ZWQiLCAiYmVmb3JlTGF5b3V0IiwgIl9hcHBseUJvdW5kcyIsICJfZ2V0TGFiZWxCb3VuZHMiLCAic291cmNlIiwgIkRhdGUiLCAibm93IiwgImVuZE9mIiwgImFyciIsICJnZXRMYWJlbFRpbWVzdGFtcHMiLCAiTkVHQVRJVkVfSU5GSU5JVFkiLCAidGltZU9wdHMiLCAiX2dlbmVyYXRlIiwgIl9maWx0ZXJCZXR3ZWVuIiwgImF1dG9Ta2lwIiwgIl9nZXRMYWJlbENhcGFjaXR5IiwgImluaXRPZmZzZXRzIiwgImFmdGVyQXV0b1NraXAiLCAib2Zmc2V0QWZ0ZXJBdXRvc2tpcCIsICJnZXREZWNpbWFsRm9yVmFsdWUiLCAibGltaXQiLCAibWlub3IiLCAid2Vla2RheSIsICJoYXNXZWVrZGF5IiwgIkVycm9yIiwgImdldERhdGFUaW1lc3RhbXBzIiwgInNvcnQiLCAidG9vbHRpcEZvcm1hdCIsICJkYXRldGltZSIsICJmbXQiLCAiX3RpY2tGb3JtYXRGdW5jdGlvbiIsICJmb3JtYXR0ZXIiLCAibWlub3JGb3JtYXQiLCAibWFqb3JGb3JtYXQiLCAib2Zmc2V0cyIsICJfZ2V0TGFiZWxTaXplIiwgInRpY2tzT3B0cyIsICJ0aWNrTGFiZWxXaWR0aCIsICJtYXhSb3RhdGlvbiIsICJjb3NSb3RhdGlvbiIsICJzaW5Sb3RhdGlvbiIsICJ0aWNrRm9udFNpemUiLCAiZXhhbXBsZVRpbWUiLCAiZXhhbXBsZUxhYmVsIiwgIm1ldGFzIiwgImdldE1hdGNoaW5nVmlzaWJsZU1ldGFzIiwgImNvbnRyb2xsZXIiLCAiZ2V0QWxsUGFyc2VkVmFsdWVzIiwgImNvbmNhdCIsICJub3JtYWxpemUiLCAiX2FycmF5VW5pcXVlIiwgImludGVycG9sYXRlIiwgInRhYmxlIiwgInZhbCIsICJwcmV2U291cmNlIiwgIm5leHRTb3VyY2UiLCAicHJldlRhcmdldCIsICJuZXh0VGFyZ2V0IiwgIl9sb29rdXBCeUtleSIsICJzcGFuIiwgIlRpbWVTZXJpZXNTY2FsZSIsICJfdGFibGUiLCAiX21pblBvcyIsICJfdGFibGVSYW5nZSIsICJfZ2V0VGltZXN0YW1wc0ZvclRhYmxlIiwgImJ1aWxkTG9va3VwVGFibGUiLCAicHJldiIsICJjdXJyIiwgIm5leHQiLCAiYXBwIiwgImgiLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJhcHAiLCAicGFyc2UiLCAiaW1wb3J0X29ic2lkaWFuIiwgInJhbmsiLCAiZWFzZSIsICJwYXJzZSIsICJzaWJsaW5ncyJdCn0K