.obsidian/plugins/obsidian-spaced-repetition/main.js

21429 lines
1.5 MiB

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/.pnpm/pagerank.js@1.0.2/node_modules/pagerank.js/lib/index.js
var require_lib = __commonJS({
"node_modules/.pnpm/pagerank.js@1.0.2/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/.pnpm/vhtml@2.2.0/node_modules/vhtml/dist/vhtml.js
var require_vhtml = __commonJS({
"node_modules/.pnpm/vhtml@2.2.0/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 ? "</" + name + ">" : "";
}
sanitized[s] = true;
return s;
}
return h4;
});
}
});
// node_modules/.pnpm/moment@2.29.4/node_modules/moment/moment.js
var require_moment = __commonJS({
"node_modules/.pnpm/moment@2.29.4/node_modules/moment/moment.js"(exports, module2) {
(function(global, factory) {
typeof exports === "object" && typeof module2 !== "undefined" ? module2.exports = factory() : typeof define === "function" && define.amd ? define(factory) : global.moment = factory();
})(exports, function() {
"use strict";
var hookCallback;
function hooks() {
return hookCallback.apply(null, arguments);
}
function setHookCallback(callback2) {
hookCallback = callback2;
}
function isArray2(input) {
return input instanceof Array || Object.prototype.toString.call(input) === "[object Array]";
}
function isObject2(input) {
return input != null && Object.prototype.toString.call(input) === "[object Object]";
}
function hasOwnProp(a, b) {
return Object.prototype.hasOwnProperty.call(a, b);
}
function isObjectEmpty(obj) {
if (Object.getOwnPropertyNames) {
return Object.getOwnPropertyNames(obj).length === 0;
} else {
var k;
for (k in obj) {
if (hasOwnProp(obj, k)) {
return false;
}
}
return true;
}
}
function isUndefined(input) {
return input === void 0;
}
function isNumber2(input) {
return typeof input === "number" || Object.prototype.toString.call(input) === "[object Number]";
}
function isDate(input) {
return input instanceof Date || Object.prototype.toString.call(input) === "[object Date]";
}
function map3(arr, fn) {
var res = [], i, arrLen = arr.length;
for (i = 0; i < arrLen; ++i) {
res.push(fn(arr[i], i));
}
return res;
}
function extend(a, b) {
for (var i in b) {
if (hasOwnProp(b, i)) {
a[i] = b[i];
}
}
if (hasOwnProp(b, "toString")) {
a.toString = b.toString;
}
if (hasOwnProp(b, "valueOf")) {
a.valueOf = b.valueOf;
}
return a;
}
function createUTC(input, format2, locale3, strict) {
return createLocalOrUTC(input, format2, locale3, strict, true).utc();
}
function defaultParsingFlags() {
return {
empty: false,
unusedTokens: [],
unusedInput: [],
overflow: -2,
charsLeftOver: 0,
nullInput: false,
invalidEra: null,
invalidMonth: null,
invalidFormat: false,
userInvalidated: false,
iso: false,
parsedDateParts: [],
era: null,
meridiem: null,
rfc2822: false,
weekdayMismatch: false
};
}
function getParsingFlags(m) {
if (m._pf == null) {
m._pf = defaultParsingFlags();
}
return m._pf;
}
var some;
if (Array.prototype.some) {
some = Array.prototype.some;
} else {
some = function(fun) {
var t2 = Object(this), len = t2.length >>> 0, i;
for (i = 0; i < len; i++) {
if (i in t2 && fun.call(this, t2[i], i, t2)) {
return true;
}
}
return false;
};
}
function isValid(m) {
if (m._isValid == null) {
var flags = getParsingFlags(m), parsedParts = some.call(flags.parsedDateParts, function(i) {
return i != null;
}), isNowValid = !isNaN(m._d.getTime()) && flags.overflow < 0 && !flags.empty && !flags.invalidEra && !flags.invalidMonth && !flags.invalidWeekday && !flags.weekdayMismatch && !flags.nullInput && !flags.invalidFormat && !flags.userInvalidated && (!flags.meridiem || flags.meridiem && parsedParts);
if (m._strict) {
isNowValid = isNowValid && flags.charsLeftOver === 0 && flags.unusedTokens.length === 0 && flags.bigHour === void 0;
}
if (Object.isFrozen == null || !Object.isFrozen(m)) {
m._isValid = isNowValid;
} else {
return isNowValid;
}
}
return m._isValid;
}
function createInvalid(flags) {
var m = createUTC(NaN);
if (flags != null) {
extend(getParsingFlags(m), flags);
} else {
getParsingFlags(m).userInvalidated = true;
}
return m;
}
var momentProperties = hooks.momentProperties = [], updateInProgress = false;
function copyConfig(to3, from3) {
var i, prop, val, momentPropertiesLen = momentProperties.length;
if (!isUndefined(from3._isAMomentObject)) {
to3._isAMomentObject = from3._isAMomentObject;
}
if (!isUndefined(from3._i)) {
to3._i = from3._i;
}
if (!isUndefined(from3._f)) {
to3._f = from3._f;
}
if (!isUndefined(from3._l)) {
to3._l = from3._l;
}
if (!isUndefined(from3._strict)) {
to3._strict = from3._strict;
}
if (!isUndefined(from3._tzm)) {
to3._tzm = from3._tzm;
}
if (!isUndefined(from3._isUTC)) {
to3._isUTC = from3._isUTC;
}
if (!isUndefined(from3._offset)) {
to3._offset = from3._offset;
}
if (!isUndefined(from3._pf)) {
to3._pf = getParsingFlags(from3);
}
if (!isUndefined(from3._locale)) {
to3._locale = from3._locale;
}
if (momentPropertiesLen > 0) {
for (i = 0; i < momentPropertiesLen; i++) {
prop = momentProperties[i];
val = from3[prop];
if (!isUndefined(val)) {
to3[prop] = val;
}
}
}
return to3;
}
function Moment(config) {
copyConfig(this, config);
this._d = new Date(config._d != null ? config._d.getTime() : NaN);
if (!this.isValid()) {
this._d = /* @__PURE__ */ new Date(NaN);
}
if (updateInProgress === false) {
updateInProgress = true;
hooks.updateOffset(this);
updateInProgress = false;
}
}
function isMoment(obj) {
return obj instanceof Moment || obj != null && obj._isAMomentObject != null;
}
function warn(msg) {
if (hooks.suppressDeprecationWarnings === false && typeof console !== "undefined" && console.warn) {
console.warn("Deprecation warning: " + msg);
}
}
function deprecate(msg, fn) {
var firstTime = true;
return extend(function() {
if (hooks.deprecationHandler != null) {
hooks.deprecationHandler(null, msg);
}
if (firstTime) {
var args = [], arg, i, key, argLen = arguments.length;
for (i = 0; i < argLen; i++) {
arg = "";
if (typeof arguments[i] === "object") {
arg += "\n[" + i + "] ";
for (key in arguments[0]) {
if (hasOwnProp(arguments[0], key)) {
arg += key + ": " + arguments[0][key] + ", ";
}
}
arg = arg.slice(0, -2);
} else {
arg = arguments[i];
}
args.push(arg);
}
warn(
msg + "\nArguments: " + Array.prototype.slice.call(args).join("") + "\n" + new Error().stack
);
firstTime = false;
}
return fn.apply(this, arguments);
}, fn);
}
var deprecations = {};
function deprecateSimple(name, msg) {
if (hooks.deprecationHandler != null) {
hooks.deprecationHandler(name, msg);
}
if (!deprecations[name]) {
warn(msg);
deprecations[name] = true;
}
}
hooks.suppressDeprecationWarnings = false;
hooks.deprecationHandler = null;
function isFunction2(input) {
return typeof Function !== "undefined" && input instanceof Function || Object.prototype.toString.call(input) === "[object Function]";
}
function set2(config) {
var prop, i;
for (i in config) {
if (hasOwnProp(config, i)) {
prop = config[i];
if (isFunction2(prop)) {
this[i] = prop;
} else {
this["_" + i] = prop;
}
}
}
this._config = config;
this._dayOfMonthOrdinalParseLenient = new RegExp(
(this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + "|" + /\d{1,2}/.source
);
}
function mergeConfigs(parentConfig, childConfig) {
var res = extend({}, parentConfig), prop;
for (prop in childConfig) {
if (hasOwnProp(childConfig, prop)) {
if (isObject2(parentConfig[prop]) && isObject2(childConfig[prop])) {
res[prop] = {};
extend(res[prop], parentConfig[prop]);
extend(res[prop], childConfig[prop]);
} else if (childConfig[prop] != null) {
res[prop] = childConfig[prop];
} else {
delete res[prop];
}
}
}
for (prop in parentConfig) {
if (hasOwnProp(parentConfig, prop) && !hasOwnProp(childConfig, prop) && isObject2(parentConfig[prop])) {
res[prop] = extend({}, res[prop]);
}
}
return res;
}
function Locale(config) {
if (config != null) {
this.set(config);
}
}
var keys;
if (Object.keys) {
keys = Object.keys;
} else {
keys = function(obj) {
var i, res = [];
for (i in obj) {
if (hasOwnProp(obj, i)) {
res.push(i);
}
}
return res;
};
}
var defaultCalendar = {
sameDay: "[Today at] LT",
nextDay: "[Tomorrow at] LT",
nextWeek: "dddd [at] LT",
lastDay: "[Yesterday at] LT",
lastWeek: "[Last] dddd [at] LT",
sameElse: "L"
};
function calendar(key, mom, now2) {
var output = this._calendar[key] || this._calendar["sameElse"];
return isFunction2(output) ? output.call(mom, now2) : output;
}
function zeroFill(number, targetLength, forceSign) {
var absNumber = "" + Math.abs(number), zerosToFill = targetLength - absNumber.length, sign3 = number >= 0;
return (sign3 ? forceSign ? "+" : "" : "-") + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;
}
var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g, localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g, formatFunctions = {}, formatTokenFunctions = {};
function addFormatToken(token2, padded, ordinal2, callback2) {
var func = callback2;
if (typeof callback2 === "string") {
func = function() {
return this[callback2]();
};
}
if (token2) {
formatTokenFunctions[token2] = func;
}
if (padded) {
formatTokenFunctions[padded[0]] = function() {
return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
};
}
if (ordinal2) {
formatTokenFunctions[ordinal2] = function() {
return this.localeData().ordinal(
func.apply(this, arguments),
token2
);
};
}
}
function removeFormattingTokens(input) {
if (input.match(/\[[\s\S]/)) {
return input.replace(/^\[|\]$/g, "");
}
return input.replace(/\\/g, "");
}
function makeFormatFunction(format2) {
var array = format2.match(formattingTokens), i, length;
for (i = 0, length = array.length; i < length; i++) {
if (formatTokenFunctions[array[i]]) {
array[i] = formatTokenFunctions[array[i]];
} else {
array[i] = removeFormattingTokens(array[i]);
}
}
return function(mom) {
var output = "", i2;
for (i2 = 0; i2 < length; i2++) {
output += isFunction2(array[i2]) ? array[i2].call(mom, format2) : array[i2];
}
return output;
};
}
function formatMoment(m, format2) {
if (!m.isValid()) {
return m.localeData().invalidDate();
}
format2 = expandFormat(format2, m.localeData());
formatFunctions[format2] = formatFunctions[format2] || makeFormatFunction(format2);
return formatFunctions[format2](m);
}
function expandFormat(format2, locale3) {
var i = 5;
function replaceLongDateFormatTokens(input) {
return locale3.longDateFormat(input) || input;
}
localFormattingTokens.lastIndex = 0;
while (i >= 0 && localFormattingTokens.test(format2)) {
format2 = format2.replace(
localFormattingTokens,
replaceLongDateFormatTokens
);
localFormattingTokens.lastIndex = 0;
i -= 1;
}
return format2;
}
var defaultLongDateFormat = {
LTS: "h:mm:ss A",
LT: "h:mm A",
L: "MM/DD/YYYY",
LL: "MMMM D, YYYY",
LLL: "MMMM D, YYYY h:mm A",
LLLL: "dddd, MMMM D, YYYY h:mm A"
};
function longDateFormat(key) {
var format2 = this._longDateFormat[key], formatUpper = this._longDateFormat[key.toUpperCase()];
if (format2 || !formatUpper) {
return format2;
}
this._longDateFormat[key] = formatUpper.match(formattingTokens).map(function(tok) {
if (tok === "MMMM" || tok === "MM" || tok === "DD" || tok === "dddd") {
return tok.slice(1);
}
return tok;
}).join("");
return this._longDateFormat[key];
}
var defaultInvalidDate = "Invalid date";
function invalidDate() {
return this._invalidDate;
}
var defaultOrdinal = "%d", defaultDayOfMonthOrdinalParse = /\d{1,2}/;
function ordinal(number) {
return this._ordinal.replace("%d", number);
}
var defaultRelativeTime = {
future: "in %s",
past: "%s ago",
s: "a few seconds",
ss: "%d seconds",
m: "a minute",
mm: "%d minutes",
h: "an hour",
hh: "%d hours",
d: "a day",
dd: "%d days",
w: "a week",
ww: "%d weeks",
M: "a month",
MM: "%d months",
y: "a year",
yy: "%d years"
};
function relativeTime(number, withoutSuffix, string, isFuture) {
var output = this._relativeTime[string];
return isFunction2(output) ? output(number, withoutSuffix, string, isFuture) : output.replace(/%d/i, number);
}
function pastFuture(diff2, output) {
var format2 = this._relativeTime[diff2 > 0 ? "future" : "past"];
return isFunction2(format2) ? format2(output) : format2.replace(/%s/i, output);
}
var aliases = {};
function addUnitAlias(unit, shorthand) {
var lowerCase = unit.toLowerCase();
aliases[lowerCase] = aliases[lowerCase + "s"] = aliases[shorthand] = unit;
}
function normalizeUnits(units) {
return typeof units === "string" ? aliases[units] || aliases[units.toLowerCase()] : void 0;
}
function normalizeObjectUnits(inputObject) {
var normalizedInput = {}, normalizedProp, prop;
for (prop in inputObject) {
if (hasOwnProp(inputObject, prop)) {
normalizedProp = normalizeUnits(prop);
if (normalizedProp) {
normalizedInput[normalizedProp] = inputObject[prop];
}
}
}
return normalizedInput;
}
var priorities = {};
function addUnitPriority(unit, priority) {
priorities[unit] = priority;
}
function getPrioritizedUnits(unitsObj) {
var units = [], u;
for (u in unitsObj) {
if (hasOwnProp(unitsObj, u)) {
units.push({ unit: u, priority: priorities[u] });
}
}
units.sort(function(a, b) {
return a.priority - b.priority;
});
return units;
}
function isLeapYear(year) {
return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;
}
function absFloor(number) {
if (number < 0) {
return Math.ceil(number) || 0;
} else {
return Math.floor(number);
}
}
function toInt(argumentForCoercion) {
var coercedNumber = +argumentForCoercion, value = 0;
if (coercedNumber !== 0 && isFinite(coercedNumber)) {
value = absFloor(coercedNumber);
}
return value;
}
function makeGetSet(unit, keepTime) {
return function(value) {
if (value != null) {
set$1(this, unit, value);
hooks.updateOffset(this, keepTime);
return this;
} else {
return get(this, unit);
}
};
}
function get(mom, unit) {
return mom.isValid() ? mom._d["get" + (mom._isUTC ? "UTC" : "") + unit]() : NaN;
}
function set$1(mom, unit, value) {
if (mom.isValid() && !isNaN(value)) {
if (unit === "FullYear" && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {
value = toInt(value);
mom._d["set" + (mom._isUTC ? "UTC" : "") + unit](
value,
mom.month(),
daysInMonth(value, mom.month())
);
} else {
mom._d["set" + (mom._isUTC ? "UTC" : "") + unit](value);
}
}
}
function stringGet(units) {
units = normalizeUnits(units);
if (isFunction2(this[units])) {
return this[units]();
}
return this;
}
function stringSet(units, value) {
if (typeof units === "object") {
units = normalizeObjectUnits(units);
var prioritized = getPrioritizedUnits(units), i, prioritizedLen = prioritized.length;
for (i = 0; i < prioritizedLen; i++) {
this[prioritized[i].unit](units[prioritized[i].unit]);
}
} else {
units = normalizeUnits(units);
if (isFunction2(this[units])) {
return this[units](value);
}
}
return this;
}
var match1 = /\d/, match2 = /\d\d/, match3 = /\d{3}/, match4 = /\d{4}/, match6 = /[+-]?\d{6}/, match1to2 = /\d\d?/, match3to4 = /\d\d\d\d?/, match5to6 = /\d\d\d\d\d\d?/, match1to3 = /\d{1,3}/, match1to4 = /\d{1,4}/, match1to6 = /[+-]?\d{1,6}/, matchUnsigned = /\d+/, matchSigned = /[+-]?\d+/, matchOffset = /Z|[+-]\d\d:?\d\d/gi, matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi, matchTimestamp = /[+-]?\d+(\.\d{1,3})?/, matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i, regexes;
regexes = {};
function addRegexToken(token2, regex, strictRegex) {
regexes[token2] = isFunction2(regex) ? regex : function(isStrict, localeData2) {
return isStrict && strictRegex ? strictRegex : regex;
};
}
function getParseRegexForToken(token2, config) {
if (!hasOwnProp(regexes, token2)) {
return new RegExp(unescapeFormat(token2));
}
return regexes[token2](config._strict, config._locale);
}
function unescapeFormat(s) {
return regexEscape(
s.replace("\\", "").replace(
/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,
function(matched, p1, p2, p3, p4) {
return p1 || p2 || p3 || p4;
}
)
);
}
function regexEscape(s) {
return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&");
}
var tokens = {};
function addParseToken(token2, callback2) {
var i, func = callback2, tokenLen;
if (typeof token2 === "string") {
token2 = [token2];
}
if (isNumber2(callback2)) {
func = function(input, array) {
array[callback2] = toInt(input);
};
}
tokenLen = token2.length;
for (i = 0; i < tokenLen; i++) {
tokens[token2[i]] = func;
}
}
function addWeekParseToken(token2, callback2) {
addParseToken(token2, function(input, array, config, token3) {
config._w = config._w || {};
callback2(input, config._w, config, token3);
});
}
function addTimeToArrayFromToken(token2, input, config) {
if (input != null && hasOwnProp(tokens, token2)) {
tokens[token2](input, config._a, config, token2);
}
}
var YEAR = 0, MONTH = 1, DATE = 2, HOUR = 3, MINUTE = 4, SECOND = 5, MILLISECOND = 6, WEEK = 7, WEEKDAY = 8;
function mod(n, x) {
return (n % x + x) % x;
}
var indexOf;
if (Array.prototype.indexOf) {
indexOf = Array.prototype.indexOf;
} else {
indexOf = function(o) {
var i;
for (i = 0; i < this.length; ++i) {
if (this[i] === o) {
return i;
}
}
return -1;
};
}
function daysInMonth(year, month) {
if (isNaN(year) || isNaN(month)) {
return NaN;
}
var modMonth = mod(month, 12);
year += (month - modMonth) / 12;
return modMonth === 1 ? isLeapYear(year) ? 29 : 28 : 31 - modMonth % 7 % 2;
}
addFormatToken("M", ["MM", 2], "Mo", function() {
return this.month() + 1;
});
addFormatToken("MMM", 0, 0, function(format2) {
return this.localeData().monthsShort(this, format2);
});
addFormatToken("MMMM", 0, 0, function(format2) {
return this.localeData().months(this, format2);
});
addUnitAlias("month", "M");
addUnitPriority("month", 8);
addRegexToken("M", match1to2);
addRegexToken("MM", match1to2, match2);
addRegexToken("MMM", function(isStrict, locale3) {
return locale3.monthsShortRegex(isStrict);
});
addRegexToken("MMMM", function(isStrict, locale3) {
return locale3.monthsRegex(isStrict);
});
addParseToken(["M", "MM"], function(input, array) {
array[MONTH] = toInt(input) - 1;
});
addParseToken(["MMM", "MMMM"], function(input, array, config, token2) {
var month = config._locale.monthsParse(input, token2, config._strict);
if (month != null) {
array[MONTH] = month;
} else {
getParsingFlags(config).invalidMonth = input;
}
});
var defaultLocaleMonths = "January_February_March_April_May_June_July_August_September_October_November_December".split(
"_"
), defaultLocaleMonthsShort = "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"), MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/, defaultMonthsShortRegex = matchWord, defaultMonthsRegex = matchWord;
function localeMonths(m, format2) {
if (!m) {
return isArray2(this._months) ? this._months : this._months["standalone"];
}
return isArray2(this._months) ? this._months[m.month()] : this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format2) ? "format" : "standalone"][m.month()];
}
function localeMonthsShort(m, format2) {
if (!m) {
return isArray2(this._monthsShort) ? this._monthsShort : this._monthsShort["standalone"];
}
return isArray2(this._monthsShort) ? this._monthsShort[m.month()] : this._monthsShort[MONTHS_IN_FORMAT.test(format2) ? "format" : "standalone"][m.month()];
}
function handleStrictParse(monthName, format2, strict) {
var i, ii, mom, llc = monthName.toLocaleLowerCase();
if (!this._monthsParse) {
this._monthsParse = [];
this._longMonthsParse = [];
this._shortMonthsParse = [];
for (i = 0; i < 12; ++i) {
mom = createUTC([2e3, i]);
this._shortMonthsParse[i] = this.monthsShort(
mom,
""
).toLocaleLowerCase();
this._longMonthsParse[i] = this.months(mom, "").toLocaleLowerCase();
}
}
if (strict) {
if (format2 === "MMM") {
ii = indexOf.call(this._shortMonthsParse, llc);
return ii !== -1 ? ii : null;
} else {
ii = indexOf.call(this._longMonthsParse, llc);
return ii !== -1 ? ii : null;
}
} else {
if (format2 === "MMM") {
ii = indexOf.call(this._shortMonthsParse, llc);
if (ii !== -1) {
return ii;
}
ii = indexOf.call(this._longMonthsParse, llc);
return ii !== -1 ? ii : null;
} else {
ii = indexOf.call(this._longMonthsParse, llc);
if (ii !== -1) {
return ii;
}
ii = indexOf.call(this._shortMonthsParse, llc);
return ii !== -1 ? ii : null;
}
}
}
function localeMonthsParse(monthName, format2, strict) {
var i, mom, regex;
if (this._monthsParseExact) {
return handleStrictParse.call(this, monthName, format2, strict);
}
if (!this._monthsParse) {
this._monthsParse = [];
this._longMonthsParse = [];
this._shortMonthsParse = [];
}
for (i = 0; i < 12; i++) {
mom = createUTC([2e3, i]);
if (strict && !this._longMonthsParse[i]) {
this._longMonthsParse[i] = new RegExp(
"^" + this.months(mom, "").replace(".", "") + "$",
"i"
);
this._shortMonthsParse[i] = new RegExp(
"^" + this.monthsShort(mom, "").replace(".", "") + "$",
"i"
);
}
if (!strict && !this._monthsParse[i]) {
regex = "^" + this.months(mom, "") + "|^" + this.monthsShort(mom, "");
this._monthsParse[i] = new RegExp(regex.replace(".", ""), "i");
}
if (strict && format2 === "MMMM" && this._longMonthsParse[i].test(monthName)) {
return i;
} else if (strict && format2 === "MMM" && this._shortMonthsParse[i].test(monthName)) {
return i;
} else if (!strict && this._monthsParse[i].test(monthName)) {
return i;
}
}
}
function setMonth(mom, value) {
var dayOfMonth;
if (!mom.isValid()) {
return mom;
}
if (typeof value === "string") {
if (/^\d+$/.test(value)) {
value = toInt(value);
} else {
value = mom.localeData().monthsParse(value);
if (!isNumber2(value)) {
return mom;
}
}
}
dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));
mom._d["set" + (mom._isUTC ? "UTC" : "") + "Month"](value, dayOfMonth);
return mom;
}
function getSetMonth(value) {
if (value != null) {
setMonth(this, value);
hooks.updateOffset(this, true);
return this;
} else {
return get(this, "Month");
}
}
function getDaysInMonth() {
return daysInMonth(this.year(), this.month());
}
function monthsShortRegex(isStrict) {
if (this._monthsParseExact) {
if (!hasOwnProp(this, "_monthsRegex")) {
computeMonthsParse.call(this);
}
if (isStrict) {
return this._monthsShortStrictRegex;
} else {
return this._monthsShortRegex;
}
} else {
if (!hasOwnProp(this, "_monthsShortRegex")) {
this._monthsShortRegex = defaultMonthsShortRegex;
}
return this._monthsShortStrictRegex && isStrict ? this._monthsShortStrictRegex : this._monthsShortRegex;
}
}
function monthsRegex(isStrict) {
if (this._monthsParseExact) {
if (!hasOwnProp(this, "_monthsRegex")) {
computeMonthsParse.call(this);
}
if (isStrict) {
return this._monthsStrictRegex;
} else {
return this._monthsRegex;
}
} else {
if (!hasOwnProp(this, "_monthsRegex")) {
this._monthsRegex = defaultMonthsRegex;
}
return this._monthsStrictRegex && isStrict ? this._monthsStrictRegex : this._monthsRegex;
}
}
function computeMonthsParse() {
function cmpLenRev(a, b) {
return b.length - a.length;
}
var shortPieces = [], longPieces = [], mixedPieces = [], i, mom;
for (i = 0; i < 12; i++) {
mom = createUTC([2e3, i]);
shortPieces.push(this.monthsShort(mom, ""));
longPieces.push(this.months(mom, ""));
mixedPieces.push(this.months(mom, ""));
mixedPieces.push(this.monthsShort(mom, ""));
}
shortPieces.sort(cmpLenRev);
longPieces.sort(cmpLenRev);
mixedPieces.sort(cmpLenRev);
for (i = 0; i < 12; i++) {
shortPieces[i] = regexEscape(shortPieces[i]);
longPieces[i] = regexEscape(longPieces[i]);
}
for (i = 0; i < 24; i++) {
mixedPieces[i] = regexEscape(mixedPieces[i]);
}
this._monthsRegex = new RegExp("^(" + mixedPieces.join("|") + ")", "i");
this._monthsShortRegex = this._monthsRegex;
this._monthsStrictRegex = new RegExp(
"^(" + longPieces.join("|") + ")",
"i"
);
this._monthsShortStrictRegex = new RegExp(
"^(" + shortPieces.join("|") + ")",
"i"
);
}
addFormatToken("Y", 0, 0, function() {
var y = this.year();
return y <= 9999 ? zeroFill(y, 4) : "+" + y;
});
addFormatToken(0, ["YY", 2], 0, function() {
return this.year() % 100;
});
addFormatToken(0, ["YYYY", 4], 0, "year");
addFormatToken(0, ["YYYYY", 5], 0, "year");
addFormatToken(0, ["YYYYYY", 6, true], 0, "year");
addUnitAlias("year", "y");
addUnitPriority("year", 1);
addRegexToken("Y", matchSigned);
addRegexToken("YY", match1to2, match2);
addRegexToken("YYYY", match1to4, match4);
addRegexToken("YYYYY", match1to6, match6);
addRegexToken("YYYYYY", match1to6, match6);
addParseToken(["YYYYY", "YYYYYY"], YEAR);
addParseToken("YYYY", function(input, array) {
array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
});
addParseToken("YY", function(input, array) {
array[YEAR] = hooks.parseTwoDigitYear(input);
});
addParseToken("Y", function(input, array) {
array[YEAR] = parseInt(input, 10);
});
function daysInYear(year) {
return isLeapYear(year) ? 366 : 365;
}
hooks.parseTwoDigitYear = function(input) {
return toInt(input) + (toInt(input) > 68 ? 1900 : 2e3);
};
var getSetYear = makeGetSet("FullYear", true);
function getIsLeapYear() {
return isLeapYear(this.year());
}
function createDate(y, m, d, h4, M, s, ms) {
var date;
if (y < 100 && y >= 0) {
date = new Date(y + 400, m, d, h4, M, s, ms);
if (isFinite(date.getFullYear())) {
date.setFullYear(y);
}
} else {
date = new Date(y, m, d, h4, M, s, ms);
}
return date;
}
function createUTCDate(y) {
var date, args;
if (y < 100 && y >= 0) {
args = Array.prototype.slice.call(arguments);
args[0] = y + 400;
date = new Date(Date.UTC.apply(null, args));
if (isFinite(date.getUTCFullYear())) {
date.setUTCFullYear(y);
}
} else {
date = new Date(Date.UTC.apply(null, arguments));
}
return date;
}
function firstWeekOffset(year, dow, doy) {
var fwd = 7 + dow - doy, fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;
return -fwdlw + fwd - 1;
}
function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
var localWeekday = (7 + weekday - dow) % 7, weekOffset = firstWeekOffset(year, dow, doy), dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset, resYear, resDayOfYear;
if (dayOfYear <= 0) {
resYear = year - 1;
resDayOfYear = daysInYear(resYear) + dayOfYear;
} else if (dayOfYear > daysInYear(year)) {
resYear = year + 1;
resDayOfYear = dayOfYear - daysInYear(year);
} else {
resYear = year;
resDayOfYear = dayOfYear;
}
return {
year: resYear,
dayOfYear: resDayOfYear
};
}
function weekOfYear(mom, dow, doy) {
var weekOffset = firstWeekOffset(mom.year(), dow, doy), week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1, resWeek, resYear;
if (week < 1) {
resYear = mom.year() - 1;
resWeek = week + weeksInYear(resYear, dow, doy);
} else if (week > weeksInYear(mom.year(), dow, doy)) {
resWeek = week - weeksInYear(mom.year(), dow, doy);
resYear = mom.year() + 1;
} else {
resYear = mom.year();
resWeek = week;
}
return {
week: resWeek,
year: resYear
};
}
function weeksInYear(year, dow, doy) {
var weekOffset = firstWeekOffset(year, dow, doy), weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
}
addFormatToken("w", ["ww", 2], "wo", "week");
addFormatToken("W", ["WW", 2], "Wo", "isoWeek");
addUnitAlias("week", "w");
addUnitAlias("isoWeek", "W");
addUnitPriority("week", 5);
addUnitPriority("isoWeek", 5);
addRegexToken("w", match1to2);
addRegexToken("ww", match1to2, match2);
addRegexToken("W", match1to2);
addRegexToken("WW", match1to2, match2);
addWeekParseToken(
["w", "ww", "W", "WW"],
function(input, week, config, token2) {
week[token2.substr(0, 1)] = toInt(input);
}
);
function localeWeek(mom) {
return weekOfYear(mom, this._week.dow, this._week.doy).week;
}
var defaultLocaleWeek = {
dow: 0,
// Sunday is the first day of the week.
doy: 6
// The week that contains Jan 6th is the first week of the year.
};
function localeFirstDayOfWeek() {
return this._week.dow;
}
function localeFirstDayOfYear() {
return this._week.doy;
}
function getSetWeek(input) {
var week = this.localeData().week(this);
return input == null ? week : this.add((input - week) * 7, "d");
}
function getSetISOWeek(input) {
var week = weekOfYear(this, 1, 4).week;
return input == null ? week : this.add((input - week) * 7, "d");
}
addFormatToken("d", 0, "do", "day");
addFormatToken("dd", 0, 0, function(format2) {
return this.localeData().weekdaysMin(this, format2);
});
addFormatToken("ddd", 0, 0, function(format2) {
return this.localeData().weekdaysShort(this, format2);
});
addFormatToken("dddd", 0, 0, function(format2) {
return this.localeData().weekdays(this, format2);
});
addFormatToken("e", 0, 0, "weekday");
addFormatToken("E", 0, 0, "isoWeekday");
addUnitAlias("day", "d");
addUnitAlias("weekday", "e");
addUnitAlias("isoWeekday", "E");
addUnitPriority("day", 11);
addUnitPriority("weekday", 11);
addUnitPriority("isoWeekday", 11);
addRegexToken("d", match1to2);
addRegexToken("e", match1to2);
addRegexToken("E", match1to2);
addRegexToken("dd", function(isStrict, locale3) {
return locale3.weekdaysMinRegex(isStrict);
});
addRegexToken("ddd", function(isStrict, locale3) {
return locale3.weekdaysShortRegex(isStrict);
});
addRegexToken("dddd", function(isStrict, locale3) {
return locale3.weekdaysRegex(isStrict);
});
addWeekParseToken(["dd", "ddd", "dddd"], function(input, week, config, token2) {
var weekday = config._locale.weekdaysParse(input, token2, config._strict);
if (weekday != null) {
week.d = weekday;
} else {
getParsingFlags(config).invalidWeekday = input;
}
});
addWeekParseToken(["d", "e", "E"], function(input, week, config, token2) {
week[token2] = toInt(input);
});
function parseWeekday(input, locale3) {
if (typeof input !== "string") {
return input;
}
if (!isNaN(input)) {
return parseInt(input, 10);
}
input = locale3.weekdaysParse(input);
if (typeof input === "number") {
return input;
}
return null;
}
function parseIsoWeekday(input, locale3) {
if (typeof input === "string") {
return locale3.weekdaysParse(input) % 7 || 7;
}
return isNaN(input) ? null : input;
}
function shiftWeekdays(ws, n) {
return ws.slice(n, 7).concat(ws.slice(0, n));
}
var defaultLocaleWeekdays = "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"), defaultLocaleWeekdaysShort = "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"), defaultLocaleWeekdaysMin = "Su_Mo_Tu_We_Th_Fr_Sa".split("_"), defaultWeekdaysRegex = matchWord, defaultWeekdaysShortRegex = matchWord, defaultWeekdaysMinRegex = matchWord;
function localeWeekdays(m, format2) {
var weekdays = isArray2(this._weekdays) ? this._weekdays : this._weekdays[m && m !== true && this._weekdays.isFormat.test(format2) ? "format" : "standalone"];
return m === true ? shiftWeekdays(weekdays, this._week.dow) : m ? weekdays[m.day()] : weekdays;
}
function localeWeekdaysShort(m) {
return m === true ? shiftWeekdays(this._weekdaysShort, this._week.dow) : m ? this._weekdaysShort[m.day()] : this._weekdaysShort;
}
function localeWeekdaysMin(m) {
return m === true ? shiftWeekdays(this._weekdaysMin, this._week.dow) : m ? this._weekdaysMin[m.day()] : this._weekdaysMin;
}
function handleStrictParse$1(weekdayName, format2, strict) {
var i, ii, mom, llc = weekdayName.toLocaleLowerCase();
if (!this._weekdaysParse) {
this._weekdaysParse = [];
this._shortWeekdaysParse = [];
this._minWeekdaysParse = [];
for (i = 0; i < 7; ++i) {
mom = createUTC([2e3, 1]).day(i);
this._minWeekdaysParse[i] = this.weekdaysMin(
mom,
""
).toLocaleLowerCase();
this._shortWeekdaysParse[i] = this.weekdaysShort(
mom,
""
).toLocaleLowerCase();
this._weekdaysParse[i] = this.weekdays(mom, "").toLocaleLowerCase();
}
}
if (strict) {
if (format2 === "dddd") {
ii = indexOf.call(this._weekdaysParse, llc);
return ii !== -1 ? ii : null;
} else if (format2 === "ddd") {
ii = indexOf.call(this._shortWeekdaysParse, llc);
return ii !== -1 ? ii : null;
} else {
ii = indexOf.call(this._minWeekdaysParse, llc);
return ii !== -1 ? ii : null;
}
} else {
if (format2 === "dddd") {
ii = indexOf.call(this._weekdaysParse, llc);
if (ii !== -1) {
return ii;
}
ii = indexOf.call(this._shortWeekdaysParse, llc);
if (ii !== -1) {
return ii;
}
ii = indexOf.call(this._minWeekdaysParse, llc);
return ii !== -1 ? ii : null;
} else if (format2 === "ddd") {
ii = indexOf.call(this._shortWeekdaysParse, llc);
if (ii !== -1) {
return ii;
}
ii = indexOf.call(this._weekdaysParse, llc);
if (ii !== -1) {
return ii;
}
ii = indexOf.call(this._minWeekdaysParse, llc);
return ii !== -1 ? ii : null;
} else {
ii = indexOf.call(this._minWeekdaysParse, llc);
if (ii !== -1) {
return ii;
}
ii = indexOf.call(this._weekdaysParse, llc);
if (ii !== -1) {
return ii;
}
ii = indexOf.call(this._shortWeekdaysParse, llc);
return ii !== -1 ? ii : null;
}
}
}
function localeWeekdaysParse(weekdayName, format2, strict) {
var i, mom, regex;
if (this._weekdaysParseExact) {
return handleStrictParse$1.call(this, weekdayName, format2, strict);
}
if (!this._weekdaysParse) {
this._weekdaysParse = [];
this._minWeekdaysParse = [];
this._shortWeekdaysParse = [];
this._fullWeekdaysParse = [];
}
for (i = 0; i < 7; i++) {
mom = createUTC([2e3, 1]).day(i);
if (strict && !this._fullWeekdaysParse[i]) {
this._fullWeekdaysParse[i] = new RegExp(
"^" + this.weekdays(mom, "").replace(".", "\\.?") + "$",
"i"
);
this._shortWeekdaysParse[i] = new RegExp(
"^" + this.weekdaysShort(mom, "").replace(".", "\\.?") + "$",
"i"
);
this._minWeekdaysParse[i] = new RegExp(
"^" + this.weekdaysMin(mom, "").replace(".", "\\.?") + "$",
"i"
);
}
if (!this._weekdaysParse[i]) {
regex = "^" + this.weekdays(mom, "") + "|^" + this.weekdaysShort(mom, "") + "|^" + this.weekdaysMin(mom, "");
this._weekdaysParse[i] = new RegExp(regex.replace(".", ""), "i");
}
if (strict && format2 === "dddd" && this._fullWeekdaysParse[i].test(weekdayName)) {
return i;
} else if (strict && format2 === "ddd" && this._shortWeekdaysParse[i].test(weekdayName)) {
return i;
} else if (strict && format2 === "dd" && this._minWeekdaysParse[i].test(weekdayName)) {
return i;
} else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
return i;
}
}
}
function getSetDayOfWeek(input) {
if (!this.isValid()) {
return input != null ? this : NaN;
}
var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
if (input != null) {
input = parseWeekday(input, this.localeData());
return this.add(input - day, "d");
} else {
return day;
}
}
function getSetLocaleDayOfWeek(input) {
if (!this.isValid()) {
return input != null ? this : NaN;
}
var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
return input == null ? weekday : this.add(input - weekday, "d");
}
function getSetISODayOfWeek(input) {
if (!this.isValid()) {
return input != null ? this : NaN;
}
if (input != null) {
var weekday = parseIsoWeekday(input, this.localeData());
return this.day(this.day() % 7 ? weekday : weekday - 7);
} else {
return this.day() || 7;
}
}
function weekdaysRegex(isStrict) {
if (this._weekdaysParseExact) {
if (!hasOwnProp(this, "_weekdaysRegex")) {
computeWeekdaysParse.call(this);
}
if (isStrict) {
return this._weekdaysStrictRegex;
} else {
return this._weekdaysRegex;
}
} else {
if (!hasOwnProp(this, "_weekdaysRegex")) {
this._weekdaysRegex = defaultWeekdaysRegex;
}
return this._weekdaysStrictRegex && isStrict ? this._weekdaysStrictRegex : this._weekdaysRegex;
}
}
function weekdaysShortRegex(isStrict) {
if (this._weekdaysParseExact) {
if (!hasOwnProp(this, "_weekdaysRegex")) {
computeWeekdaysParse.call(this);
}
if (isStrict) {
return this._weekdaysShortStrictRegex;
} else {
return this._weekdaysShortRegex;
}
} else {
if (!hasOwnProp(this, "_weekdaysShortRegex")) {
this._weekdaysShortRegex = defaultWeekdaysShortRegex;
}
return this._weekdaysShortStrictRegex && isStrict ? this._weekdaysShortStrictRegex : this._weekdaysShortRegex;
}
}
function weekdaysMinRegex(isStrict) {
if (this._weekdaysParseExact) {
if (!hasOwnProp(this, "_weekdaysRegex")) {
computeWeekdaysParse.call(this);
}
if (isStrict) {
return this._weekdaysMinStrictRegex;
} else {
return this._weekdaysMinRegex;
}
} else {
if (!hasOwnProp(this, "_weekdaysMinRegex")) {
this._weekdaysMinRegex = defaultWeekdaysMinRegex;
}
return this._weekdaysMinStrictRegex && isStrict ? this._weekdaysMinStrictRegex : this._weekdaysMinRegex;
}
}
function computeWeekdaysParse() {
function cmpLenRev(a, b) {
return b.length - a.length;
}
var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [], i, mom, minp, shortp, longp;
for (i = 0; i < 7; i++) {
mom = createUTC([2e3, 1]).day(i);
minp = regexEscape(this.weekdaysMin(mom, ""));
shortp = regexEscape(this.weekdaysShort(mom, ""));
longp = regexEscape(this.weekdays(mom, ""));
minPieces.push(minp);
shortPieces.push(shortp);
longPieces.push(longp);
mixedPieces.push(minp);
mixedPieces.push(shortp);
mixedPieces.push(longp);
}
minPieces.sort(cmpLenRev);
shortPieces.sort(cmpLenRev);
longPieces.sort(cmpLenRev);
mixedPieces.sort(cmpLenRev);
this._weekdaysRegex = new RegExp("^(" + mixedPieces.join("|") + ")", "i");
this._weekdaysShortRegex = this._weekdaysRegex;
this._weekdaysMinRegex = this._weekdaysRegex;
this._weekdaysStrictRegex = new RegExp(
"^(" + longPieces.join("|") + ")",
"i"
);
this._weekdaysShortStrictRegex = new RegExp(
"^(" + shortPieces.join("|") + ")",
"i"
);
this._weekdaysMinStrictRegex = new RegExp(
"^(" + minPieces.join("|") + ")",
"i"
);
}
function hFormat() {
return this.hours() % 12 || 12;
}
function kFormat() {
return this.hours() || 24;
}
addFormatToken("H", ["HH", 2], 0, "hour");
addFormatToken("h", ["hh", 2], 0, hFormat);
addFormatToken("k", ["kk", 2], 0, kFormat);
addFormatToken("hmm", 0, 0, function() {
return "" + hFormat.apply(this) + zeroFill(this.minutes(), 2);
});
addFormatToken("hmmss", 0, 0, function() {
return "" + hFormat.apply(this) + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2);
});
addFormatToken("Hmm", 0, 0, function() {
return "" + this.hours() + zeroFill(this.minutes(), 2);
});
addFormatToken("Hmmss", 0, 0, function() {
return "" + this.hours() + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2);
});
function meridiem(token2, lowercase) {
addFormatToken(token2, 0, 0, function() {
return this.localeData().meridiem(
this.hours(),
this.minutes(),
lowercase
);
});
}
meridiem("a", true);
meridiem("A", false);
addUnitAlias("hour", "h");
addUnitPriority("hour", 13);
function matchMeridiem(isStrict, locale3) {
return locale3._meridiemParse;
}
addRegexToken("a", matchMeridiem);
addRegexToken("A", matchMeridiem);
addRegexToken("H", match1to2);
addRegexToken("h", match1to2);
addRegexToken("k", match1to2);
addRegexToken("HH", match1to2, match2);
addRegexToken("hh", match1to2, match2);
addRegexToken("kk", match1to2, match2);
addRegexToken("hmm", match3to4);
addRegexToken("hmmss", match5to6);
addRegexToken("Hmm", match3to4);
addRegexToken("Hmmss", match5to6);
addParseToken(["H", "HH"], HOUR);
addParseToken(["k", "kk"], function(input, array, config) {
var kInput = toInt(input);
array[HOUR] = kInput === 24 ? 0 : kInput;
});
addParseToken(["a", "A"], function(input, array, config) {
config._isPm = config._locale.isPM(input);
config._meridiem = input;
});
addParseToken(["h", "hh"], function(input, array, config) {
array[HOUR] = toInt(input);
getParsingFlags(config).bigHour = true;
});
addParseToken("hmm", function(input, array, config) {
var pos = input.length - 2;
array[HOUR] = toInt(input.substr(0, pos));
array[MINUTE] = toInt(input.substr(pos));
getParsingFlags(config).bigHour = true;
});
addParseToken("hmmss", function(input, array, config) {
var pos1 = input.length - 4, pos2 = input.length - 2;
array[HOUR] = toInt(input.substr(0, pos1));
array[MINUTE] = toInt(input.substr(pos1, 2));
array[SECOND] = toInt(input.substr(pos2));
getParsingFlags(config).bigHour = true;
});
addParseToken("Hmm", function(input, array, config) {
var pos = input.length - 2;
array[HOUR] = toInt(input.substr(0, pos));
array[MINUTE] = toInt(input.substr(pos));
});
addParseToken("Hmmss", function(input, array, config) {
var pos1 = input.length - 4, pos2 = input.length - 2;
array[HOUR] = toInt(input.substr(0, pos1));
array[MINUTE] = toInt(input.substr(pos1, 2));
array[SECOND] = toInt(input.substr(pos2));
});
function localeIsPM(input) {
return (input + "").toLowerCase().charAt(0) === "p";
}
var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i, getSetHour = makeGetSet("Hours", true);
function localeMeridiem(hours2, minutes2, isLower) {
if (hours2 > 11) {
return isLower ? "pm" : "PM";
} else {
return isLower ? "am" : "AM";
}
}
var baseConfig = {
calendar: defaultCalendar,
longDateFormat: defaultLongDateFormat,
invalidDate: defaultInvalidDate,
ordinal: defaultOrdinal,
dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,
relativeTime: defaultRelativeTime,
months: defaultLocaleMonths,
monthsShort: defaultLocaleMonthsShort,
week: defaultLocaleWeek,
weekdays: defaultLocaleWeekdays,
weekdaysMin: defaultLocaleWeekdaysMin,
weekdaysShort: defaultLocaleWeekdaysShort,
meridiemParse: defaultLocaleMeridiemParse
};
var locales = {}, localeFamilies = {}, globalLocale;
function commonPrefix(arr1, arr2) {
var i, minl = Math.min(arr1.length, arr2.length);
for (i = 0; i < minl; i += 1) {
if (arr1[i] !== arr2[i]) {
return i;
}
}
return minl;
}
function normalizeLocale(key) {
return key ? key.toLowerCase().replace("_", "-") : key;
}
function chooseLocale(names2) {
var i = 0, j, next, locale3, split;
while (i < names2.length) {
split = normalizeLocale(names2[i]).split("-");
j = split.length;
next = normalizeLocale(names2[i + 1]);
next = next ? next.split("-") : null;
while (j > 0) {
locale3 = loadLocale(split.slice(0, j).join("-"));
if (locale3) {
return locale3;
}
if (next && next.length >= j && commonPrefix(split, next) >= j - 1) {
break;
}
j--;
}
i++;
}
return globalLocale;
}
function isLocaleNameSane(name) {
return name.match("^[^/\\\\]*$") != null;
}
function loadLocale(name) {
var oldLocale = null, aliasedRequire;
if (locales[name] === void 0 && typeof module2 !== "undefined" && module2 && module2.exports && isLocaleNameSane(name)) {
try {
oldLocale = globalLocale._abbr;
aliasedRequire = require;
aliasedRequire("./locale/" + name);
getSetGlobalLocale(oldLocale);
} catch (e) {
locales[name] = null;
}
}
return locales[name];
}
function getSetGlobalLocale(key, values) {
var data;
if (key) {
if (isUndefined(values)) {
data = getLocale(key);
} else {
data = defineLocale(key, values);
}
if (data) {
globalLocale = data;
} else {
if (typeof console !== "undefined" && console.warn) {
console.warn(
"Locale " + key + " not found. Did you forget to load it?"
);
}
}
}
return globalLocale._abbr;
}
function defineLocale(name, config) {
if (config !== null) {
var locale3, parentConfig = baseConfig;
config.abbr = name;
if (locales[name] != null) {
deprecateSimple(
"defineLocaleOverride",
"use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."
);
parentConfig = locales[name]._config;
} else if (config.parentLocale != null) {
if (locales[config.parentLocale] != null) {
parentConfig = locales[config.parentLocale]._config;
} else {
locale3 = loadLocale(config.parentLocale);
if (locale3 != null) {
parentConfig = locale3._config;
} else {
if (!localeFamilies[config.parentLocale]) {
localeFamilies[config.parentLocale] = [];
}
localeFamilies[config.parentLocale].push({
name,
config
});
return null;
}
}
}
locales[name] = new Locale(mergeConfigs(parentConfig, config));
if (localeFamilies[name]) {
localeFamilies[name].forEach(function(x) {
defineLocale(x.name, x.config);
});
}
getSetGlobalLocale(name);
return locales[name];
} else {
delete locales[name];
return null;
}
}
function updateLocale(name, config) {
if (config != null) {
var locale3, tmpLocale, parentConfig = baseConfig;
if (locales[name] != null && locales[name].parentLocale != null) {
locales[name].set(mergeConfigs(locales[name]._config, config));
} else {
tmpLocale = loadLocale(name);
if (tmpLocale != null) {
parentConfig = tmpLocale._config;
}
config = mergeConfigs(parentConfig, config);
if (tmpLocale == null) {
config.abbr = name;
}
locale3 = new Locale(config);
locale3.parentLocale = locales[name];
locales[name] = locale3;
}
getSetGlobalLocale(name);
} else {
if (locales[name] != null) {
if (locales[name].parentLocale != null) {
locales[name] = locales[name].parentLocale;
if (name === getSetGlobalLocale()) {
getSetGlobalLocale(name);
}
} else if (locales[name] != null) {
delete locales[name];
}
}
}
return locales[name];
}
function getLocale(key) {
var locale3;
if (key && key._locale && key._locale._abbr) {
key = key._locale._abbr;
}
if (!key) {
return globalLocale;
}
if (!isArray2(key)) {
locale3 = loadLocale(key);
if (locale3) {
return locale3;
}
key = [key];
}
return chooseLocale(key);
}
function listLocales() {
return keys(locales);
}
function checkOverflow(m) {
var overflow, a = m._a;
if (a && getParsingFlags(m).overflow === -2) {
overflow = a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : a[HOUR] < 0 || a[HOUR] > 24 || a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0) ? HOUR : a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : -1;
if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {
overflow = DATE;
}
if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
overflow = WEEK;
}
if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
overflow = WEEKDAY;
}
getParsingFlags(m).overflow = overflow;
}
return m;
}
var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/, basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/, tzRegex = /Z|[+-]\d\d(?::?\d\d)?/, isoDates = [
["YYYYYY-MM-DD", /[+-]\d{6}-\d\d-\d\d/],
["YYYY-MM-DD", /\d{4}-\d\d-\d\d/],
["GGGG-[W]WW-E", /\d{4}-W\d\d-\d/],
["GGGG-[W]WW", /\d{4}-W\d\d/, false],
["YYYY-DDD", /\d{4}-\d{3}/],
["YYYY-MM", /\d{4}-\d\d/, false],
["YYYYYYMMDD", /[+-]\d{10}/],
["YYYYMMDD", /\d{8}/],
["GGGG[W]WWE", /\d{4}W\d{3}/],
["GGGG[W]WW", /\d{4}W\d{2}/, false],
["YYYYDDD", /\d{7}/],
["YYYYMM", /\d{6}/, false],
["YYYY", /\d{4}/, false]
], isoTimes = [
["HH:mm:ss.SSSS", /\d\d:\d\d:\d\d\.\d+/],
["HH:mm:ss,SSSS", /\d\d:\d\d:\d\d,\d+/],
["HH:mm:ss", /\d\d:\d\d:\d\d/],
["HH:mm", /\d\d:\d\d/],
["HHmmss.SSSS", /\d\d\d\d\d\d\.\d+/],
["HHmmss,SSSS", /\d\d\d\d\d\d,\d+/],
["HHmmss", /\d\d\d\d\d\d/],
["HHmm", /\d\d\d\d/],
["HH", /\d\d/]
], aspNetJsonRegex = /^\/?Date\((-?\d+)/i, rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/, obsOffsets = {
UT: 0,
GMT: 0,
EDT: -4 * 60,
EST: -5 * 60,
CDT: -5 * 60,
CST: -6 * 60,
MDT: -6 * 60,
MST: -7 * 60,
PDT: -7 * 60,
PST: -8 * 60
};
function configFromISO(config) {
var i, l, string = config._i, match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string), allowTime, dateFormat, timeFormat, tzFormat, isoDatesLen = isoDates.length, isoTimesLen = isoTimes.length;
if (match) {
getParsingFlags(config).iso = true;
for (i = 0, l = isoDatesLen; i < l; i++) {
if (isoDates[i][1].exec(match[1])) {
dateFormat = isoDates[i][0];
allowTime = isoDates[i][2] !== false;
break;
}
}
if (dateFormat == null) {
config._isValid = false;
return;
}
if (match[3]) {
for (i = 0, l = isoTimesLen; i < l; i++) {
if (isoTimes[i][1].exec(match[3])) {
timeFormat = (match[2] || " ") + isoTimes[i][0];
break;
}
}
if (timeFormat == null) {
config._isValid = false;
return;
}
}
if (!allowTime && timeFormat != null) {
config._isValid = false;
return;
}
if (match[4]) {
if (tzRegex.exec(match[4])) {
tzFormat = "Z";
} else {
config._isValid = false;
return;
}
}
config._f = dateFormat + (timeFormat || "") + (tzFormat || "");
configFromStringAndFormat(config);
} else {
config._isValid = false;
}
}
function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {
var result = [
untruncateYear(yearStr),
defaultLocaleMonthsShort.indexOf(monthStr),
parseInt(dayStr, 10),
parseInt(hourStr, 10),
parseInt(minuteStr, 10)
];
if (secondStr) {
result.push(parseInt(secondStr, 10));
}
return result;
}
function untruncateYear(yearStr) {
var year = parseInt(yearStr, 10);
if (year <= 49) {
return 2e3 + year;
} else if (year <= 999) {
return 1900 + year;
}
return year;
}
function preprocessRFC2822(s) {
return s.replace(/\([^()]*\)|[\n\t]/g, " ").replace(/(\s\s+)/g, " ").replace(/^\s\s*/, "").replace(/\s\s*$/, "");
}
function checkWeekday(weekdayStr, parsedInput, config) {
if (weekdayStr) {
var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr), weekdayActual = new Date(
parsedInput[0],
parsedInput[1],
parsedInput[2]
).getDay();
if (weekdayProvided !== weekdayActual) {
getParsingFlags(config).weekdayMismatch = true;
config._isValid = false;
return false;
}
}
return true;
}
function calculateOffset(obsOffset, militaryOffset, numOffset) {
if (obsOffset) {
return obsOffsets[obsOffset];
} else if (militaryOffset) {
return 0;
} else {
var hm = parseInt(numOffset, 10), m = hm % 100, h4 = (hm - m) / 100;
return h4 * 60 + m;
}
}
function configFromRFC2822(config) {
var match = rfc2822.exec(preprocessRFC2822(config._i)), parsedArray;
if (match) {
parsedArray = extractFromRFC2822Strings(
match[4],
match[3],
match[2],
match[5],
match[6],
match[7]
);
if (!checkWeekday(match[1], parsedArray, config)) {
return;
}
config._a = parsedArray;
config._tzm = calculateOffset(match[8], match[9], match[10]);
config._d = createUTCDate.apply(null, config._a);
config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
getParsingFlags(config).rfc2822 = true;
} else {
config._isValid = false;
}
}
function configFromString(config) {
var matched = aspNetJsonRegex.exec(config._i);
if (matched !== null) {
config._d = /* @__PURE__ */ new Date(+matched[1]);
return;
}
configFromISO(config);
if (config._isValid === false) {
delete config._isValid;
} else {
return;
}
configFromRFC2822(config);
if (config._isValid === false) {
delete config._isValid;
} else {
return;
}
if (config._strict) {
config._isValid = false;
} else {
hooks.createFromInputFallback(config);
}
}
hooks.createFromInputFallback = deprecate(
"value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",
function(config) {
config._d = /* @__PURE__ */ new Date(config._i + (config._useUTC ? " UTC" : ""));
}
);
function defaults2(a, b, c) {
if (a != null) {
return a;
}
if (b != null) {
return b;
}
return c;
}
function currentDateArray(config) {
var nowValue = new Date(hooks.now());
if (config._useUTC) {
return [
nowValue.getUTCFullYear(),
nowValue.getUTCMonth(),
nowValue.getUTCDate()
];
}
return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
}
function configFromArray(config) {
var i, date, input = [], currentDate, expectedWeekday, yearToUse;
if (config._d) {
return;
}
currentDate = currentDateArray(config);
if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
dayOfYearFromWeekInfo(config);
}
if (config._dayOfYear != null) {
yearToUse = defaults2(config._a[YEAR], currentDate[YEAR]);
if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {
getParsingFlags(config)._overflowDayOfYear = true;
}
date = createUTCDate(yearToUse, 0, config._dayOfYear);
config._a[MONTH] = date.getUTCMonth();
config._a[DATE] = date.getUTCDate();
}
for (i = 0; i < 3 && config._a[i] == null; ++i) {
config._a[i] = input[i] = currentDate[i];
}
for (; i < 7; i++) {
config._a[i] = input[i] = config._a[i] == null ? i === 2 ? 1 : 0 : config._a[i];
}
if (config._a[HOUR] === 24 && config._a[MINUTE] === 0 && config._a[SECOND] === 0 && config._a[MILLISECOND] === 0) {
config._nextDay = true;
config._a[HOUR] = 0;
}
config._d = (config._useUTC ? createUTCDate : createDate).apply(
null,
input
);
expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay();
if (config._tzm != null) {
config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
}
if (config._nextDay) {
config._a[HOUR] = 24;
}
if (config._w && typeof config._w.d !== "undefined" && config._w.d !== expectedWeekday) {
getParsingFlags(config).weekdayMismatch = true;
}
}
function dayOfYearFromWeekInfo(config) {
var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;
w = config._w;
if (w.GG != null || w.W != null || w.E != null) {
dow = 1;
doy = 4;
weekYear = defaults2(
w.GG,
config._a[YEAR],
weekOfYear(createLocal(), 1, 4).year
);
week = defaults2(w.W, 1);
weekday = defaults2(w.E, 1);
if (weekday < 1 || weekday > 7) {
weekdayOverflow = true;
}
} else {
dow = config._locale._week.dow;
doy = config._locale._week.doy;
curWeek = weekOfYear(createLocal(), dow, doy);
weekYear = defaults2(w.gg, config._a[YEAR], curWeek.year);
week = defaults2(w.w, curWeek.week);
if (w.d != null) {
weekday = w.d;
if (weekday < 0 || weekday > 6) {
weekdayOverflow = true;
}
} else if (w.e != null) {
weekday = w.e + dow;
if (w.e < 0 || w.e > 6) {
weekdayOverflow = true;
}
} else {
weekday = dow;
}
}
if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
getParsingFlags(config)._overflowWeeks = true;
} else if (weekdayOverflow != null) {
getParsingFlags(config)._overflowWeekday = true;
} else {
temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
config._a[YEAR] = temp.year;
config._dayOfYear = temp.dayOfYear;
}
}
hooks.ISO_8601 = function() {
};
hooks.RFC_2822 = function() {
};
function configFromStringAndFormat(config) {
if (config._f === hooks.ISO_8601) {
configFromISO(config);
return;
}
if (config._f === hooks.RFC_2822) {
configFromRFC2822(config);
return;
}
config._a = [];
getParsingFlags(config).empty = true;
var string = "" + config._i, i, parsedInput, tokens2, token2, skipped, stringLength = string.length, totalParsedInputLength = 0, era, tokenLen;
tokens2 = expandFormat(config._f, config._locale).match(formattingTokens) || [];
tokenLen = tokens2.length;
for (i = 0; i < tokenLen; i++) {
token2 = tokens2[i];
parsedInput = (string.match(getParseRegexForToken(token2, config)) || [])[0];
if (parsedInput) {
skipped = string.substr(0, string.indexOf(parsedInput));
if (skipped.length > 0) {
getParsingFlags(config).unusedInput.push(skipped);
}
string = string.slice(
string.indexOf(parsedInput) + parsedInput.length
);
totalParsedInputLength += parsedInput.length;
}
if (formatTokenFunctions[token2]) {
if (parsedInput) {
getParsingFlags(config).empty = false;
} else {
getParsingFlags(config).unusedTokens.push(token2);
}
addTimeToArrayFromToken(token2, parsedInput, config);
} else if (config._strict && !parsedInput) {
getParsingFlags(config).unusedTokens.push(token2);
}
}
getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;
if (string.length > 0) {
getParsingFlags(config).unusedInput.push(string);
}
if (config._a[HOUR] <= 12 && getParsingFlags(config).bigHour === true && config._a[HOUR] > 0) {
getParsingFlags(config).bigHour = void 0;
}
getParsingFlags(config).parsedDateParts = config._a.slice(0);
getParsingFlags(config).meridiem = config._meridiem;
config._a[HOUR] = meridiemFixWrap(
config._locale,
config._a[HOUR],
config._meridiem
);
era = getParsingFlags(config).era;
if (era !== null) {
config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);
}
configFromArray(config);
checkOverflow(config);
}
function meridiemFixWrap(locale3, hour, meridiem2) {
var isPm;
if (meridiem2 == null) {
return hour;
}
if (locale3.meridiemHour != null) {
return locale3.meridiemHour(hour, meridiem2);
} else if (locale3.isPM != null) {
isPm = locale3.isPM(meridiem2);
if (isPm && hour < 12) {
hour += 12;
}
if (!isPm && hour === 12) {
hour = 0;
}
return hour;
} else {
return hour;
}
}
function configFromStringAndArray(config) {
var tempConfig, bestMoment, scoreToBeat, i, currentScore, validFormatFound, bestFormatIsValid = false, configfLen = config._f.length;
if (configfLen === 0) {
getParsingFlags(config).invalidFormat = true;
config._d = /* @__PURE__ */ new Date(NaN);
return;
}
for (i = 0; i < configfLen; i++) {
currentScore = 0;
validFormatFound = false;
tempConfig = copyConfig({}, config);
if (config._useUTC != null) {
tempConfig._useUTC = config._useUTC;
}
tempConfig._f = config._f[i];
configFromStringAndFormat(tempConfig);
if (isValid(tempConfig)) {
validFormatFound = true;
}
currentScore += getParsingFlags(tempConfig).charsLeftOver;
currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;
getParsingFlags(tempConfig).score = currentScore;
if (!bestFormatIsValid) {
if (scoreToBeat == null || currentScore < scoreToBeat || validFormatFound) {
scoreToBeat = currentScore;
bestMoment = tempConfig;
if (validFormatFound) {
bestFormatIsValid = true;
}
}
} else {
if (currentScore < scoreToBeat) {
scoreToBeat = currentScore;
bestMoment = tempConfig;
}
}
}
extend(config, bestMoment || tempConfig);
}
function configFromObject(config) {
if (config._d) {
return;
}
var i = normalizeObjectUnits(config._i), dayOrDate = i.day === void 0 ? i.date : i.day;
config._a = map3(
[i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],
function(obj) {
return obj && parseInt(obj, 10);
}
);
configFromArray(config);
}
function createFromConfig(config) {
var res = new Moment(checkOverflow(prepareConfig(config)));
if (res._nextDay) {
res.add(1, "d");
res._nextDay = void 0;
}
return res;
}
function prepareConfig(config) {
var input = config._i, format2 = config._f;
config._locale = config._locale || getLocale(config._l);
if (input === null || format2 === void 0 && input === "") {
return createInvalid({ nullInput: true });
}
if (typeof input === "string") {
config._i = input = config._locale.preparse(input);
}
if (isMoment(input)) {
return new Moment(checkOverflow(input));
} else if (isDate(input)) {
config._d = input;
} else if (isArray2(format2)) {
configFromStringAndArray(config);
} else if (format2) {
configFromStringAndFormat(config);
} else {
configFromInput(config);
}
if (!isValid(config)) {
config._d = null;
}
return config;
}
function configFromInput(config) {
var input = config._i;
if (isUndefined(input)) {
config._d = new Date(hooks.now());
} else if (isDate(input)) {
config._d = new Date(input.valueOf());
} else if (typeof input === "string") {
configFromString(config);
} else if (isArray2(input)) {
config._a = map3(input.slice(0), function(obj) {
return parseInt(obj, 10);
});
configFromArray(config);
} else if (isObject2(input)) {
configFromObject(config);
} else if (isNumber2(input)) {
config._d = new Date(input);
} else {
hooks.createFromInputFallback(config);
}
}
function createLocalOrUTC(input, format2, locale3, strict, isUTC) {
var c = {};
if (format2 === true || format2 === false) {
strict = format2;
format2 = void 0;
}
if (locale3 === true || locale3 === false) {
strict = locale3;
locale3 = void 0;
}
if (isObject2(input) && isObjectEmpty(input) || isArray2(input) && input.length === 0) {
input = void 0;
}
c._isAMomentObject = true;
c._useUTC = c._isUTC = isUTC;
c._l = locale3;
c._i = input;
c._f = format2;
c._strict = strict;
return createFromConfig(c);
}
function createLocal(input, format2, locale3, strict) {
return createLocalOrUTC(input, format2, locale3, strict, false);
}
var prototypeMin = deprecate(
"moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",
function() {
var other = createLocal.apply(null, arguments);
if (this.isValid() && other.isValid()) {
return other < this ? this : other;
} else {
return createInvalid();
}
}
), prototypeMax = deprecate(
"moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",
function() {
var other = createLocal.apply(null, arguments);
if (this.isValid() && other.isValid()) {
return other > this ? this : other;
} else {
return createInvalid();
}
}
);
function pickBy(fn, moments) {
var res, i;
if (moments.length === 1 && isArray2(moments[0])) {
moments = moments[0];
}
if (!moments.length) {
return createLocal();
}
res = moments[0];
for (i = 1; i < moments.length; ++i) {
if (!moments[i].isValid() || moments[i][fn](res)) {
res = moments[i];
}
}
return res;
}
function min() {
var args = [].slice.call(arguments, 0);
return pickBy("isBefore", args);
}
function max() {
var args = [].slice.call(arguments, 0);
return pickBy("isAfter", args);
}
var now = function() {
return Date.now ? Date.now() : +/* @__PURE__ */ new Date();
};
var ordering = [
"year",
"quarter",
"month",
"week",
"day",
"hour",
"minute",
"second",
"millisecond"
];
function isDurationValid(m) {
var key, unitHasDecimal = false, i, orderLen = ordering.length;
for (key in m) {
if (hasOwnProp(m, key) && !(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {
return false;
}
}
for (i = 0; i < orderLen; ++i) {
if (m[ordering[i]]) {
if (unitHasDecimal) {
return false;
}
if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {
unitHasDecimal = true;
}
}
}
return true;
}
function isValid$1() {
return this._isValid;
}
function createInvalid$1() {
return createDuration(NaN);
}
function Duration(duration) {
var normalizedInput = normalizeObjectUnits(duration), years2 = normalizedInput.year || 0, quarters = normalizedInput.quarter || 0, months2 = normalizedInput.month || 0, weeks2 = normalizedInput.week || normalizedInput.isoWeek || 0, days2 = normalizedInput.day || 0, hours2 = normalizedInput.hour || 0, minutes2 = normalizedInput.minute || 0, seconds2 = normalizedInput.second || 0, milliseconds2 = normalizedInput.millisecond || 0;
this._isValid = isDurationValid(normalizedInput);
this._milliseconds = +milliseconds2 + seconds2 * 1e3 + // 1000
minutes2 * 6e4 + // 1000 * 60
hours2 * 1e3 * 60 * 60;
this._days = +days2 + weeks2 * 7;
this._months = +months2 + quarters * 3 + years2 * 12;
this._data = {};
this._locale = getLocale();
this._bubble();
}
function isDuration(obj) {
return obj instanceof Duration;
}
function absRound(number) {
if (number < 0) {
return Math.round(-1 * number) * -1;
} else {
return Math.round(number);
}
}
function compareArrays(array1, array2, dontConvert) {
var len = Math.min(array1.length, array2.length), lengthDiff = Math.abs(array1.length - array2.length), diffs = 0, i;
for (i = 0; i < len; i++) {
if (dontConvert && array1[i] !== array2[i] || !dontConvert && toInt(array1[i]) !== toInt(array2[i])) {
diffs++;
}
}
return diffs + lengthDiff;
}
function offset(token2, separator) {
addFormatToken(token2, 0, 0, function() {
var offset2 = this.utcOffset(), sign3 = "+";
if (offset2 < 0) {
offset2 = -offset2;
sign3 = "-";
}
return sign3 + zeroFill(~~(offset2 / 60), 2) + separator + zeroFill(~~offset2 % 60, 2);
});
}
offset("Z", ":");
offset("ZZ", "");
addRegexToken("Z", matchShortOffset);
addRegexToken("ZZ", matchShortOffset);
addParseToken(["Z", "ZZ"], function(input, array, config) {
config._useUTC = true;
config._tzm = offsetFromString(matchShortOffset, input);
});
var chunkOffset = /([\+\-]|\d\d)/gi;
function offsetFromString(matcher, string) {
var matches = (string || "").match(matcher), chunk, parts, minutes2;
if (matches === null) {
return null;
}
chunk = matches[matches.length - 1] || [];
parts = (chunk + "").match(chunkOffset) || ["-", 0, 0];
minutes2 = +(parts[1] * 60) + toInt(parts[2]);
return minutes2 === 0 ? 0 : parts[0] === "+" ? minutes2 : -minutes2;
}
function cloneWithOffset(input, model) {
var res, diff2;
if (model._isUTC) {
res = model.clone();
diff2 = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();
res._d.setTime(res._d.valueOf() + diff2);
hooks.updateOffset(res, false);
return res;
} else {
return createLocal(input).local();
}
}
function getDateOffset(m) {
return -Math.round(m._d.getTimezoneOffset());
}
hooks.updateOffset = function() {
};
function getSetOffset(input, keepLocalTime, keepMinutes) {
var offset2 = this._offset || 0, localAdjust;
if (!this.isValid()) {
return input != null ? this : NaN;
}
if (input != null) {
if (typeof input === "string") {
input = offsetFromString(matchShortOffset, input);
if (input === null) {
return this;
}
} else if (Math.abs(input) < 16 && !keepMinutes) {
input = input * 60;
}
if (!this._isUTC && keepLocalTime) {
localAdjust = getDateOffset(this);
}
this._offset = input;
this._isUTC = true;
if (localAdjust != null) {
this.add(localAdjust, "m");
}
if (offset2 !== input) {
if (!keepLocalTime || this._changeInProgress) {
addSubtract(
this,
createDuration(input - offset2, "m"),
1,
false
);
} else if (!this._changeInProgress) {
this._changeInProgress = true;
hooks.updateOffset(this, true);
this._changeInProgress = null;
}
}
return this;
} else {
return this._isUTC ? offset2 : getDateOffset(this);
}
}
function getSetZone(input, keepLocalTime) {
if (input != null) {
if (typeof input !== "string") {
input = -input;
}
this.utcOffset(input, keepLocalTime);
return this;
} else {
return -this.utcOffset();
}
}
function setOffsetToUTC(keepLocalTime) {
return this.utcOffset(0, keepLocalTime);
}
function setOffsetToLocal(keepLocalTime) {
if (this._isUTC) {
this.utcOffset(0, keepLocalTime);
this._isUTC = false;
if (keepLocalTime) {
this.subtract(getDateOffset(this), "m");
}
}
return this;
}
function setOffsetToParsedOffset() {
if (this._tzm != null) {
this.utcOffset(this._tzm, false, true);
} else if (typeof this._i === "string") {
var tZone = offsetFromString(matchOffset, this._i);
if (tZone != null) {
this.utcOffset(tZone);
} else {
this.utcOffset(0, true);
}
}
return this;
}
function hasAlignedHourOffset(input) {
if (!this.isValid()) {
return false;
}
input = input ? createLocal(input).utcOffset() : 0;
return (this.utcOffset() - input) % 60 === 0;
}
function isDaylightSavingTime() {
return this.utcOffset() > this.clone().month(0).utcOffset() || this.utcOffset() > this.clone().month(5).utcOffset();
}
function isDaylightSavingTimeShifted() {
if (!isUndefined(this._isDSTShifted)) {
return this._isDSTShifted;
}
var c = {}, other;
copyConfig(c, this);
c = prepareConfig(c);
if (c._a) {
other = c._isUTC ? createUTC(c._a) : createLocal(c._a);
this._isDSTShifted = this.isValid() && compareArrays(c._a, other.toArray()) > 0;
} else {
this._isDSTShifted = false;
}
return this._isDSTShifted;
}
function isLocal() {
return this.isValid() ? !this._isUTC : false;
}
function isUtcOffset() {
return this.isValid() ? this._isUTC : false;
}
function isUtc() {
return this.isValid() ? this._isUTC && this._offset === 0 : false;
}
var aspNetRegex = /^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/, isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;
function createDuration(input, key) {
var duration = input, match = null, sign3, ret, diffRes;
if (isDuration(input)) {
duration = {
ms: input._milliseconds,
d: input._days,
M: input._months
};
} else if (isNumber2(input) || !isNaN(+input)) {
duration = {};
if (key) {
duration[key] = +input;
} else {
duration.milliseconds = +input;
}
} else if (match = aspNetRegex.exec(input)) {
sign3 = match[1] === "-" ? -1 : 1;
duration = {
y: 0,
d: toInt(match[DATE]) * sign3,
h: toInt(match[HOUR]) * sign3,
m: toInt(match[MINUTE]) * sign3,
s: toInt(match[SECOND]) * sign3,
ms: toInt(absRound(match[MILLISECOND] * 1e3)) * sign3
// the millisecond decimal point is included in the match
};
} else if (match = isoRegex.exec(input)) {
sign3 = match[1] === "-" ? -1 : 1;
duration = {
y: parseIso(match[2], sign3),
M: parseIso(match[3], sign3),
w: parseIso(match[4], sign3),
d: parseIso(match[5], sign3),
h: parseIso(match[6], sign3),
m: parseIso(match[7], sign3),
s: parseIso(match[8], sign3)
};
} else if (duration == null) {
duration = {};
} else if (typeof duration === "object" && ("from" in duration || "to" in duration)) {
diffRes = momentsDifference(
createLocal(duration.from),
createLocal(duration.to)
);
duration = {};
duration.ms = diffRes.milliseconds;
duration.M = diffRes.months;
}
ret = new Duration(duration);
if (isDuration(input) && hasOwnProp(input, "_locale")) {
ret._locale = input._locale;
}
if (isDuration(input) && hasOwnProp(input, "_isValid")) {
ret._isValid = input._isValid;
}
return ret;
}
createDuration.fn = Duration.prototype;
createDuration.invalid = createInvalid$1;
function parseIso(inp, sign3) {
var res = inp && parseFloat(inp.replace(",", "."));
return (isNaN(res) ? 0 : res) * sign3;
}
function positiveMomentsDifference(base, other) {
var res = {};
res.months = other.month() - base.month() + (other.year() - base.year()) * 12;
if (base.clone().add(res.months, "M").isAfter(other)) {
--res.months;
}
res.milliseconds = +other - +base.clone().add(res.months, "M");
return res;
}
function momentsDifference(base, other) {
var res;
if (!(base.isValid() && other.isValid())) {
return { milliseconds: 0, months: 0 };
}
other = cloneWithOffset(other, base);
if (base.isBefore(other)) {
res = positiveMomentsDifference(base, other);
} else {
res = positiveMomentsDifference(other, base);
res.milliseconds = -res.milliseconds;
res.months = -res.months;
}
return res;
}
function createAdder(direction, name) {
return function(val, period) {
var dur, tmp;
if (period !== null && !isNaN(+period)) {
deprecateSimple(
name,
"moment()." + name + "(period, number) is deprecated. Please use moment()." + name + "(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."
);
tmp = val;
val = period;
period = tmp;
}
dur = createDuration(val, period);
addSubtract(this, dur, direction);
return this;
};
}
function addSubtract(mom, duration, isAdding, updateOffset) {
var milliseconds2 = duration._milliseconds, days2 = absRound(duration._days), months2 = absRound(duration._months);
if (!mom.isValid()) {
return;
}
updateOffset = updateOffset == null ? true : updateOffset;
if (months2) {
setMonth(mom, get(mom, "Month") + months2 * isAdding);
}
if (days2) {
set$1(mom, "Date", get(mom, "Date") + days2 * isAdding);
}
if (milliseconds2) {
mom._d.setTime(mom._d.valueOf() + milliseconds2 * isAdding);
}
if (updateOffset) {
hooks.updateOffset(mom, days2 || months2);
}
}
var add = createAdder(1, "add"), subtract = createAdder(-1, "subtract");
function isString(input) {
return typeof input === "string" || input instanceof String;
}
function isMomentInput(input) {
return isMoment(input) || isDate(input) || isString(input) || isNumber2(input) || isNumberOrStringArray(input) || isMomentInputObject(input) || input === null || input === void 0;
}
function isMomentInputObject(input) {
var objectTest = isObject2(input) && !isObjectEmpty(input), propertyTest = false, properties = [
"years",
"year",
"y",
"months",
"month",
"M",
"days",
"day",
"d",
"dates",
"date",
"D",
"hours",
"hour",
"h",
"minutes",
"minute",
"m",
"seconds",
"second",
"s",
"milliseconds",
"millisecond",
"ms"
], i, property, propertyLen = properties.length;
for (i = 0; i < propertyLen; i += 1) {
property = properties[i];
propertyTest = propertyTest || hasOwnProp(input, property);
}
return objectTest && propertyTest;
}
function isNumberOrStringArray(input) {
var arrayTest = isArray2(input), dataTypeTest = false;
if (arrayTest) {
dataTypeTest = input.filter(function(item) {
return !isNumber2(item) && isString(input);
}).length === 0;
}
return arrayTest && dataTypeTest;
}
function isCalendarSpec(input) {
var objectTest = isObject2(input) && !isObjectEmpty(input), propertyTest = false, properties = [
"sameDay",
"nextDay",
"lastDay",
"nextWeek",
"lastWeek",
"sameElse"
], i, property;
for (i = 0; i < properties.length; i += 1) {
property = properties[i];
propertyTest = propertyTest || hasOwnProp(input, property);
}
return objectTest && propertyTest;
}
function getCalendarFormat(myMoment, now2) {
var diff2 = myMoment.diff(now2, "days", true);
return diff2 < -6 ? "sameElse" : diff2 < -1 ? "lastWeek" : diff2 < 0 ? "lastDay" : diff2 < 1 ? "sameDay" : diff2 < 2 ? "nextDay" : diff2 < 7 ? "nextWeek" : "sameElse";
}
function calendar$1(time, formats) {
if (arguments.length === 1) {
if (!arguments[0]) {
time = void 0;
formats = void 0;
} else if (isMomentInput(arguments[0])) {
time = arguments[0];
formats = void 0;
} else if (isCalendarSpec(arguments[0])) {
formats = arguments[0];
time = void 0;
}
}
var now2 = time || createLocal(), sod = cloneWithOffset(now2, this).startOf("day"), format2 = hooks.calendarFormat(this, sod) || "sameElse", output = formats && (isFunction2(formats[format2]) ? formats[format2].call(this, now2) : formats[format2]);
return this.format(
output || this.localeData().calendar(format2, this, createLocal(now2))
);
}
function clone3() {
return new Moment(this);
}
function isAfter(input, units) {
var localInput = isMoment(input) ? input : createLocal(input);
if (!(this.isValid() && localInput.isValid())) {
return false;
}
units = normalizeUnits(units) || "millisecond";
if (units === "millisecond") {
return this.valueOf() > localInput.valueOf();
} else {
return localInput.valueOf() < this.clone().startOf(units).valueOf();
}
}
function isBefore(input, units) {
var localInput = isMoment(input) ? input : createLocal(input);
if (!(this.isValid() && localInput.isValid())) {
return false;
}
units = normalizeUnits(units) || "millisecond";
if (units === "millisecond") {
return this.valueOf() < localInput.valueOf();
} else {
return this.clone().endOf(units).valueOf() < localInput.valueOf();
}
}
function isBetween(from3, to3, units, inclusivity) {
var localFrom = isMoment(from3) ? from3 : createLocal(from3), localTo = isMoment(to3) ? to3 : createLocal(to3);
if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {
return false;
}
inclusivity = inclusivity || "()";
return (inclusivity[0] === "(" ? this.isAfter(localFrom, units) : !this.isBefore(localFrom, units)) && (inclusivity[1] === ")" ? this.isBefore(localTo, units) : !this.isAfter(localTo, units));
}
function isSame(input, units) {
var localInput = isMoment(input) ? input : createLocal(input), inputMs;
if (!(this.isValid() && localInput.isValid())) {
return false;
}
units = normalizeUnits(units) || "millisecond";
if (units === "millisecond") {
return this.valueOf() === localInput.valueOf();
} else {
inputMs = localInput.valueOf();
return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();
}
}
function isSameOrAfter(input, units) {
return this.isSame(input, units) || this.isAfter(input, units);
}
function isSameOrBefore(input, units) {
return this.isSame(input, units) || this.isBefore(input, units);
}
function diff(input, units, asFloat) {
var that, zoneDelta, output;
if (!this.isValid()) {
return NaN;
}
that = cloneWithOffset(input, this);
if (!that.isValid()) {
return NaN;
}
zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;
units = normalizeUnits(units);
switch (units) {
case "year":
output = monthDiff(this, that) / 12;
break;
case "month":
output = monthDiff(this, that);
break;
case "quarter":
output = monthDiff(this, that) / 3;
break;
case "second":
output = (this - that) / 1e3;
break;
case "minute":
output = (this - that) / 6e4;
break;
case "hour":
output = (this - that) / 36e5;
break;
case "day":
output = (this - that - zoneDelta) / 864e5;
break;
case "week":
output = (this - that - zoneDelta) / 6048e5;
break;
default:
output = this - that;
}
return asFloat ? output : absFloor(output);
}
function monthDiff(a, b) {
if (a.date() < b.date()) {
return -monthDiff(b, a);
}
var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()), anchor = a.clone().add(wholeMonthDiff, "months"), anchor2, adjust;
if (b - anchor < 0) {
anchor2 = a.clone().add(wholeMonthDiff - 1, "months");
adjust = (b - anchor) / (anchor - anchor2);
} else {
anchor2 = a.clone().add(wholeMonthDiff + 1, "months");
adjust = (b - anchor) / (anchor2 - anchor);
}
return -(wholeMonthDiff + adjust) || 0;
}
hooks.defaultFormat = "YYYY-MM-DDTHH:mm:ssZ";
hooks.defaultFormatUtc = "YYYY-MM-DDTHH:mm:ss[Z]";
function toString() {
return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ");
}
function toISOString(keepOffset) {
if (!this.isValid()) {
return null;
}
var utc = keepOffset !== true, m = utc ? this.clone().utc() : this;
if (m.year() < 0 || m.year() > 9999) {
return formatMoment(
m,
utc ? "YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]" : "YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"
);
}
if (isFunction2(Date.prototype.toISOString)) {
if (utc) {
return this.toDate().toISOString();
} else {
return new Date(this.valueOf() + this.utcOffset() * 60 * 1e3).toISOString().replace("Z", formatMoment(m, "Z"));
}
}
return formatMoment(
m,
utc ? "YYYY-MM-DD[T]HH:mm:ss.SSS[Z]" : "YYYY-MM-DD[T]HH:mm:ss.SSSZ"
);
}
function inspect() {
if (!this.isValid()) {
return "moment.invalid(/* " + this._i + " */)";
}
var func = "moment", zone = "", prefix, year, datetime, suffix;
if (!this.isLocal()) {
func = this.utcOffset() === 0 ? "moment.utc" : "moment.parseZone";
zone = "Z";
}
prefix = "[" + func + '("]';
year = 0 <= this.year() && this.year() <= 9999 ? "YYYY" : "YYYYYY";
datetime = "-MM-DD[T]HH:mm:ss.SSS";
suffix = zone + '[")]';
return this.format(prefix + year + datetime + suffix);
}
function format(inputString) {
if (!inputString) {
inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;
}
var output = formatMoment(this, inputString);
return this.localeData().postformat(output);
}
function from2(time, withoutSuffix) {
if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {
return createDuration({ to: this, from: time }).locale(this.locale()).humanize(!withoutSuffix);
} else {
return this.localeData().invalidDate();
}
}
function fromNow(withoutSuffix) {
return this.from(createLocal(), withoutSuffix);
}
function to2(time, withoutSuffix) {
if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {
return createDuration({ from: this, to: time }).locale(this.locale()).humanize(!withoutSuffix);
} else {
return this.localeData().invalidDate();
}
}
function toNow(withoutSuffix) {
return this.to(createLocal(), withoutSuffix);
}
function locale2(key) {
var newLocaleData;
if (key === void 0) {
return this._locale._abbr;
} else {
newLocaleData = getLocale(key);
if (newLocaleData != null) {
this._locale = newLocaleData;
}
return this;
}
}
var lang = deprecate(
"moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",
function(key) {
if (key === void 0) {
return this.localeData();
} else {
return this.locale(key);
}
}
);
function localeData() {
return this._locale;
}
var MS_PER_SECOND = 1e3, MS_PER_MINUTE = 60 * MS_PER_SECOND, MS_PER_HOUR = 60 * MS_PER_MINUTE, MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;
function mod$1(dividend, divisor) {
return (dividend % divisor + divisor) % divisor;
}
function localStartOfDate(y, m, d) {
if (y < 100 && y >= 0) {
return new Date(y + 400, m, d) - MS_PER_400_YEARS;
} else {
return new Date(y, m, d).valueOf();
}
}
function utcStartOfDate(y, m, d) {
if (y < 100 && y >= 0) {
return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;
} else {
return Date.UTC(y, m, d);
}
}
function startOf(units) {
var time, startOfDate;
units = normalizeUnits(units);
if (units === void 0 || units === "millisecond" || !this.isValid()) {
return this;
}
startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
switch (units) {
case "year":
time = startOfDate(this.year(), 0, 1);
break;
case "quarter":
time = startOfDate(
this.year(),
this.month() - this.month() % 3,
1
);
break;
case "month":
time = startOfDate(this.year(), this.month(), 1);
break;
case "week":
time = startOfDate(
this.year(),
this.month(),
this.date() - this.weekday()
);
break;
case "isoWeek":
time = startOfDate(
this.year(),
this.month(),
this.date() - (this.isoWeekday() - 1)
);
break;
case "day":
case "date":
time = startOfDate(this.year(), this.month(), this.date());
break;
case "hour":
time = this._d.valueOf();
time -= mod$1(
time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
MS_PER_HOUR
);
break;
case "minute":
time = this._d.valueOf();
time -= mod$1(time, MS_PER_MINUTE);
break;
case "second":
time = this._d.valueOf();
time -= mod$1(time, MS_PER_SECOND);
break;
}
this._d.setTime(time);
hooks.updateOffset(this, true);
return this;
}
function endOf(units) {
var time, startOfDate;
units = normalizeUnits(units);
if (units === void 0 || units === "millisecond" || !this.isValid()) {
return this;
}
startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
switch (units) {
case "year":
time = startOfDate(this.year() + 1, 0, 1) - 1;
break;
case "quarter":
time = startOfDate(
this.year(),
this.month() - this.month() % 3 + 3,
1
) - 1;
break;
case "month":
time = startOfDate(this.year(), this.month() + 1, 1) - 1;
break;
case "week":
time = startOfDate(
this.year(),
this.month(),
this.date() - this.weekday() + 7
) - 1;
break;
case "isoWeek":
time = startOfDate(
this.year(),
this.month(),
this.date() - (this.isoWeekday() - 1) + 7
) - 1;
break;
case "day":
case "date":
time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;
break;
case "hour":
time = this._d.valueOf();
time += MS_PER_HOUR - mod$1(
time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
MS_PER_HOUR
) - 1;
break;
case "minute":
time = this._d.valueOf();
time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;
break;
case "second":
time = this._d.valueOf();
time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;
break;
}
this._d.setTime(time);
hooks.updateOffset(this, true);
return this;
}
function valueOf() {
return this._d.valueOf() - (this._offset || 0) * 6e4;
}
function unix() {
return Math.floor(this.valueOf() / 1e3);
}
function toDate() {
return new Date(this.valueOf());
}
function toArray() {
var m = this;
return [
m.year(),
m.month(),
m.date(),
m.hour(),
m.minute(),
m.second(),
m.millisecond()
];
}
function toObject() {
var m = this;
return {
years: m.year(),
months: m.month(),
date: m.date(),
hours: m.hours(),
minutes: m.minutes(),
seconds: m.seconds(),
milliseconds: m.milliseconds()
};
}
function toJSON() {
return this.isValid() ? this.toISOString() : null;
}
function isValid$2() {
return isValid(this);
}
function parsingFlags() {
return extend({}, getParsingFlags(this));
}
function invalidAt() {
return getParsingFlags(this).overflow;
}
function creationData() {
return {
input: this._i,
format: this._f,
locale: this._locale,
isUTC: this._isUTC,
strict: this._strict
};
}
addFormatToken("N", 0, 0, "eraAbbr");
addFormatToken("NN", 0, 0, "eraAbbr");
addFormatToken("NNN", 0, 0, "eraAbbr");
addFormatToken("NNNN", 0, 0, "eraName");
addFormatToken("NNNNN", 0, 0, "eraNarrow");
addFormatToken("y", ["y", 1], "yo", "eraYear");
addFormatToken("y", ["yy", 2], 0, "eraYear");
addFormatToken("y", ["yyy", 3], 0, "eraYear");
addFormatToken("y", ["yyyy", 4], 0, "eraYear");
addRegexToken("N", matchEraAbbr);
addRegexToken("NN", matchEraAbbr);
addRegexToken("NNN", matchEraAbbr);
addRegexToken("NNNN", matchEraName);
addRegexToken("NNNNN", matchEraNarrow);
addParseToken(
["N", "NN", "NNN", "NNNN", "NNNNN"],
function(input, array, config, token2) {
var era = config._locale.erasParse(input, token2, config._strict);
if (era) {
getParsingFlags(config).era = era;
} else {
getParsingFlags(config).invalidEra = input;
}
}
);
addRegexToken("y", matchUnsigned);
addRegexToken("yy", matchUnsigned);
addRegexToken("yyy", matchUnsigned);
addRegexToken("yyyy", matchUnsigned);
addRegexToken("yo", matchEraYearOrdinal);
addParseToken(["y", "yy", "yyy", "yyyy"], YEAR);
addParseToken(["yo"], function(input, array, config, token2) {
var match;
if (config._locale._eraYearOrdinalRegex) {
match = input.match(config._locale._eraYearOrdinalRegex);
}
if (config._locale.eraYearOrdinalParse) {
array[YEAR] = config._locale.eraYearOrdinalParse(input, match);
} else {
array[YEAR] = parseInt(input, 10);
}
});
function localeEras(m, format2) {
var i, l, date, eras = this._eras || getLocale("en")._eras;
for (i = 0, l = eras.length; i < l; ++i) {
switch (typeof eras[i].since) {
case "string":
date = hooks(eras[i].since).startOf("day");
eras[i].since = date.valueOf();
break;
}
switch (typeof eras[i].until) {
case "undefined":
eras[i].until = Infinity;
break;
case "string":
date = hooks(eras[i].until).startOf("day").valueOf();
eras[i].until = date.valueOf();
break;
}
}
return eras;
}
function localeErasParse(eraName, format2, strict) {
var i, l, eras = this.eras(), name, abbr, narrow;
eraName = eraName.toUpperCase();
for (i = 0, l = eras.length; i < l; ++i) {
name = eras[i].name.toUpperCase();
abbr = eras[i].abbr.toUpperCase();
narrow = eras[i].narrow.toUpperCase();
if (strict) {
switch (format2) {
case "N":
case "NN":
case "NNN":
if (abbr === eraName) {
return eras[i];
}
break;
case "NNNN":
if (name === eraName) {
return eras[i];
}
break;
case "NNNNN":
if (narrow === eraName) {
return eras[i];
}
break;
}
} else if ([name, abbr, narrow].indexOf(eraName) >= 0) {
return eras[i];
}
}
}
function localeErasConvertYear(era, year) {
var dir = era.since <= era.until ? 1 : -1;
if (year === void 0) {
return hooks(era.since).year();
} else {
return hooks(era.since).year() + (year - era.offset) * dir;
}
}
function getEraName() {
var i, l, val, eras = this.localeData().eras();
for (i = 0, l = eras.length; i < l; ++i) {
val = this.clone().startOf("day").valueOf();
if (eras[i].since <= val && val <= eras[i].until) {
return eras[i].name;
}
if (eras[i].until <= val && val <= eras[i].since) {
return eras[i].name;
}
}
return "";
}
function getEraNarrow() {
var i, l, val, eras = this.localeData().eras();
for (i = 0, l = eras.length; i < l; ++i) {
val = this.clone().startOf("day").valueOf();
if (eras[i].since <= val && val <= eras[i].until) {
return eras[i].narrow;
}
if (eras[i].until <= val && val <= eras[i].since) {
return eras[i].narrow;
}
}
return "";
}
function getEraAbbr() {
var i, l, val, eras = this.localeData().eras();
for (i = 0, l = eras.length; i < l; ++i) {
val = this.clone().startOf("day").valueOf();
if (eras[i].since <= val && val <= eras[i].until) {
return eras[i].abbr;
}
if (eras[i].until <= val && val <= eras[i].since) {
return eras[i].abbr;
}
}
return "";
}
function getEraYear() {
var i, l, dir, val, eras = this.localeData().eras();
for (i = 0, l = eras.length; i < l; ++i) {
dir = eras[i].since <= eras[i].until ? 1 : -1;
val = this.clone().startOf("day").valueOf();
if (eras[i].since <= val && val <= eras[i].until || eras[i].until <= val && val <= eras[i].since) {
return (this.year() - hooks(eras[i].since).year()) * dir + eras[i].offset;
}
}
return this.year();
}
function erasNameRegex(isStrict) {
if (!hasOwnProp(this, "_erasNameRegex")) {
computeErasParse.call(this);
}
return isStrict ? this._erasNameRegex : this._erasRegex;
}
function erasAbbrRegex(isStrict) {
if (!hasOwnProp(this, "_erasAbbrRegex")) {
computeErasParse.call(this);
}
return isStrict ? this._erasAbbrRegex : this._erasRegex;
}
function erasNarrowRegex(isStrict) {
if (!hasOwnProp(this, "_erasNarrowRegex")) {
computeErasParse.call(this);
}
return isStrict ? this._erasNarrowRegex : this._erasRegex;
}
function matchEraAbbr(isStrict, locale3) {
return locale3.erasAbbrRegex(isStrict);
}
function matchEraName(isStrict, locale3) {
return locale3.erasNameRegex(isStrict);
}
function matchEraNarrow(isStrict, locale3) {
return locale3.erasNarrowRegex(isStrict);
}
function matchEraYearOrdinal(isStrict, locale3) {
return locale3._eraYearOrdinalRegex || matchUnsigned;
}
function computeErasParse() {
var abbrPieces = [], namePieces = [], narrowPieces = [], mixedPieces = [], i, l, eras = this.eras();
for (i = 0, l = eras.length; i < l; ++i) {
namePieces.push(regexEscape(eras[i].name));
abbrPieces.push(regexEscape(eras[i].abbr));
narrowPieces.push(regexEscape(eras[i].narrow));
mixedPieces.push(regexEscape(eras[i].name));
mixedPieces.push(regexEscape(eras[i].abbr));
mixedPieces.push(regexEscape(eras[i].narrow));
}
this._erasRegex = new RegExp("^(" + mixedPieces.join("|") + ")", "i");
this._erasNameRegex = new RegExp("^(" + namePieces.join("|") + ")", "i");
this._erasAbbrRegex = new RegExp("^(" + abbrPieces.join("|") + ")", "i");
this._erasNarrowRegex = new RegExp(
"^(" + narrowPieces.join("|") + ")",
"i"
);
}
addFormatToken(0, ["gg", 2], 0, function() {
return this.weekYear() % 100;
});
addFormatToken(0, ["GG", 2], 0, function() {
return this.isoWeekYear() % 100;
});
function addWeekYearFormatToken(token2, getter) {
addFormatToken(0, [token2, token2.length], 0, getter);
}
addWeekYearFormatToken("gggg", "weekYear");
addWeekYearFormatToken("ggggg", "weekYear");
addWeekYearFormatToken("GGGG", "isoWeekYear");
addWeekYearFormatToken("GGGGG", "isoWeekYear");
addUnitAlias("weekYear", "gg");
addUnitAlias("isoWeekYear", "GG");
addUnitPriority("weekYear", 1);
addUnitPriority("isoWeekYear", 1);
addRegexToken("G", matchSigned);
addRegexToken("g", matchSigned);
addRegexToken("GG", match1to2, match2);
addRegexToken("gg", match1to2, match2);
addRegexToken("GGGG", match1to4, match4);
addRegexToken("gggg", match1to4, match4);
addRegexToken("GGGGG", match1to6, match6);
addRegexToken("ggggg", match1to6, match6);
addWeekParseToken(
["gggg", "ggggg", "GGGG", "GGGGG"],
function(input, week, config, token2) {
week[token2.substr(0, 2)] = toInt(input);
}
);
addWeekParseToken(["gg", "GG"], function(input, week, config, token2) {
week[token2] = hooks.parseTwoDigitYear(input);
});
function getSetWeekYear(input) {
return getSetWeekYearHelper.call(
this,
input,
this.week(),
this.weekday(),
this.localeData()._week.dow,
this.localeData()._week.doy
);
}
function getSetISOWeekYear(input) {
return getSetWeekYearHelper.call(
this,
input,
this.isoWeek(),
this.isoWeekday(),
1,
4
);
}
function getISOWeeksInYear() {
return weeksInYear(this.year(), 1, 4);
}
function getISOWeeksInISOWeekYear() {
return weeksInYear(this.isoWeekYear(), 1, 4);
}
function getWeeksInYear() {
var weekInfo = this.localeData()._week;
return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
}
function getWeeksInWeekYear() {
var weekInfo = this.localeData()._week;
return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);
}
function getSetWeekYearHelper(input, week, weekday, dow, doy) {
var weeksTarget;
if (input == null) {
return weekOfYear(this, dow, doy).year;
} else {
weeksTarget = weeksInYear(input, dow, doy);
if (week > weeksTarget) {
week = weeksTarget;
}
return setWeekAll.call(this, input, week, weekday, dow, doy);
}
}
function setWeekAll(weekYear, week, weekday, dow, doy) {
var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy), date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);
this.year(date.getUTCFullYear());
this.month(date.getUTCMonth());
this.date(date.getUTCDate());
return this;
}
addFormatToken("Q", 0, "Qo", "quarter");
addUnitAlias("quarter", "Q");
addUnitPriority("quarter", 7);
addRegexToken("Q", match1);
addParseToken("Q", function(input, array) {
array[MONTH] = (toInt(input) - 1) * 3;
});
function getSetQuarter(input) {
return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);
}
addFormatToken("D", ["DD", 2], "Do", "date");
addUnitAlias("date", "D");
addUnitPriority("date", 9);
addRegexToken("D", match1to2);
addRegexToken("DD", match1to2, match2);
addRegexToken("Do", function(isStrict, locale3) {
return isStrict ? locale3._dayOfMonthOrdinalParse || locale3._ordinalParse : locale3._dayOfMonthOrdinalParseLenient;
});
addParseToken(["D", "DD"], DATE);
addParseToken("Do", function(input, array) {
array[DATE] = toInt(input.match(match1to2)[0]);
});
var getSetDayOfMonth = makeGetSet("Date", true);
addFormatToken("DDD", ["DDDD", 3], "DDDo", "dayOfYear");
addUnitAlias("dayOfYear", "DDD");
addUnitPriority("dayOfYear", 4);
addRegexToken("DDD", match1to3);
addRegexToken("DDDD", match3);
addParseToken(["DDD", "DDDD"], function(input, array, config) {
config._dayOfYear = toInt(input);
});
function getSetDayOfYear(input) {
var dayOfYear = Math.round(
(this.clone().startOf("day") - this.clone().startOf("year")) / 864e5
) + 1;
return input == null ? dayOfYear : this.add(input - dayOfYear, "d");
}
addFormatToken("m", ["mm", 2], 0, "minute");
addUnitAlias("minute", "m");
addUnitPriority("minute", 14);
addRegexToken("m", match1to2);
addRegexToken("mm", match1to2, match2);
addParseToken(["m", "mm"], MINUTE);
var getSetMinute = makeGetSet("Minutes", false);
addFormatToken("s", ["ss", 2], 0, "second");
addUnitAlias("second", "s");
addUnitPriority("second", 15);
addRegexToken("s", match1to2);
addRegexToken("ss", match1to2, match2);
addParseToken(["s", "ss"], SECOND);
var getSetSecond = makeGetSet("Seconds", false);
addFormatToken("S", 0, 0, function() {
return ~~(this.millisecond() / 100);
});
addFormatToken(0, ["SS", 2], 0, function() {
return ~~(this.millisecond() / 10);
});
addFormatToken(0, ["SSS", 3], 0, "millisecond");
addFormatToken(0, ["SSSS", 4], 0, function() {
return this.millisecond() * 10;
});
addFormatToken(0, ["SSSSS", 5], 0, function() {
return this.millisecond() * 100;
});
addFormatToken(0, ["SSSSSS", 6], 0, function() {
return this.millisecond() * 1e3;
});
addFormatToken(0, ["SSSSSSS", 7], 0, function() {
return this.millisecond() * 1e4;
});
addFormatToken(0, ["SSSSSSSS", 8], 0, function() {
return this.millisecond() * 1e5;
});
addFormatToken(0, ["SSSSSSSSS", 9], 0, function() {
return this.millisecond() * 1e6;
});
addUnitAlias("millisecond", "ms");
addUnitPriority("millisecond", 16);
addRegexToken("S", match1to3, match1);
addRegexToken("SS", match1to3, match2);
addRegexToken("SSS", match1to3, match3);
var token, getSetMillisecond;
for (token = "SSSS"; token.length <= 9; token += "S") {
addRegexToken(token, matchUnsigned);
}
function parseMs(input, array) {
array[MILLISECOND] = toInt(("0." + input) * 1e3);
}
for (token = "S"; token.length <= 9; token += "S") {
addParseToken(token, parseMs);
}
getSetMillisecond = makeGetSet("Milliseconds", false);
addFormatToken("z", 0, 0, "zoneAbbr");
addFormatToken("zz", 0, 0, "zoneName");
function getZoneAbbr() {
return this._isUTC ? "UTC" : "";
}
function getZoneName() {
return this._isUTC ? "Coordinated Universal Time" : "";
}
var proto = Moment.prototype;
proto.add = add;
proto.calendar = calendar$1;
proto.clone = clone3;
proto.diff = diff;
proto.endOf = endOf;
proto.format = format;
proto.from = from2;
proto.fromNow = fromNow;
proto.to = to2;
proto.toNow = toNow;
proto.get = stringGet;
proto.invalidAt = invalidAt;
proto.isAfter = isAfter;
proto.isBefore = isBefore;
proto.isBetween = isBetween;
proto.isSame = isSame;
proto.isSameOrAfter = isSameOrAfter;
proto.isSameOrBefore = isSameOrBefore;
proto.isValid = isValid$2;
proto.lang = lang;
proto.locale = locale2;
proto.localeData = localeData;
proto.max = prototypeMax;
proto.min = prototypeMin;
proto.parsingFlags = parsingFlags;
proto.set = stringSet;
proto.startOf = startOf;
proto.subtract = subtract;
proto.toArray = toArray;
proto.toObject = toObject;
proto.toDate = toDate;
proto.toISOString = toISOString;
proto.inspect = inspect;
if (typeof Symbol !== "undefined" && Symbol.for != null) {
proto[Symbol.for("nodejs.util.inspect.custom")] = function() {
return "Moment<" + this.format() + ">";
};
}
proto.toJSON = toJSON;
proto.toString = toString;
proto.unix = unix;
proto.valueOf = valueOf;
proto.creationData = creationData;
proto.eraName = getEraName;
proto.eraNarrow = getEraNarrow;
proto.eraAbbr = getEraAbbr;
proto.eraYear = getEraYear;
proto.year = getSetYear;
proto.isLeapYear = getIsLeapYear;
proto.weekYear = getSetWeekYear;
proto.isoWeekYear = getSetISOWeekYear;
proto.quarter = proto.quarters = getSetQuarter;
proto.month = getSetMonth;
proto.daysInMonth = getDaysInMonth;
proto.week = proto.weeks = getSetWeek;
proto.isoWeek = proto.isoWeeks = getSetISOWeek;
proto.weeksInYear = getWeeksInYear;
proto.weeksInWeekYear = getWeeksInWeekYear;
proto.isoWeeksInYear = getISOWeeksInYear;
proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;
proto.date = getSetDayOfMonth;
proto.day = proto.days = getSetDayOfWeek;
proto.weekday = getSetLocaleDayOfWeek;
proto.isoWeekday = getSetISODayOfWeek;
proto.dayOfYear = getSetDayOfYear;
proto.hour = proto.hours = getSetHour;
proto.minute = proto.minutes = getSetMinute;
proto.second = proto.seconds = getSetSecond;
proto.millisecond = proto.milliseconds = getSetMillisecond;
proto.utcOffset = getSetOffset;
proto.utc = setOffsetToUTC;
proto.local = setOffsetToLocal;
proto.parseZone = setOffsetToParsedOffset;
proto.hasAlignedHourOffset = hasAlignedHourOffset;
proto.isDST = isDaylightSavingTime;
proto.isLocal = isLocal;
proto.isUtcOffset = isUtcOffset;
proto.isUtc = isUtc;
proto.isUTC = isUtc;
proto.zoneAbbr = getZoneAbbr;
proto.zoneName = getZoneName;
proto.dates = deprecate(
"dates accessor is deprecated. Use date instead.",
getSetDayOfMonth
);
proto.months = deprecate(
"months accessor is deprecated. Use month instead",
getSetMonth
);
proto.years = deprecate(
"years accessor is deprecated. Use year instead",
getSetYear
);
proto.zone = deprecate(
"moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",
getSetZone
);
proto.isDSTShifted = deprecate(
"isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",
isDaylightSavingTimeShifted
);
function createUnix(input) {
return createLocal(input * 1e3);
}
function createInZone() {
return createLocal.apply(null, arguments).parseZone();
}
function preParsePostFormat(string) {
return string;
}
var proto$1 = Locale.prototype;
proto$1.calendar = calendar;
proto$1.longDateFormat = longDateFormat;
proto$1.invalidDate = invalidDate;
proto$1.ordinal = ordinal;
proto$1.preparse = preParsePostFormat;
proto$1.postformat = preParsePostFormat;
proto$1.relativeTime = relativeTime;
proto$1.pastFuture = pastFuture;
proto$1.set = set2;
proto$1.eras = localeEras;
proto$1.erasParse = localeErasParse;
proto$1.erasConvertYear = localeErasConvertYear;
proto$1.erasAbbrRegex = erasAbbrRegex;
proto$1.erasNameRegex = erasNameRegex;
proto$1.erasNarrowRegex = erasNarrowRegex;
proto$1.months = localeMonths;
proto$1.monthsShort = localeMonthsShort;
proto$1.monthsParse = localeMonthsParse;
proto$1.monthsRegex = monthsRegex;
proto$1.monthsShortRegex = monthsShortRegex;
proto$1.week = localeWeek;
proto$1.firstDayOfYear = localeFirstDayOfYear;
proto$1.firstDayOfWeek = localeFirstDayOfWeek;
proto$1.weekdays = localeWeekdays;
proto$1.weekdaysMin = localeWeekdaysMin;
proto$1.weekdaysShort = localeWeekdaysShort;
proto$1.weekdaysParse = localeWeekdaysParse;
proto$1.weekdaysRegex = weekdaysRegex;
proto$1.weekdaysShortRegex = weekdaysShortRegex;
proto$1.weekdaysMinRegex = weekdaysMinRegex;
proto$1.isPM = localeIsPM;
proto$1.meridiem = localeMeridiem;
function get$1(format2, index, field, setter) {
var locale3 = getLocale(), utc = createUTC().set(setter, index);
return locale3[field](utc, format2);
}
function listMonthsImpl(format2, index, field) {
if (isNumber2(format2)) {
index = format2;
format2 = void 0;
}
format2 = format2 || "";
if (index != null) {
return get$1(format2, index, field, "month");
}
var i, out = [];
for (i = 0; i < 12; i++) {
out[i] = get$1(format2, i, field, "month");
}
return out;
}
function listWeekdaysImpl(localeSorted, format2, index, field) {
if (typeof localeSorted === "boolean") {
if (isNumber2(format2)) {
index = format2;
format2 = void 0;
}
format2 = format2 || "";
} else {
format2 = localeSorted;
index = format2;
localeSorted = false;
if (isNumber2(format2)) {
index = format2;
format2 = void 0;
}
format2 = format2 || "";
}
var locale3 = getLocale(), shift = localeSorted ? locale3._week.dow : 0, i, out = [];
if (index != null) {
return get$1(format2, (index + shift) % 7, field, "day");
}
for (i = 0; i < 7; i++) {
out[i] = get$1(format2, (i + shift) % 7, field, "day");
}
return out;
}
function listMonths(format2, index) {
return listMonthsImpl(format2, index, "months");
}
function listMonthsShort(format2, index) {
return listMonthsImpl(format2, index, "monthsShort");
}
function listWeekdays(localeSorted, format2, index) {
return listWeekdaysImpl(localeSorted, format2, index, "weekdays");
}
function listWeekdaysShort(localeSorted, format2, index) {
return listWeekdaysImpl(localeSorted, format2, index, "weekdaysShort");
}
function listWeekdaysMin(localeSorted, format2, index) {
return listWeekdaysImpl(localeSorted, format2, index, "weekdaysMin");
}
getSetGlobalLocale("en", {
eras: [
{
since: "0001-01-01",
until: Infinity,
offset: 1,
name: "Anno Domini",
narrow: "AD",
abbr: "AD"
},
{
since: "0000-12-31",
until: -Infinity,
offset: 1,
name: "Before Christ",
narrow: "BC",
abbr: "BC"
}
],
dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
ordinal: function(number) {
var b = number % 10, output = toInt(number % 100 / 10) === 1 ? "th" : b === 1 ? "st" : b === 2 ? "nd" : b === 3 ? "rd" : "th";
return number + output;
}
});
hooks.lang = deprecate(
"moment.lang is deprecated. Use moment.locale instead.",
getSetGlobalLocale
);
hooks.langData = deprecate(
"moment.langData is deprecated. Use moment.localeData instead.",
getLocale
);
var mathAbs = Math.abs;
function abs() {
var data = this._data;
this._milliseconds = mathAbs(this._milliseconds);
this._days = mathAbs(this._days);
this._months = mathAbs(this._months);
data.milliseconds = mathAbs(data.milliseconds);
data.seconds = mathAbs(data.seconds);
data.minutes = mathAbs(data.minutes);
data.hours = mathAbs(data.hours);
data.months = mathAbs(data.months);
data.years = mathAbs(data.years);
return this;
}
function addSubtract$1(duration, input, value, direction) {
var other = createDuration(input, value);
duration._milliseconds += direction * other._milliseconds;
duration._days += direction * other._days;
duration._months += direction * other._months;
return duration._bubble();
}
function add$1(input, value) {
return addSubtract$1(this, input, value, 1);
}
function subtract$1(input, value) {
return addSubtract$1(this, input, value, -1);
}
function absCeil(number) {
if (number < 0) {
return Math.floor(number);
} else {
return Math.ceil(number);
}
}
function bubble() {
var milliseconds2 = this._milliseconds, days2 = this._days, months2 = this._months, data = this._data, seconds2, minutes2, hours2, years2, monthsFromDays;
if (!(milliseconds2 >= 0 && days2 >= 0 && months2 >= 0 || milliseconds2 <= 0 && days2 <= 0 && months2 <= 0)) {
milliseconds2 += absCeil(monthsToDays(months2) + days2) * 864e5;
days2 = 0;
months2 = 0;
}
data.milliseconds = milliseconds2 % 1e3;
seconds2 = absFloor(milliseconds2 / 1e3);
data.seconds = seconds2 % 60;
minutes2 = absFloor(seconds2 / 60);
data.minutes = minutes2 % 60;
hours2 = absFloor(minutes2 / 60);
data.hours = hours2 % 24;
days2 += absFloor(hours2 / 24);
monthsFromDays = absFloor(daysToMonths(days2));
months2 += monthsFromDays;
days2 -= absCeil(monthsToDays(monthsFromDays));
years2 = absFloor(months2 / 12);
months2 %= 12;
data.days = days2;
data.months = months2;
data.years = years2;
return this;
}
function daysToMonths(days2) {
return days2 * 4800 / 146097;
}
function monthsToDays(months2) {
return months2 * 146097 / 4800;
}
function as(units) {
if (!this.isValid()) {
return NaN;
}
var days2, months2, milliseconds2 = this._milliseconds;
units = normalizeUnits(units);
if (units === "month" || units === "quarter" || units === "year") {
days2 = this._days + milliseconds2 / 864e5;
months2 = this._months + daysToMonths(days2);
switch (units) {
case "month":
return months2;
case "quarter":
return months2 / 3;
case "year":
return months2 / 12;
}
} else {
days2 = this._days + Math.round(monthsToDays(this._months));
switch (units) {
case "week":
return days2 / 7 + milliseconds2 / 6048e5;
case "day":
return days2 + milliseconds2 / 864e5;
case "hour":
return days2 * 24 + milliseconds2 / 36e5;
case "minute":
return days2 * 1440 + milliseconds2 / 6e4;
case "second":
return days2 * 86400 + milliseconds2 / 1e3;
case "millisecond":
return Math.floor(days2 * 864e5) + milliseconds2;
default:
throw new Error("Unknown unit " + units);
}
}
}
function valueOf$1() {
if (!this.isValid()) {
return NaN;
}
return this._milliseconds + this._days * 864e5 + this._months % 12 * 2592e6 + toInt(this._months / 12) * 31536e6;
}
function makeAs(alias) {
return function() {
return this.as(alias);
};
}
var asMilliseconds = makeAs("ms"), asSeconds = makeAs("s"), asMinutes = makeAs("m"), asHours = makeAs("h"), asDays = makeAs("d"), asWeeks = makeAs("w"), asMonths = makeAs("M"), asQuarters = makeAs("Q"), asYears = makeAs("y");
function clone$1() {
return createDuration(this);
}
function get$2(units) {
units = normalizeUnits(units);
return this.isValid() ? this[units + "s"]() : NaN;
}
function makeGetter(name) {
return function() {
return this.isValid() ? this._data[name] : NaN;
};
}
var milliseconds = makeGetter("milliseconds"), seconds = makeGetter("seconds"), minutes = makeGetter("minutes"), hours = makeGetter("hours"), days = makeGetter("days"), months = makeGetter("months"), years = makeGetter("years");
function weeks() {
return absFloor(this.days() / 7);
}
var round2 = Math.round, thresholds = {
ss: 44,
// a few seconds to seconds
s: 45,
// seconds to minute
m: 45,
// minutes to hour
h: 22,
// hours to day
d: 26,
// days to month/week
w: null,
// weeks to month
M: 11
// months to year
};
function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale3) {
return locale3.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
}
function relativeTime$1(posNegDuration, withoutSuffix, thresholds2, locale3) {
var duration = createDuration(posNegDuration).abs(), seconds2 = round2(duration.as("s")), minutes2 = round2(duration.as("m")), hours2 = round2(duration.as("h")), days2 = round2(duration.as("d")), months2 = round2(duration.as("M")), weeks2 = round2(duration.as("w")), years2 = round2(duration.as("y")), a = seconds2 <= thresholds2.ss && ["s", seconds2] || seconds2 < thresholds2.s && ["ss", seconds2] || minutes2 <= 1 && ["m"] || minutes2 < thresholds2.m && ["mm", minutes2] || hours2 <= 1 && ["h"] || hours2 < thresholds2.h && ["hh", hours2] || days2 <= 1 && ["d"] || days2 < thresholds2.d && ["dd", days2];
if (thresholds2.w != null) {
a = a || weeks2 <= 1 && ["w"] || weeks2 < thresholds2.w && ["ww", weeks2];
}
a = a || months2 <= 1 && ["M"] || months2 < thresholds2.M && ["MM", months2] || years2 <= 1 && ["y"] || ["yy", years2];
a[2] = withoutSuffix;
a[3] = +posNegDuration > 0;
a[4] = locale3;
return substituteTimeAgo.apply(null, a);
}
function getSetRelativeTimeRounding(roundingFunction) {
if (roundingFunction === void 0) {
return round2;
}
if (typeof roundingFunction === "function") {
round2 = roundingFunction;
return true;
}
return false;
}
function getSetRelativeTimeThreshold(threshold, limit) {
if (thresholds[threshold] === void 0) {
return false;
}
if (limit === void 0) {
return thresholds[threshold];
}
thresholds[threshold] = limit;
if (threshold === "s") {
thresholds.ss = limit - 1;
}
return true;
}
function humanize(argWithSuffix, argThresholds) {
if (!this.isValid()) {
return this.localeData().invalidDate();
}
var withSuffix = false, th = thresholds, locale3, output;
if (typeof argWithSuffix === "object") {
argThresholds = argWithSuffix;
argWithSuffix = false;
}
if (typeof argWithSuffix === "boolean") {
withSuffix = argWithSuffix;
}
if (typeof argThresholds === "object") {
th = Object.assign({}, thresholds, argThresholds);
if (argThresholds.s != null && argThresholds.ss == null) {
th.ss = argThresholds.s - 1;
}
}
locale3 = this.localeData();
output = relativeTime$1(this, !withSuffix, th, locale3);
if (withSuffix) {
output = locale3.pastFuture(+this, output);
}
return locale3.postformat(output);
}
var abs$1 = Math.abs;
function sign2(x) {
return (x > 0) - (x < 0) || +x;
}
function toISOString$1() {
if (!this.isValid()) {
return this.localeData().invalidDate();
}
var seconds2 = abs$1(this._milliseconds) / 1e3, days2 = abs$1(this._days), months2 = abs$1(this._months), minutes2, hours2, years2, s, total = this.asSeconds(), totalSign, ymSign, daysSign, hmsSign;
if (!total) {
return "P0D";
}
minutes2 = absFloor(seconds2 / 60);
hours2 = absFloor(minutes2 / 60);
seconds2 %= 60;
minutes2 %= 60;
years2 = absFloor(months2 / 12);
months2 %= 12;
s = seconds2 ? seconds2.toFixed(3).replace(/\.?0+$/, "") : "";
totalSign = total < 0 ? "-" : "";
ymSign = sign2(this._months) !== sign2(total) ? "-" : "";
daysSign = sign2(this._days) !== sign2(total) ? "-" : "";
hmsSign = sign2(this._milliseconds) !== sign2(total) ? "-" : "";
return totalSign + "P" + (years2 ? ymSign + years2 + "Y" : "") + (months2 ? ymSign + months2 + "M" : "") + (days2 ? daysSign + days2 + "D" : "") + (hours2 || minutes2 || seconds2 ? "T" : "") + (hours2 ? hmsSign + hours2 + "H" : "") + (minutes2 ? hmsSign + minutes2 + "M" : "") + (seconds2 ? hmsSign + s + "S" : "");
}
var proto$2 = Duration.prototype;
proto$2.isValid = isValid$1;
proto$2.abs = abs;
proto$2.add = add$1;
proto$2.subtract = subtract$1;
proto$2.as = as;
proto$2.asMilliseconds = asMilliseconds;
proto$2.asSeconds = asSeconds;
proto$2.asMinutes = asMinutes;
proto$2.asHours = asHours;
proto$2.asDays = asDays;
proto$2.asWeeks = asWeeks;
proto$2.asMonths = asMonths;
proto$2.asQuarters = asQuarters;
proto$2.asYears = asYears;
proto$2.valueOf = valueOf$1;
proto$2._bubble = bubble;
proto$2.clone = clone$1;
proto$2.get = get$2;
proto$2.milliseconds = milliseconds;
proto$2.seconds = seconds;
proto$2.minutes = minutes;
proto$2.hours = hours;
proto$2.days = days;
proto$2.weeks = weeks;
proto$2.months = months;
proto$2.years = years;
proto$2.humanize = humanize;
proto$2.toISOString = toISOString$1;
proto$2.toString = toISOString$1;
proto$2.toJSON = toISOString$1;
proto$2.locale = locale2;
proto$2.localeData = localeData;
proto$2.toIsoString = deprecate(
"toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",
toISOString$1
);
proto$2.lang = lang;
addFormatToken("X", 0, 0, "unix");
addFormatToken("x", 0, 0, "valueOf");
addRegexToken("x", matchSigned);
addRegexToken("X", matchTimestamp);
addParseToken("X", function(input, array, config) {
config._d = new Date(parseFloat(input) * 1e3);
});
addParseToken("x", function(input, array, config) {
config._d = new Date(toInt(input));
});
hooks.version = "2.29.4";
setHookCallback(createLocal);
hooks.fn = proto;
hooks.min = min;
hooks.max = max;
hooks.now = now;
hooks.utc = createUTC;
hooks.unix = createUnix;
hooks.months = listMonths;
hooks.isDate = isDate;
hooks.locale = getSetGlobalLocale;
hooks.invalid = createInvalid;
hooks.duration = createDuration;
hooks.isMoment = isMoment;
hooks.weekdays = listWeekdays;
hooks.parseZone = createInZone;
hooks.localeData = getLocale;
hooks.isDuration = isDuration;
hooks.monthsShort = listMonthsShort;
hooks.weekdaysMin = listWeekdaysMin;
hooks.defineLocale = defineLocale;
hooks.updateLocale = updateLocale;
hooks.locales = listLocales;
hooks.weekdaysShort = listWeekdaysShort;
hooks.normalizeUnits = normalizeUnits;
hooks.relativeTimeRounding = getSetRelativeTimeRounding;
hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;
hooks.calendarFormat = getCalendarFormat;
hooks.prototype = proto;
hooks.HTML5_FMT = {
DATETIME_LOCAL: "YYYY-MM-DDTHH:mm",
// <input type="datetime-local" />
DATETIME_LOCAL_SECONDS: "YYYY-MM-DDTHH:mm:ss",
// <input type="datetime-local" step="1" />
DATETIME_LOCAL_MS: "YYYY-MM-DDTHH:mm:ss.SSS",
// <input type="datetime-local" step="0.001" />
DATE: "YYYY-MM-DD",
// <input type="date" />
TIME: "HH:mm",
// <input type="time" />
TIME_SECONDS: "HH:mm:ss",
// <input type="time" step="1" />
TIME_MS: "HH:mm:ss.SSS",
// <input type="time" step="0.001" />
WEEK: "GGGG-[W]WW",
// <input type="week" />
MONTH: "YYYY-MM"
// <input type="month" />
};
return hooks;
});
}
});
// src/main.ts
var main_exports = {};
__export(main_exports, {
default: () => SRPlugin
});
module.exports = __toCommonJS(main_exports);
var import_obsidian11 = 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: '.<a href="${wiki_url}">wiki</a> \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: '<a href="${algo_url}">algorithm implementation</a> :\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 <a href="${wiki_url}">wiki</a>.',
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 <a href="${algo_url}">popis algoritmu</a>.',
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 <a href="${wiki_url}">Wiki</a> (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: <a href="${algo_url}">Implementierung des Algorithmus</a> (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 <a href="${wiki_url}">wiki</a>.',
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 <a href="${algo_url}">algorithm implementation</a>.',
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 <a href="${wiki_url}">wiki</a>.',
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 <a href="${algo_url}">implementaci\xF3n del algoritmo</a>.',
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\u306F<a href="${wiki_url}">wiki</a>\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<a href="${algo_url}">\u30A2\u30EB\u30B4\u30EA\u30BA\u30E0\u306E\u5B9F\u88C5</a>\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, <a href="${wiki_url}">wiki</a>\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, <a href="${algo_url}">algorithm implementation</a>\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 <a href="${wiki_url}">wiki</a>.',
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 <a href="${algo_url}">implementa\xE7\xE3o do algor\xEDtmo</a>.',
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 <a href="${wiki_url}">wiki</a>.',
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 <a href="${algo_url}">\u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F \u0430\u043B\u0433\u043E\u0440\u0438\u0442\u043C\u0430</a>.',
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\u51FB<a href="${wiki_url}">wiki</a>.',
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<a href="${algo_url}">\u7B97\u6CD5\u5B9E\u73B0</a>.',
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\u9078<a href="${wiki_url}">wiki</a>.',
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<a href="${algo_url}">\u7B97\u6CD5\u5BE6\u73FE</a>.',
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/gui/flashcard-modal.tsx
var import_obsidian5 = 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 = /<!--SR:([\d-]+),(\d+),(\d+)-->/gm;
var OBSIDIAN_TAG_AT_STARTOFLINE_REGEX = /^#[^\s#]+/gi;
var PREFERRED_DATE_FORMAT = "YYYY-MM-DD";
var ALLOWED_DATE_FORMATS = [PREFERRED_DATE_FORMAT, "DD-MM-YYYY", "ddd MMM DD YYYY"];
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 = '<svg viewBox="0 0 100 100" width="8" height="8" class="right-triangle"><path fill="currentColor" stroke="currentColor" d="M94.9,20.8c-1.4-2.5-4.1-4.1-7.1-4.1H12.2c-3,0-5.7,1.6-7.1,4.1c-1.3,2.4-1.2,5.2,0.2,7.6L43.1,88c1.5,2.3,4,3.7,6.9,3.7 s5.4-1.4,6.9-3.7l37.8-59.6C96.1,26,96.2,23.2,94.9,20.8L94.9,20.8z"></path></svg>';
var TICKS_PER_DAY = 24 * 3600 * 1e3;
var SR_HTML_COMMENT_BEGIN = "<!--SR:";
var SR_HTML_COMMENT_END = "-->";
// src/TopicPath.ts
var TopicPath = class _TopicPath {
constructor(path) {
if (path == null)
throw "null path";
if (path.some((str) => str.includes("/")))
throw "path entries must not contain '/'";
this.path = path;
}
get hasPath() {
return this.path.length > 0;
}
get isEmptyPath() {
return !this.hasPath;
}
static get emptyPath() {
return new _TopicPath([]);
}
shift() {
if (this.isEmptyPath)
throw "can't shift an empty path";
return this.path.shift();
}
clone() {
return new _TopicPath([...this.path]);
}
formatAsTag() {
if (this.isEmptyPath)
throw "Empty path";
const result = "#" + this.path.join("/");
return result;
}
static getTopicPathOfFile(noteFile, settings) {
let deckPath = [];
let result = _TopicPath.emptyPath;
if (settings.convertFoldersToDecks) {
deckPath = noteFile.path.split("/");
deckPath.pop();
if (deckPath.length != 0) {
result = new _TopicPath(deckPath);
}
} else {
const tagList = this.getTopicPathsFromTagList(noteFile.getAllTags());
outer:
for (const tagToReview of this.getTopicPathsFromTagList(
settings.flashcardTags
)) {
for (const tag of tagList) {
if (tagToReview.isSameOrAncestorOf(tag)) {
result = tag;
break outer;
}
}
}
}
return result;
}
isSameOrAncestorOf(topicPath) {
if (this.isEmptyPath)
return topicPath.isEmptyPath;
if (this.path.length > topicPath.path.length)
return false;
for (let i = 0; i < this.path.length; i++) {
if (this.path[i] != topicPath.path[i])
return false;
}
return true;
}
static getTopicPathFromCardText(cardText) {
var _a;
const path = (_a = cardText.trimStart().match(OBSIDIAN_TAG_AT_STARTOFLINE_REGEX)) == null ? void 0 : _a.slice(-1)[0];
return (path == null ? void 0 : path.length) > 0 ? _TopicPath.getTopicPathFromTag(path) : null;
}
static removeTopicPathFromStartOfCardText(cardText) {
const cardText1 = cardText.trimStart().replaceAll(OBSIDIAN_TAG_AT_STARTOFLINE_REGEX, "");
const cardText2 = cardText1.trimStart();
const whiteSpaceLength = cardText1.length - cardText2.length;
const whiteSpace = cardText1.substring(0, whiteSpaceLength);
return [cardText2, whiteSpace];
}
static getTopicPathsFromTagList(tagList) {
const result = [];
for (const tag of tagList) {
if (this.isValidTag(tag))
result.push(_TopicPath.getTopicPathFromTag(tag));
}
return result;
}
static isValidTag(tag) {
if (tag == null || tag.length == 0)
return false;
if (tag[0] != "#")
return false;
if (tag.length == 1)
return false;
return true;
}
static getTopicPathFromTag(tag) {
if (tag == null || tag.length == 0)
throw "Null/empty tag";
if (tag[0] != "#")
throw "Tag must start with #";
if (tag.length == 1)
throw "Invalid tag";
const path = tag.replace("#", "").split("/").filter((str) => str);
return new _TopicPath(path);
}
};
// src/FlashcardReviewSequencer.ts
var DeckStats = class {
constructor(dueCount, newCount, totalCount) {
this.dueCount = dueCount;
this.newCount = newCount;
this.totalCount = totalCount;
}
};
var FlashcardReviewSequencer = class {
constructor(reviewMode, cardSequencer, settings, cardScheduleCalculator, questionPostponementList) {
this.reviewMode = reviewMode;
this.cardSequencer = cardSequencer;
this.settings = settings;
this.cardScheduleCalculator = cardScheduleCalculator;
this.questionPostponementList = questionPostponementList;
}
get hasCurrentCard() {
return this.cardSequencer.currentCard != null;
}
get currentCard() {
return this.cardSequencer.currentCard;
}
get currentQuestion() {
var _a;
return (_a = this.currentCard) == null ? void 0 : _a.question;
}
get currentDeck() {
return this.cardSequencer.currentDeck;
}
get currentNote() {
return this.currentQuestion.note;
}
setDeckTree(originalDeckTree, remainingDeckTree) {
this._originalDeckTree = originalDeckTree;
this.remainingDeckTree = remainingDeckTree;
this.setCurrentDeck(TopicPath.emptyPath);
}
setCurrentDeck(topicPath) {
const deck = this.remainingDeckTree.getDeck(topicPath);
this.cardSequencer.setDeck(deck);
this.cardSequencer.nextCard();
}
get originalDeckTree() {
return this._originalDeckTree;
}
getDeckStats(topicPath) {
const totalCount = this._originalDeckTree.getDeck(topicPath).getCardCount(2 /* All */, true);
const remainingDeck = this.remainingDeckTree.getDeck(topicPath);
const newCount = remainingDeck.getCardCount(0 /* NewCard */, true);
const dueCount = remainingDeck.getCardCount(1 /* DueCard */, true);
return new DeckStats(dueCount, newCount, totalCount);
}
skipCurrentCard() {
this.cardSequencer.deleteCurrentQuestion();
}
deleteCurrentCard() {
this.cardSequencer.deleteCurrentCard();
}
async processReview(response) {
switch (this.reviewMode) {
case 1 /* Review */:
await this.processReview_ReviewMode(response);
break;
case 0 /* Cram */:
await this.processReview_CramMode(response);
break;
}
}
async processReview_ReviewMode(response) {
this.currentCard.scheduleInfo = this.determineCardSchedule(response, this.currentCard);
await this.currentQuestion.writeQuestion(this.settings);
if (response == 3 /* Reset */) {
this.cardSequencer.moveCurrentCardToEndOfList();
this.cardSequencer.nextCard();
} else {
if (this.settings.burySiblingCards) {
await this.burySiblingCards();
this.cardSequencer.deleteCurrentQuestion();
} else {
this.deleteCurrentCard();
}
}
}
async burySiblingCards() {
const remaining = this.currentDeck.getQuestionCardCount(this.currentQuestion);
if (remaining > 1) {
this.questionPostponementList.add(this.currentQuestion);
await this.questionPostponementList.write();
}
}
async processReview_CramMode(response) {
if (response == 0 /* Easy */)
this.deleteCurrentCard();
else {
this.cardSequencer.moveCurrentCardToEndOfList();
this.cardSequencer.nextCard();
}
}
determineCardSchedule(response, card) {
let result;
if (response == 3 /* Reset */) {
result = this.cardScheduleCalculator.getResetCardSchedule();
} else {
if (card.hasSchedule) {
result = this.cardScheduleCalculator.calcUpdatedSchedule(
response,
card.scheduleInfo
);
} else {
const currentNote = card.question.note;
result = this.cardScheduleCalculator.getNewCardSchedule(
response,
currentNote.filePath
);
}
}
return result;
}
async updateCurrentQuestionText(text) {
const q = this.currentQuestion.questionText;
q.actualQuestion = text;
await this.currentQuestion.writeQuestion(this.settings);
}
};
// src/Deck.ts
var Deck2 = class _Deck {
constructor(deckName, parent) {
this.deckName = deckName;
this.newFlashcards = [];
this.dueFlashcards = [];
this.subdecks = [];
this.parent = parent;
}
getCardCount(cardListType, includeSubdeckCounts) {
let result = 0;
if (cardListType == 0 /* NewCard */ || cardListType == 2 /* All */)
result += this.newFlashcards.length;
if (cardListType == 1 /* DueCard */ || cardListType == 2 /* All */)
result += this.dueFlashcards.length;
if (includeSubdeckCounts) {
for (const deck of this.subdecks) {
result += deck.getCardCount(cardListType, includeSubdeckCounts);
}
}
return result;
}
//
// Returns a count of the number of this question's cards are present in this deck.
// (The returned value would be <= question.cards.length)
//
getQuestionCardCount(question) {
let result = 0;
result += this.getQuestionCardCountForCardListType(question, this.newFlashcards);
result += this.getQuestionCardCountForCardListType(question, this.dueFlashcards);
return result;
}
getQuestionCardCountForCardListType(question, cards) {
let result = 0;
for (let i = 0; i < cards.length; i++) {
const card = cards[i];
if (Object.is(question, cards[i].question))
result++;
}
return result;
}
static get emptyDeck() {
return new _Deck("Root", null);
}
get isRootDeck() {
return this.parent == null;
}
getDeck(topicPath) {
return this._getOrCreateDeck(topicPath, false);
}
getOrCreateDeck(topicPath) {
return this._getOrCreateDeck(topicPath, true);
}
_getOrCreateDeck(topicPath, createAllowed) {
if (!topicPath.hasPath) {
return this;
}
const t2 = topicPath.clone();
const deckName = t2.shift();
for (const subdeck of this.subdecks) {
if (deckName === subdeck.deckName) {
return subdeck._getOrCreateDeck(t2, createAllowed);
}
}
let result = null;
if (createAllowed) {
const subdeck = new _Deck(
deckName,
this
/* parent */
);
this.subdecks.push(subdeck);
result = subdeck._getOrCreateDeck(t2, createAllowed);
}
return result;
}
getTopicPath() {
const list = [];
let deck = this;
while (!deck.isRootDeck) {
list.push(deck.deckName);
deck = deck.parent;
}
return new TopicPath(list.reverse());
}
getRootDeck() {
let deck = this;
while (!deck.isRootDeck) {
deck = deck.parent;
}
return deck;
}
getCard(index, cardListType) {
const cardList = this.getCardListForCardType(cardListType);
return cardList[index];
}
getCardListForCardType(cardListType) {
return cardListType == 1 /* DueCard */ ? this.dueFlashcards : this.newFlashcards;
}
appendCard(topicPath, cardObj) {
const deck = this.getOrCreateDeck(topicPath);
const cardList = deck.getCardListForCardType(cardObj.cardListType);
cardList.push(cardObj);
}
deleteCard(card) {
const cardList = this.getCardListForCardType(card.cardListType);
const idx = cardList.indexOf(card);
if (idx != -1)
cardList.splice(idx, 1);
}
deleteCardAtIndex(index, cardListType) {
const cardList = this.getCardListForCardType(cardListType);
cardList.splice(index, 1);
}
toDeckArray() {
const result = [];
result.push(this);
for (const subdeck of this.subdecks) {
result.push(...subdeck.toDeckArray());
}
return result;
}
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();
}
}
debugLogToConsole(desc = null) {
let str = desc != null ? `${desc}: ` : "";
console.log(str += this.toString());
}
toString(indent = 0) {
let result = "";
let indentStr = " ".repeat(indent * 4);
result += `${indentStr}${this.deckName}\r
`;
indentStr += " ";
for (let i = 0; i < this.newFlashcards.length; i++) {
const card = this.newFlashcards[i];
result += `${indentStr}New: ${i}: ${card.front}::${card.back}\r
`;
}
for (let i = 0; i < this.dueFlashcards.length; i++) {
const card = this.dueFlashcards[i];
const s = card.isDue ? "Due" : "Not due";
result += `${indentStr}${s}: ${i}: ${card.front}::${card.back}\r
`;
}
for (const subdeck of this.subdecks) {
result += subdeck.toString(indent + 1);
}
return result;
}
clone() {
return this.copyWithCardFilter(() => true);
}
copyWithCardFilter(predicate, parent = null) {
const result = new _Deck(this.deckName, parent);
result.newFlashcards = [...this.newFlashcards.filter((card) => predicate(card))];
result.dueFlashcards = [...this.dueFlashcards.filter((card) => predicate(card))];
for (const s of this.subdecks) {
const newParent = result;
const newDeck = s.copyWithCardFilter(predicate, newParent);
result.subdecks.push(newDeck);
}
return result;
}
static otherListType(cardListType) {
let result;
if (cardListType == 0 /* NewCard */)
result = 1 /* DueCard */;
else if (cardListType == 1 /* DueCard */)
result = 0 /* NewCard */;
else
throw "Invalid cardListType";
return result;
}
};
var DeckTreeFilter = class {
static filterForReviewableCards(reviewableDeckTree) {
return reviewableDeckTree.copyWithCardFilter((card) => !card.question.hasEditLaterTag);
}
static filterForRemainingCards(questionPostponementList, deckTree, reviewMode) {
return deckTree.copyWithCardFilter(
(card) => (reviewMode == 0 /* Cram */ || card.isNew || card.isDue) && !questionPostponementList.includes(card.question)
);
}
};
// src/util/utils.ts
var import_moment = __toESM(require_moment());
function getTypedObjectEntries(obj) {
return Object.entries(obj);
}
var getKeysPreserveType = Object.keys;
function literalStringReplace(text, searchStr, replacementStr) {
let result = text;
const startIdx = text.indexOf(searchStr);
if (startIdx >= 0) {
const startStr = text.substring(0, startIdx);
const endIdx = startIdx + searchStr.length;
const endStr = text.substring(endIdx);
result = startStr + replacementStr + endStr;
}
return result;
}
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);
}
function formatDate_YYYY_MM_DD(ticks) {
return ticks.format(PREFERRED_DATE_FORMAT);
}
function splitTextIntoLineArray(text) {
return text.replaceAll("\r\n", "\n").split("\n");
}
// src/util/DateProvider.ts
var import_moment2 = __toESM(require_moment());
var LiveDateProvider = class {
get today() {
return (0, import_moment2.default)().startOf("day");
}
};
var DateUtil = class {
static dateStrToMoment(str) {
return (0, import_moment2.default)(str, ALLOWED_DATE_FORMATS);
}
};
var globalDateProvider = new LiveDateProvider();
// src/CardSchedule.ts
var _CardScheduleInfo = class _CardScheduleInfo {
constructor(dueDate, interval, ease, delayBeforeReviewTicks) {
this.dueDate = dueDate;
this.interval = interval;
this.ease = ease;
this.delayBeforeReviewTicks = delayBeforeReviewTicks;
}
get delayBeforeReviewDaysInt() {
return Math.ceil(this.delayBeforeReviewTicks / TICKS_PER_DAY);
}
isDue() {
return this.dueDate.isSameOrBefore(globalDateProvider.today);
}
isDummyScheduleForNewCard() {
return this.formatDueDate() == _CardScheduleInfo.dummyDueDateForNewCard;
}
static getDummyScheduleForNewCard(settings) {
return _CardScheduleInfo.fromDueDateStr(
_CardScheduleInfo.dummyDueDateForNewCard,
_CardScheduleInfo.initialInterval,
settings.baseEase,
0
);
}
static fromDueDateStr(dueDateStr, interval, ease, delayBeforeReviewTicks) {
const dueDateTicks = DateUtil.dateStrToMoment(dueDateStr);
return new _CardScheduleInfo(dueDateTicks, interval, ease, delayBeforeReviewTicks);
}
static fromDueDateMoment(dueDateTicks, interval, ease, delayBeforeReviewTicks) {
return new _CardScheduleInfo(dueDateTicks, interval, ease, delayBeforeReviewTicks);
}
static get initialInterval() {
return 1;
}
formatDueDate() {
return formatDate_YYYY_MM_DD(this.dueDate);
}
formatSchedule() {
return `!${this.formatDueDate()},${this.interval},${this.ease}`;
}
};
// A question can have multiple cards. The schedule info for all sibling cards are formatted together
// in a single <!--SR: --> comment, such as:
// <!--SR:!2023-09-02,4,270!2023-09-02,5,270!2023-09-02,6,270!2023-09-02,7,270-->
//
// However, not all sibling cards may have been reviewed. Therefore we need a method of indicating that a particular card
// has not been reviewed, and should be considered "new"
// This is done by using this magic value for the date
_CardScheduleInfo.dummyDueDateForNewCard = "2000-01-01";
var CardScheduleInfo = _CardScheduleInfo;
var CardScheduleCalculator = class {
// Record<# of days in future, due count>
constructor(settings, noteEaseList) {
this.dueDatesFlashcards = {};
this.settings = settings;
this.noteEaseList = noteEaseList;
}
getResetCardSchedule() {
const interval = CardScheduleInfo.initialInterval;
const ease = this.settings.baseEase;
const dueDate = globalDateProvider.today.add(interval, "d");
const delayBeforeReview = 0;
return CardScheduleInfo.fromDueDateMoment(dueDate, interval, ease, delayBeforeReview);
}
getNewCardSchedule(response, notePath) {
let initial_ease = this.settings.baseEase;
if (this.noteEaseList.hasEaseForPath(notePath)) {
initial_ease = Math.round(this.noteEaseList.getEaseByPath(notePath));
}
const delayBeforeReview = 0;
const schedObj = schedule(
response,
CardScheduleInfo.initialInterval,
initial_ease,
delayBeforeReview,
this.settings,
this.dueDatesFlashcards
);
const interval = schedObj.interval;
const ease = schedObj.ease;
const dueDate = globalDateProvider.today.add(interval, "d");
return CardScheduleInfo.fromDueDateMoment(dueDate, interval, ease, delayBeforeReview);
}
calcUpdatedSchedule(response, cardSchedule) {
const schedObj = schedule(
response,
cardSchedule.interval,
cardSchedule.ease,
cardSchedule.delayBeforeReviewTicks,
this.settings,
this.dueDatesFlashcards
);
const interval = schedObj.interval;
const ease = schedObj.ease;
const dueDate = globalDateProvider.today.add(interval, "d");
const delayBeforeReview = 0;
return CardScheduleInfo.fromDueDateMoment(dueDate, interval, ease, delayBeforeReview);
}
};
var NoteCardScheduleParser = class {
static createCardScheduleInfoList(questionText) {
let scheduling = [...questionText.matchAll(MULTI_SCHEDULING_EXTRACTOR)];
if (scheduling.length === 0)
scheduling = [...questionText.matchAll(LEGACY_SCHEDULING_EXTRACTOR)];
const result = [];
for (let i = 0; i < scheduling.length; i++) {
const match = scheduling[i];
const dueDateStr = match[1];
const interval = parseInt(match[2]);
const ease = parseInt(match[3]);
const dueDate = DateUtil.dateStrToMoment(dueDateStr);
const delayBeforeReviewTicks = dueDate.valueOf() - globalDateProvider.today.valueOf();
const info = new CardScheduleInfo(
dueDate,
interval,
ease,
delayBeforeReviewTicks
);
result.push(info);
}
return result;
}
static removeCardScheduleInfo(questionText) {
return questionText.replace(/<!--SR:.+-->/gm, "");
}
};
// src/util/MultiLineTextFinder.ts
var MultiLineTextFinder = class _MultiLineTextFinder {
static findAndReplace(sourceText, searchText, replacementText) {
let result = null;
if (sourceText.includes(searchText)) {
result = literalStringReplace(sourceText, searchText, replacementText);
} else {
const sourceTextArray = splitTextIntoLineArray(sourceText);
const searchTextArray = splitTextIntoLineArray(searchText);
const lineNo = _MultiLineTextFinder.find(sourceTextArray, searchTextArray);
if (lineNo) {
const replacementTextArray = splitTextIntoLineArray(replacementText);
const linesToRemove = searchTextArray.length;
sourceTextArray.splice(lineNo, linesToRemove, ...replacementTextArray);
result = sourceTextArray.join("\n");
}
}
return result;
}
static find(sourceText, searchText) {
let result = null;
let searchIdx = 0;
const maxSearchIdx = searchText.length - 1;
for (let sourceIdx = 0; sourceIdx < sourceText.length; sourceIdx++) {
const sourceLine = sourceText[sourceIdx].trim();
const searchLine = searchText[searchIdx].trim();
if (searchLine == sourceLine) {
if (searchIdx == maxSearchIdx) {
result = sourceIdx - searchIdx;
break;
}
searchIdx++;
} else {
searchIdx = 0;
}
}
return result;
}
};
// src/Question.ts
var QuestionText = class _QuestionText {
constructor(original, topicPath, postTopicPathWhiteSpace, actualQuestion) {
this.original = original;
this.topicPath = topicPath;
this.postTopicPathWhiteSpace = postTopicPathWhiteSpace;
this.actualQuestion = actualQuestion;
this.textHash = cyrb53(this.formatForNote());
}
endsWithCodeBlock() {
return this.actualQuestion.endsWith("```");
}
static create(original, settings) {
const [topicPath, postTopicPathWhiteSpace, actualQuestion] = this.splitText(
original,
settings
);
return new _QuestionText(original, topicPath, postTopicPathWhiteSpace, actualQuestion);
}
static splitText(original, settings) {
const strippedSR = NoteCardScheduleParser.removeCardScheduleInfo(original).trim();
let actualQuestion = strippedSR;
let whiteSpace = "";
let topicPath = TopicPath.emptyPath;
if (!settings.convertFoldersToDecks) {
const t2 = TopicPath.getTopicPathFromCardText(strippedSR);
if (t2 == null ? void 0 : t2.hasPath) {
topicPath = t2;
[actualQuestion, whiteSpace] = TopicPath.removeTopicPathFromStartOfCardText(strippedSR);
}
}
return [topicPath, whiteSpace, actualQuestion];
}
formatForNote() {
var _a;
let result = "";
if (this.topicPath.hasPath) {
result += this.topicPath.formatAsTag();
result += (_a = this.postTopicPathWhiteSpace) != null ? _a : " ";
}
result += this.actualQuestion;
return result;
}
};
var Question = class _Question {
constructor(init) {
Object.assign(this, init);
}
getHtmlCommentSeparator(settings) {
let sep = settings.cardCommentOnSameLine ? " " : "\n";
if (this.questionText.endsWithCodeBlock() && sep !== "\n") {
sep = "\n";
}
return sep;
}
setCardList(cards) {
this.cards = cards;
this.cards.forEach((card) => card.question = this);
}
formatScheduleAsHtmlComment(settings) {
let result = SR_HTML_COMMENT_BEGIN;
for (let i = 0; i < this.cards.length; i++) {
const card = this.cards[i];
const schedule2 = card.hasSchedule ? card.scheduleInfo : CardScheduleInfo.getDummyScheduleForNewCard(settings);
result += schedule2.formatSchedule();
}
result += SR_HTML_COMMENT_END;
return result;
}
formatForNote(settings) {
let result = this.questionText.formatForNote();
if (this.cards.some((card) => card.hasSchedule)) {
result += this.getHtmlCommentSeparator(settings) + this.formatScheduleAsHtmlComment(settings);
}
return result;
}
updateQuestionText(noteText, settings) {
const originalText = this.questionText.original;
const replacementText = this.formatForNote(settings);
let newText = MultiLineTextFinder.findAndReplace(noteText, originalText, replacementText);
if (newText) {
this.questionText = QuestionText.create(replacementText, settings);
} else {
console.error(
`updateQuestionText: Text not found: ${originalText.substring(
0,
100
)} in note: ${noteText.substring(0, 100)}`
);
newText = noteText;
}
return newText;
}
async writeQuestion(settings) {
const fileText = await this.note.file.read();
const newText = this.updateQuestionText(fileText, settings);
await this.note.file.write(newText);
this.hasChanged = false;
}
static Create(settings, questionType, noteTopicPath, originalText, lineNo, context) {
const hasEditLaterTag = originalText.includes(settings.editLaterTag);
const questionText = QuestionText.create(originalText, settings);
let topicPath = noteTopicPath;
if (questionText.topicPath.hasPath) {
topicPath = questionText.topicPath;
}
const result = new _Question({
questionType,
topicPath,
questionText,
lineNo,
hasEditLaterTag,
questionContext: context,
cards: null,
hasChanged: false
});
return result;
}
};
// src/gui/flashcards-edit-modal.ts
var import_obsidian3 = require("obsidian");
var FlashcardEditModal = class _FlashcardEditModal extends import_obsidian3.Modal {
constructor(app2, 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.titleEl.setText(t("EDIT_CARD"));
this.titleEl.addClass("sr-centered");
this.modalText = existingText;
this.input = existingText;
this.waitForClose = new Promise((resolve2, reject) => {
this.resolvePromise = resolve2;
this.rejectPromise = reject;
});
this.display();
this.open();
}
static Prompt(app2, placeholder) {
const newPromptModal = new _FlashcardEditModal(app2, 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 : "").inputEl.addEventListener("keydown", this.submitEnterCallback);
return textComponent;
}
submit() {
this.didSubmit = true;
this.input = this.inputComponent.getValue();
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);
}
};
// src/util/RenderMarkdownWrapper.ts
var import_obsidian4 = require("obsidian");
var RenderMarkdownWrapper = class {
constructor(app2, plugin, notePath) {
this.app = app2;
this.notePath = notePath;
this.plugin = plugin;
}
// 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_obsidian4.MarkdownRenderer.renderMarkdown(markdownString, containerEl, this.notePath, 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_obsidian4.TFile) {
if (link2.target.extension !== "md") {
this.embedMediaFile(el, link2.target);
} else {
el.innerText = "";
this.renderTransclude(el, link2, recursiveDepth);
}
}
});
}
parseLink(src) {
const linkComponentsRegex = /^(?<file>[^#^]+)?(?:#(?!\^)(?<heading>.+)|#\^(?<blockId>.+)|#)?$/;
const matched = typeof src === "string" && src.match(linkComponentsRegex);
const file = matched.groups.file || this.notePath;
const target = this.plugin.app.metadataCache.getFirstLinkpathDest(file, this.notePath);
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);
}
};
// src/gui/flashcard-modal.tsx
var FlashcardModal = class extends import_obsidian5.Modal {
constructor(app2, plugin, settings, reviewSequencer, reviewMode) {
super(app2);
this.plugin = plugin;
this.settings = settings;
this.reviewSequencer = reviewSequencer;
this.reviewMode = reviewMode;
this.titleEl.setText(t("DECKS"));
this.titleEl.addClass("sr-centered");
if (import_obsidian5.Platform.isMobile) {
this.contentEl.style.display = "block";
}
this.modalEl.style.height = this.settings.flashcardHeightPercentage + "%";
this.modalEl.style.width = this.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" || e.code === "NumpadEnter")) {
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();
}
}
}
};
}
get currentCard() {
return this.reviewSequencer.currentCard;
}
get currentQuestion() {
return this.reviewSequencer.currentQuestion;
}
get currentNote() {
return this.reviewSequencer.currentNote;
}
onOpen() {
this.renderDecksList();
}
onClose() {
this.mode = 3 /* Closed */;
}
renderDecksList() {
this.mode = 0 /* DecksList */;
const stats = this.reviewSequencer.getDeckStats(TopicPath.emptyPath);
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"
},
stats.dueCount.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"
},
stats.newCount.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"
},
stats.totalCount.toString()
));
this.contentEl.empty();
this.contentEl.setAttribute("id", "sr-flashcard-view");
for (const deck of this.reviewSequencer.originalDeckTree.subdecks) {
this.renderDeck(deck, this.contentEl, this);
}
}
renderDeck(deck, containerEl, modal) {
const deckView = containerEl.createDiv("tree-item");
const deckViewSelf = deckView.createDiv(
"tree-item-self tag-pane-tag is-clickable"
);
const shouldBeInitiallyExpanded = modal.settings.initiallyExpandAllSubdecksInTree;
let collapsed = !shouldBeInitiallyExpanded;
let collapseIconEl = null;
if (deck.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");
const deckViewInnerText = deckViewInner.createDiv("tag-pane-tag-text");
deckViewInnerText.innerHTML += /* @__PURE__ */ (0, import_vhtml.default)("span", { class: "tag-pane-tag-self" }, deck.deckName);
const deckViewOuter = deckViewSelf.createDiv("tree-item-flair-outer");
const deckStats = this.reviewSequencer.getDeckStats(deck.getTopicPath());
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"
},
deckStats.dueCount.toString()
), /* @__PURE__ */ (0, import_vhtml.default)(
"span",
{
style: "background-color:#2196f3;",
class: "tag-pane-tag-count tree-item-flair sr-deck-counts"
},
deckStats.newCount.toString()
), /* @__PURE__ */ (0, import_vhtml.default)(
"span",
{
style: "background-color:#ff7043;",
class: "tag-pane-tag-count tree-item-flair sr-deck-counts"
},
deckStats.totalCount.toString()
));
const deckViewChildren = deckView.createDiv("tree-item-children");
deckViewChildren.style.display = collapsed ? "none" : "block";
if (deck.subdecks.length > 0) {
collapseIconEl.addEventListener("click", (e) => {
if (collapsed) {
collapseIconEl.childNodes[0].style.transform = "";
deckViewChildren.style.display = "block";
} else {
collapseIconEl.childNodes[0].style.transform = "rotate(-90deg)";
deckViewChildren.style.display = "none";
}
e.stopPropagation();
collapsed = !collapsed;
});
}
deckViewSelf.addEventListener("click", () => {
this.startReviewOfDeck(deck);
});
for (const subdeck of deck.subdecks) {
this.renderDeck(subdeck, deckViewChildren, modal);
}
}
startReviewOfDeck(deck) {
this.reviewSequencer.setCurrentDeck(deck.getTopicPath());
if (this.reviewSequencer.hasCurrentCard) {
this.setupCardsView();
this.showCurrentCard();
} else
this.renderDecksList();
}
setupCardsView() {
this.contentEl.empty();
this.flashCardMenu = this.contentEl.createDiv("sr-flashcard-menu");
this.createBackButton();
this.createEditButton();
this.createResetButton();
this.createCardInfoButton();
this.createSkipButton();
if (this.settings.showContextInCards) {
this.contextView = this.contentEl.createDiv();
this.contextView.setAttribute("id", "sr-context");
}
this.flashcardView = this.contentEl.createDiv("div");
this.flashcardView.setAttribute("id", "sr-flashcard-view");
this.createResponseButtons();
this.createShowAnswerButton();
if (this.reviewMode == 0 /* Cram */) {
this.goodBtn.style.display = "none";
this.responseDiv.addClass("sr-ignorestats-response");
this.easyBtn.addClass("sr-ignorestats-btn");
this.hardBtn.addClass("sr-ignorestats-btn");
}
}
createShowAnswerButton() {
this.answerBtn = this.contentEl.createDiv();
this.answerBtn.setAttribute("id", "sr-show-answer");
this.answerBtn.setText(t("SHOW_ANSWER"));
this.answerBtn.addEventListener("click", () => {
this.showAnswer();
});
}
createResponseButtons() {
this.responseDiv = this.contentEl.createDiv("sr-flashcard-response");
this.hardBtn = document.createElement("button");
this.hardBtn.setAttribute("id", "sr-hard-btn");
this.hardBtn.setText(this.settings.flashcardHardText);
this.hardBtn.addEventListener("click", () => {
this.processReview(2 /* Hard */);
});
this.responseDiv.appendChild(this.hardBtn);
this.goodBtn = document.createElement("button");
this.goodBtn.setAttribute("id", "sr-good-btn");
this.goodBtn.setText(this.settings.flashcardGoodText);
this.goodBtn.addEventListener("click", () => {
this.processReview(1 /* Good */);
});
this.responseDiv.appendChild(this.goodBtn);
this.easyBtn = document.createElement("button");
this.easyBtn.setAttribute("id", "sr-easy-btn");
this.easyBtn.setText(this.settings.flashcardEasyText);
this.easyBtn.addEventListener("click", () => {
this.processReview(0 /* Easy */);
});
this.responseDiv.appendChild(this.easyBtn);
this.responseDiv.style.display = "none";
}
createSkipButton() {
const skipButton = this.flashCardMenu.createEl("button");
skipButton.addClass("sr-flashcard-menu-item");
(0, import_obsidian5.setIcon)(skipButton, "chevrons-right");
skipButton.setAttribute("aria-label", t("SKIP"));
skipButton.addEventListener("click", () => {
this.skipCurrentCard();
});
}
createCardInfoButton() {
const cardInfo = this.flashCardMenu.createEl("button");
cardInfo.addClass("sr-flashcard-menu-item");
(0, import_obsidian5.setIcon)(cardInfo, "info");
cardInfo.setAttribute("aria-label", "View Card Info");
cardInfo.addEventListener("click", async () => {
this.displayCurrentCardInfoNotice();
});
}
displayCurrentCardInfoNotice() {
var _a;
const schedule2 = this.currentCard.scheduleInfo;
const currentEaseStr = t("CURRENT_EASE_HELP_TEXT") + ((_a = schedule2 == null ? void 0 : schedule2.ease) != null ? _a : t("NEW"));
const currentIntervalStr = t("CURRENT_INTERVAL_HELP_TEXT") + textInterval(schedule2 == null ? void 0 : schedule2.interval, false);
const generatedFromStr = t("CARD_GENERATED_FROM", {
notePath: this.currentQuestion.note.filePath
});
new import_obsidian5.Notice(currentEaseStr + "\n" + currentIntervalStr + "\n" + generatedFromStr);
}
createBackButton() {
const backButton = this.flashCardMenu.createEl("button");
backButton.addClass("sr-flashcard-menu-item");
(0, import_obsidian5.setIcon)(backButton, "arrow-left");
backButton.setAttribute("aria-label", t("BACK"));
backButton.addEventListener("click", () => {
this.renderDecksList();
});
}
createResetButton() {
this.resetButton = this.flashCardMenu.createEl("button");
this.resetButton.addClass("sr-flashcard-menu-item");
(0, import_obsidian5.setIcon)(this.resetButton, "refresh-cw");
this.resetButton.setAttribute("aria-label", t("RESET_CARD_PROGRESS"));
this.resetButton.addEventListener("click", () => {
this.processReview(3 /* Reset */);
});
}
createEditButton() {
this.editButton = this.flashCardMenu.createEl("button");
this.editButton.addClass("sr-flashcard-menu-item");
(0, import_obsidian5.setIcon)(this.editButton, "edit");
this.editButton.setAttribute("aria-label", t("EDIT_CARD"));
this.editButton.addEventListener("click", async () => {
this.doEditQuestionText();
});
}
async doEditQuestionText() {
const currentQ = this.reviewSequencer.currentQuestion;
const textPrompt = currentQ.questionText.actualQuestion;
const editModal = FlashcardEditModal.Prompt(this.app, textPrompt);
editModal.then(async (modifiedCardText) => {
this.reviewSequencer.updateCurrentQuestionText(modifiedCardText);
}).catch((reason) => console.log(reason));
}
showAnswer() {
this.mode = 2 /* Back */;
this.answerBtn.style.display = "none";
this.responseDiv.style.display = "grid";
if (this.currentCard.hasSchedule) {
this.resetButton.disabled = false;
}
if (this.currentQuestion.questionType !== 4 /* Cloze */) {
const hr = document.createElement("hr");
hr.setAttribute("id", "sr-hr-card-divide");
this.flashcardView.appendChild(hr);
} else {
this.flashcardView.empty();
}
const wrapper = new RenderMarkdownWrapper(
this.app,
this.plugin,
this.currentNote.filePath
);
wrapper.renderMarkdownWrapper(this.currentCard.back, this.flashcardView);
}
async processReview(response) {
await this.reviewSequencer.processReview(response);
await this.handleNextCard();
}
async skipCurrentCard() {
this.reviewSequencer.skipCurrentCard();
await this.handleNextCard();
}
async handleNextCard() {
if (this.currentCard != null)
await this.showCurrentCard();
else
this.renderDecksList();
}
async showCurrentCard() {
const deck = this.reviewSequencer.currentDeck;
this.responseDiv.style.display = "none";
this.resetButton.disabled = true;
this.titleEl.setText(`${deck.deckName}: ${deck.getCardCount(2 /* All */, true)}`);
this.answerBtn.style.display = "initial";
this.flashcardView.empty();
this.mode = 1 /* Front */;
const wrapper = new RenderMarkdownWrapper(
this.app,
this.plugin,
this.currentNote.filePath
);
await wrapper.renderMarkdownWrapper(this.currentCard.front, this.flashcardView);
if (this.reviewMode == 0 /* Cram */) {
this.hardBtn.setText(`${this.settings.flashcardHardText}`);
this.easyBtn.setText(`${this.settings.flashcardEasyText}`);
} else {
this.setupEaseButton(
this.hardBtn,
this.settings.flashcardHardText,
2 /* Hard */
);
this.setupEaseButton(
this.goodBtn,
this.settings.flashcardGoodText,
1 /* Good */
);
this.setupEaseButton(
this.easyBtn,
this.settings.flashcardEasyText,
0 /* Easy */
);
}
if (this.settings.showContextInCards)
this.contextView.setText(
this.formatQuestionContextText(this.currentQuestion.questionContext)
);
}
formatQuestionContextText(questionContext) {
const result = `${this.currentNote.file.basename} > ${questionContext.join(" > ")}`;
return result;
}
setupEaseButton(button, buttonName, reviewResponse) {
const schedule2 = this.reviewSequencer.determineCardSchedule(
reviewResponse,
this.currentCard
);
const interval = schedule2.interval;
if (import_obsidian5.Platform.isMobile) {
button.setText(textInterval(interval, true));
} else {
button.setText(`${buttonName} - ${textInterval(interval, false)}`);
}
}
};
// src/gui/stats-modal.tsx
var import_obsidian6 = require("obsidian");
var import_vhtml2 = __toESM(require_vhtml());
// node_modules/.pnpm/@kurkle+color@0.3.2/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 _Color {
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/.pnpm/chart.js@4.3.3/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/.pnpm/chart.js@4.3.3/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 _DateAdapterBase {
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 _Scale 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.3";
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) + padding;
} 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;
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,
strokeColor: optsAtIndex.textStrokeColor,
strokeWidth: optsAtIndex.textStrokeWidth
});
});
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(sorter).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;
}
_generate() {
const min = this.min;
const max = this.max;
let timestamps = super.getDataTimestamps();
if (!timestamps.includes(min) || !timestamps.length) {
timestamps.splice(0, 0, min);
}
if (!timestamps.includes(max) || timestamps.length === 1) {
timestamps.push(max);
}
return timestamps.sort((a, b) => a - b);
}
_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/gui/stats-modal.tsx
Chart.register(
BarElement,
BarController,
plugin_legend,
plugin_title,
plugin_tooltip,
plugin_subtitle,
CategoryScale,
LinearScale,
PieController,
ArcElement
);
var StatsModal = class extends import_obsidian6.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_obsidian6.Platform.isMobile) {
this.contentEl.style.display = "block";
}
}
onOpen() {
const { contentEl } = this;
contentEl.style.textAlign = "center";
const cardStats = this.plugin.cardStats;
let maxN = cardStats.delayedDays.getMaxValue();
for (let dueOffset = 0; dueOffset <= maxN; dueOffset++) {
cardStats.delayedDays.clearCountIfMissing(dueOffset);
}
const dueDatesFlashcardsCopy = { 0: 0 };
for (const [dueOffset, dueCount] of getTypedObjectEntries(cardStats.delayedDays.dict)) {
if (dueOffset <= 0) {
dueDatesFlashcardsCopy[0] += dueCount;
} else {
dueDatesFlashcardsCopy[dueOffset] = dueCount;
}
}
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 = cardStats.intervals.getMaxValue();
for (let interval = 0; interval <= maxN; interval++) {
cardStats.intervals.clearCountIfMissing(interval);
}
const average_interval = textInterval(
Math.round(
cardStats.intervals.getTotalOfValueMultiplyCount() / scheduledCount * 10
) / 10 || 0,
false
), longest_interval = textInterval(cardStats.intervals.getMaxValue(), false);
createStatsChart(
"bar",
"intervalsChart",
t("INTERVALS"),
t("INTERVALS_DESC"),
Object.keys(cardStats.intervals.dict),
Object.values(cardStats.intervals.dict),
t("INTERVALS_SUMMARY", { avg: average_interval, longest: longest_interval }),
t("COUNT"),
t("DAYS"),
t("NUMBER_OF_CARDS")
);
const eases = getKeysPreserveType(cardStats.eases.dict);
for (let ease = Math.min(...eases); ease <= Math.max(...eases); ease++) {
cardStats.eases.clearCountIfMissing(ease);
}
const average_ease = Math.round(cardStats.eases.getTotalOfValueMultiplyCount() / scheduledCount) || 0;
createStatsChart(
"bar",
"easesChart",
t("EASES"),
"",
Object.keys(cardStats.eases.dict),
Object.values(cardStats.eases.dict),
t("EASES_SUMMARY", { avgEase: average_ease }),
t("COUNT"),
t("EASES"),
t("NUMBER_OF_CARDS")
);
const totalCardsCount = this.plugin.deckTree.getCardCount(2 /* All */, true);
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/gui/sidebar.ts
var import_obsidian7 = require("obsidian");
var REVIEW_QUEUE_VIEW_TYPE = "review-queue-list-view";
var ReviewQueueListView = class extends import_obsidian7.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_obsidian7.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/ReviewDeck.ts
var import_obsidian8 = 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_obsidian8.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/icons/appicon.ts
var import_obsidian9 = require("obsidian");
function appIcon() {
(0, import_obsidian9.addIcon)(
"SpacedRepIcon",
`<path fill="currentColor" stroke="currentColor" d="M 88.960938 17.257812 L 47.457031 17.257812 C 45.679688 17.257812 44.230469 18.703125 44.230469 20.484375 L 44.230469 86.558594 C 44.230469 88.335938 45.679688 89.785156 47.457031 89.785156 L 88.960938 89.785156 C 90.738281 89.785156 92.1875 88.335938 92.1875 86.558594 L 92.1875 20.484375 C 92.1875 18.703125 90.738281 17.257812 88.960938 17.257812 Z M 88.28125 85.878906 L 48.136719 85.878906 L 48.136719 21.164062 L 88.28125 21.164062 Z M 88.28125 85.878906 "/>
<path fill="currentColor" stroke="currentColor" d="M 88.960938 9.445312 L 61.667969 9.445312 C 59.925781 3.816406 54.011719 0.515625 48.269531 2.054688 L 8.183594 12.796875 C 2.304688 14.371094 -1.199219 20.4375 0.378906 26.316406 L 17.476562 90.140625 C 18.796875 95.066406 23.269531 98.324219 28.144531 98.324219 C 29.085938 98.324219 30.046875 98.199219 31 97.945312 L 40.765625 95.328125 C 42.625 96.75 44.941406 97.597656 47.457031 97.597656 L 88.960938 97.597656 C 95.046875 97.597656 100 92.644531 100 86.558594 L 100 20.484375 C 100 14.398438 95.046875 9.445312 88.960938 9.445312 Z M 29.988281 94.171875 C 26.1875 95.191406 22.269531 92.925781 21.25 89.128906 L 4.152344 25.304688 C 3.132812 21.507812 5.394531 17.585938 9.195312 16.570312 L 49.28125 5.828125 C 52.578125 4.945312 55.960938 6.53125 57.464844 9.445312 L 47.457031 9.445312 C 41.371094 9.445312 36.417969 14.398438 36.417969 20.484375 L 36.417969 86.558594 C 36.417969 88.558594 36.957031 90.433594 37.890625 92.054688 Z M 96.09375 86.558594 C 96.09375 90.492188 92.894531 93.691406 88.960938 93.691406 L 47.457031 93.691406 C 43.523438 93.691406 40.324219 90.492188 40.324219 86.558594 L 40.324219 20.484375 C 40.324219 16.550781 43.523438 13.351562 47.457031 13.351562 L 88.960938 13.351562 C 92.894531 13.351562 96.09375 16.550781 96.09375 20.484375 Z M 96.09375 86.558594 "/>
<path fill="currentColor" stroke="currentColor" d="M 54.101562 53.09375 L 60.070312 57.410156 L 57.789062 64.378906 C 56.90625 67.074219 59.996094 69.320312 62.285156 67.648438 L 68.210938 63.324219 L 74.132812 67.648438 C 76.421875 69.320312 79.511719 67.074219 78.628906 64.378906 L 76.347656 57.410156 L 82.320312 53.09375 C 84.613281 51.433594 83.441406 47.804688 80.605469 47.804688 L 73.242188 47.804688 L 70.988281 40.839844 C 70.117188 38.144531 66.300781 38.144531 65.429688 40.839844 L 63.179688 47.804688 L 55.8125 47.804688 C 52.980469 47.804688 51.804688 51.433594 54.101562 53.09375 Z M 54.101562 53.09375 "/>
`
);
}
// src/util/RandomNumberProvider.ts
var RandomNumberProvider = class {
getInteger(lowerBound, upperBound) {
const range = upperBound - lowerBound + 1;
return Math.floor(Math.random() * range) + lowerBound;
}
};
var StaticRandomNumberProvider = class {
getInteger(lowerBound, upperBound) {
if (lowerBound != this.expectedLowerBound || upperBound != this.expectedUpperBound)
throw `lowerBound: ${lowerBound}/${this.expectedLowerBound}, upperBound: ${upperBound}/${this.expectedUpperBound}`;
return this.next;
}
};
var globalRandomNumberProvider = new RandomNumberProvider();
var staticRandomNumberProvider = new StaticRandomNumberProvider();
// src/DeckTreeIterator.ts
var SingleDeckIterator = class {
get hasCurrentCard() {
return this.cardIdx != null;
}
get currentCard() {
if (this.cardIdx == null)
return null;
return this.deck.getCard(this.cardIdx, this.cardListType);
}
constructor(iteratorOrder) {
this.iteratorOrder = iteratorOrder;
this.preferredCardListType = this.iteratorOrder.cardListOrder == 1 /* DueFirst */ ? 1 /* DueCard */ : 0 /* NewCard */;
}
setDeck(deck) {
this.deck = deck;
this.setCardListType(null);
}
setCardListType(cardListType) {
this.cardListType = cardListType;
this.cardIdx = null;
}
nextCard() {
if (this.cardListType == null) {
this.setCardListType(this.preferredCardListType);
}
if (!this.nextCardWithinList()) {
if (this.cardListType == this.preferredCardListType) {
this.setCardListType(Deck2.otherListType(this.cardListType));
if (!this.nextCardWithinList()) {
this.setCardListType(null);
}
} else {
this.cardIdx = null;
}
}
return this.cardIdx != null;
}
nextCardWithinList() {
let result = false;
const cardList = this.deck.getCardListForCardType(this.cardListType);
if (this.hasCurrentCard) {
this.deleteCurrentCard();
}
result = cardList.length > 0;
if (result) {
switch (this.iteratorOrder.cardOrder) {
case 0 /* Sequential */:
this.cardIdx = 0;
break;
case 1 /* Random */:
this.cardIdx = globalRandomNumberProvider.getInteger(0, cardList.length - 1);
break;
}
}
return result;
}
deleteCurrentQuestion() {
this.ensureCurrentCard();
const q = this.currentCard.question;
this.deleteQuestionFromList(q, 0 /* NewCard */);
this.deleteQuestionFromList(q, 1 /* DueCard */);
this.setNoCurrentCard();
}
deleteQuestionFromList(q, cardListType) {
const cards = this.deck.getCardListForCardType(cardListType);
for (let i = cards.length - 1; i >= 0; i--) {
if (Object.is(q, cards[i].question))
this.deck.deleteCardAtIndex(i, cardListType);
}
}
deleteCurrentCard() {
this.ensureCurrentCard();
this.deck.deleteCardAtIndex(this.cardIdx, this.cardListType);
this.setNoCurrentCard();
}
moveCurrentCardToEndOfList() {
this.ensureCurrentCard();
const cardList = this.deck.getCardListForCardType(this.cardListType);
if (cardList.length <= 1)
return;
const card = this.currentCard;
this.deck.deleteCardAtIndex(this.cardIdx, this.cardListType);
this.deck.appendCard(TopicPath.emptyPath, card);
this.setNoCurrentCard();
}
setNoCurrentCard() {
this.cardIdx = null;
}
ensureCurrentCard() {
if (this.cardIdx == null || this.cardListType == null)
throw "no current card";
}
};
var DeckTreeIterator = class {
get hasCurrentCard() {
return this.deckIdx != null && this.singleDeckIterator.hasCurrentCard;
}
get currentDeck() {
if (this.deckIdx == null)
return null;
return this.deckArray[this.deckIdx];
}
get currentCard() {
if (this.deckIdx == null || !this.singleDeckIterator.hasCurrentCard)
return null;
return this.singleDeckIterator.currentCard;
}
constructor(iteratorOrder, deckSource) {
this.singleDeckIterator = new SingleDeckIterator(iteratorOrder);
this.iteratorOrder = iteratorOrder;
this.deckSource = deckSource;
}
setDeck(deck) {
if (this.deckSource == 1 /* CloneBeforeUse */)
deck = deck.clone();
this.deckTree = deck;
this.deckArray = deck.toDeckArray();
this.setDeckIdx(null);
}
setDeckIdx(deckIdx) {
this.deckIdx = deckIdx;
if (deckIdx != null)
this.singleDeckIterator.setDeck(this.deckArray[deckIdx]);
}
nextCard() {
let result = false;
if (this.deckIdx == null) {
this.setDeckIdx(0);
}
while (this.deckIdx < this.deckArray.length) {
if (this.singleDeckIterator.nextCard()) {
result = true;
break;
}
this.deckIdx++;
if (this.deckIdx < this.deckArray.length) {
this.singleDeckIterator.setDeck(this.deckArray[this.deckIdx]);
}
}
if (!result)
this.deckIdx = null;
return result;
}
deleteCurrentQuestion() {
this.singleDeckIterator.deleteCurrentQuestion();
return this.nextCard();
}
deleteCurrentCard() {
this.singleDeckIterator.deleteCurrentCard();
return this.nextCard();
}
moveCurrentCardToEndOfList() {
this.singleDeckIterator.moveCurrentCardToEndOfList();
}
};
// src/Note.ts
var Note = class {
get hasChanged() {
return this.questionList.some((question) => question.hasChanged);
}
get filePath() {
return this.file.path;
}
constructor(file, questionList) {
this.file = file;
this.questionList = questionList;
questionList.forEach((question) => question.note = this);
}
appendCardsToDeck(deck) {
for (const question of this.questionList) {
for (const card of question.cards) {
deck.appendCard(question.topicPath, card);
}
}
}
debugLogToConsole(desc = "") {
var _a;
let str = `Note: ${desc}: ${this.questionList.length} questions\r
`;
for (let i = 0; i < this.questionList.length; i++) {
const q = this.questionList[i];
str += `[${i}]: ${q.questionType}: ${q.lineNo}: ${(_a = q.topicPath) == null ? void 0 : _a.path}: ${q.questionText.original}\r
`;
}
console.debug(str);
}
async writeNoteFile(settings) {
let fileText = await this.file.read();
for (const question of this.questionList) {
if (question.hasChanged) {
fileText = question.updateQuestionText(fileText, settings);
}
}
await this.file.write(fileText);
this.questionList.forEach((question) => question.hasChanged = false);
}
};
// src/Card.ts
var Card = class {
// scheduling
get hasSchedule() {
return this.scheduleInfo != null;
}
constructor(init) {
Object.assign(this, init);
}
get cardListType() {
return this.hasSchedule ? 1 /* DueCard */ : 0 /* NewCard */;
}
get isNew() {
return !this.hasSchedule;
}
get isDue() {
return this.hasSchedule && this.scheduleInfo.isDue();
}
formatSchedule() {
let result = "";
if (this.hasSchedule)
result = this.scheduleInfo.formatSchedule();
else
result = "New";
return result;
}
};
// 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++) {
const currentLine = lines[i];
if (currentLine.length === 0) {
if (cardType) {
cards.push([cardType, cardText, lineNo]);
cardType = null;
}
cardText = "";
continue;
} else if (currentLine.startsWith("<!--") && !currentLine.startsWith("<!--SR:")) {
while (i + 1 < lines.length && !currentLine.includes("-->"))
i++;
i++;
continue;
}
if (cardText.length > 0) {
cardText += "\n";
}
cardText += currentLine.trimEnd();
if (currentLine.includes(singlelineReversedCardSeparator) || currentLine.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("<!--SR:")) {
cardText += "\n" + lines[i + 1];
i++;
}
cards.push([cardType, cardText, lineNo]);
cardType = null;
cardText = "";
} else if (cardType === null && (convertHighlightsToClozes && /==.*?==/gm.test(currentLine) || convertBoldTextToClozes && /\*\*.*?\*\*/gm.test(currentLine) || convertCurlyBracketsToClozes && /{{.*?}}/gm.test(currentLine))) {
cardType = 4 /* Cloze */;
lineNo = i;
} else if (currentLine.trim() === multilineCardSeparator) {
cardType = 2 /* MultiLineBasic */;
lineNo = i;
} else if (currentLine.trim() === multilineReversedCardSeparator) {
cardType = 3 /* MultiLineReversed */;
lineNo = i;
} else if (currentLine.startsWith("```") || currentLine.startsWith("~~~")) {
const codeBlockClose = currentLine.match(/`+|~+/)[0];
while (i + 1 < lines.length && !lines[i + 1].startsWith(codeBlockClose)) {
i++;
cardText += "\n" + lines[i];
}
cardText += "\n" + codeBlockClose;
i++;
}
}
if (cardType && cardText) {
cards.push([cardType, cardText, lineNo]);
}
return cards;
}
// src/QuestionType.ts
var CardFrontBack = class {
constructor(front, back) {
this.front = front.trim();
this.back = back.trim();
}
};
var CardFrontBackUtil = class {
static expand(questionType, questionText, settings) {
const handler = QuestionTypeFactory.create(questionType);
return handler.expand(questionText, settings);
}
};
var QuestionType_SingleLineBasic = class {
expand(questionText, settings) {
const idx = questionText.indexOf(settings.singleLineCardSeparator);
const item = new CardFrontBack(
questionText.substring(0, idx),
questionText.substring(idx + settings.singleLineCardSeparator.length)
);
const result = [item];
return result;
}
};
var QuestionType_SingleLineReversed = class {
expand(questionText, settings) {
const idx = questionText.indexOf(settings.singleLineReversedCardSeparator);
const side1 = questionText.substring(0, idx), side2 = questionText.substring(
idx + settings.singleLineReversedCardSeparator.length
);
const result = [
new CardFrontBack(side1, side2),
new CardFrontBack(side2, side1)
];
return result;
}
};
var QuestionType_MultiLineBasic = class {
expand(questionText, settings) {
const idx = questionText.indexOf("\n" + settings.multilineCardSeparator + "\n");
const item = new CardFrontBack(
questionText.substring(0, idx),
questionText.substring(idx + 2 + settings.multilineCardSeparator.length)
);
const result = [item];
return result;
}
};
var QuestionType_MultiLineReversed = class {
expand(questionText, settings) {
const idx = questionText.indexOf("\n" + settings.multilineReversedCardSeparator + "\n");
const side1 = questionText.substring(0, idx), side2 = questionText.substring(
idx + 2 + settings.multilineReversedCardSeparator.length
);
const result = [
new CardFrontBack(side1, side2),
new CardFrontBack(side2, side1)
];
return result;
}
};
var QuestionType_Cloze = class {
expand(questionText, settings) {
const siblings = [];
if (settings.convertHighlightsToClozes) {
siblings.push(...questionText.matchAll(/==(.*?)==/gm));
}
if (settings.convertBoldTextToClozes) {
siblings.push(...questionText.matchAll(/\*\*(.*?)\*\*/gm));
}
if (settings.convertCurlyBracketsToClozes) {
siblings.push(...questionText.matchAll(/{{(.*?)}}/gm));
}
siblings.sort((a, b) => {
if (a.index < b.index) {
return -1;
}
if (a.index > b.index) {
return 1;
}
return 0;
});
let front, back;
const result = [];
for (const m of siblings) {
const deletionStart = m.index, deletionEnd = deletionStart + m[0].length;
front = questionText.substring(0, deletionStart) + QuestionType_ClozeUtil.renderClozeFront() + questionText.substring(deletionEnd);
front = front.replace(/==/gm, "").replace(/\*\*/gm, "").replace(/{{/gm, "").replace(/}}/gm, "");
back = questionText.substring(0, deletionStart) + QuestionType_ClozeUtil.renderClozeBack(
questionText.substring(deletionStart, deletionEnd)
) + questionText.substring(deletionEnd);
back = back.replace(/==/gm, "").replace(/\*\*/gm, "").replace(/{{/gm, "").replace(/}}/gm, "");
result.push(new CardFrontBack(front, back));
}
return result;
}
};
var QuestionType_ClozeUtil = class {
static renderClozeFront() {
return "<span style='color:#2196f3'>[...]</span>";
}
static renderClozeBack(str) {
return "<span style='color:#2196f3'>" + str + "</span>";
}
};
var QuestionTypeFactory = class {
static create(questionType) {
let handler;
switch (questionType) {
case 0 /* SingleLineBasic */:
handler = new QuestionType_SingleLineBasic();
break;
case 1 /* SingleLineReversed */:
handler = new QuestionType_SingleLineReversed();
break;
case 2 /* MultiLineBasic */:
handler = new QuestionType_MultiLineBasic();
break;
case 3 /* MultiLineReversed */:
handler = new QuestionType_MultiLineReversed();
break;
case 4 /* Cloze */:
handler = new QuestionType_Cloze();
break;
}
return handler;
}
};
// src/NoteQuestionParser.ts
var ParsedQuestionInfo = class {
constructor(cardType, cardText, lineNo) {
this.cardType = cardType;
this.cardText = cardText;
this.lineNo = lineNo;
}
};
var NoteQuestionParser = class {
constructor(settings) {
this.settings = settings;
}
async createQuestionList(noteFile, folderTopicPath) {
this.noteFile = noteFile;
const noteText = await noteFile.read();
let noteTopicPath;
if (this.settings.convertFoldersToDecks) {
noteTopicPath = folderTopicPath;
} else {
const tagList = noteFile.getAllTags();
noteTopicPath = this.determineTopicPathFromTags(tagList);
}
const result = this.doCreateQuestionList(noteText, noteTopicPath);
return result;
}
doCreateQuestionList(noteText, noteTopicPath) {
this.noteText = noteText;
this.noteTopicPath = noteTopicPath;
const result = [];
const parsedQuestionInfoList = this.parseQuestions();
for (const t2 of parsedQuestionInfoList) {
const parsedQuestionInfo = new ParsedQuestionInfo(t2[0], t2[1], t2[2]);
const question = this.createQuestionObject(parsedQuestionInfo);
const cardFrontBackList = CardFrontBackUtil.expand(
question.questionType,
question.questionText.actualQuestion,
this.settings
);
let cardScheduleInfoList = NoteCardScheduleParser.createCardScheduleInfoList(question.questionText.original);
const correctLength = cardFrontBackList.length;
if (cardScheduleInfoList.length > correctLength) {
question.hasChanged = true;
cardScheduleInfoList = cardScheduleInfoList.slice(0, correctLength);
}
const cardList = this.createCardList(cardFrontBackList, cardScheduleInfoList);
question.setCardList(cardList);
result.push(question);
}
return result;
}
parseQuestions() {
const settings = this.settings;
const result = parse2(
this.noteText,
settings.singleLineCardSeparator,
settings.singleLineReversedCardSeparator,
settings.multilineCardSeparator,
settings.multilineReversedCardSeparator,
settings.convertHighlightsToClozes,
settings.convertBoldTextToClozes,
settings.convertCurlyBracketsToClozes
);
return result;
}
createQuestionObject(parsedQuestionInfo) {
const { cardType, cardText, lineNo } = parsedQuestionInfo;
const questionContext = this.noteFile.getQuestionContext(lineNo);
const result = Question.Create(
this.settings,
cardType,
this.noteTopicPath,
cardText,
lineNo,
questionContext
);
return result;
}
createCardList(cardFrontBackList, cardScheduleInfoList) {
const siblings = [];
for (let i = 0; i < cardFrontBackList.length; i++) {
const { front, back } = cardFrontBackList[i];
const hasScheduleInfo = i < cardScheduleInfoList.length;
const schedule2 = cardScheduleInfoList[i];
const cardObj = new Card({
front,
back,
cardIdx: i
});
cardObj.scheduleInfo = hasScheduleInfo && !schedule2.isDummyScheduleForNewCard() ? schedule2 : null;
siblings.push(cardObj);
}
return siblings;
}
determineTopicPathFromTags(tagList) {
let result = TopicPath.emptyPath;
outer:
for (const tagToReview of this.settings.flashcardTags) {
for (const tag of tagList) {
if (tag === tagToReview || tag.startsWith(tagToReview + "/")) {
result = TopicPath.getTopicPathFromTag(tag);
break outer;
}
}
}
return result;
}
};
// src/NoteFileLoader.ts
var NoteFileLoader = class {
constructor(settings) {
this.settings = settings;
}
async load(noteFile, noteTopicPath) {
this.noteFile = noteFile;
const questionParser = new NoteQuestionParser(this.settings);
const questionList = await questionParser.createQuestionList(
noteFile,
noteTopicPath
);
const result = new Note(noteFile, questionList);
return result;
}
};
// src/SRFile.ts
var import_obsidian10 = require("obsidian");
var SrTFile = class {
constructor(vault, metadataCache, file) {
this.vault = vault;
this.metadataCache = metadataCache;
this.file = file;
}
get path() {
return this.file.path;
}
get basename() {
return this.file.basename;
}
getAllTags() {
const fileCachedData = this.metadataCache.getFileCache(this.file) || {};
return (0, import_obsidian10.getAllTags)(fileCachedData) || [];
}
getQuestionContext(cardLine) {
const fileCachedData = this.metadataCache.getFileCache(this.file) || {};
const headings = fileCachedData.headings || [];
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);
}
const result = [];
for (const headingObj of stack) {
headingObj.heading = headingObj.heading.replace(/\[\^\d+\]/gm, "").trim();
result.push(headingObj.heading);
}
return result;
}
async read() {
return await this.vault.read(this.file);
}
async write(content) {
await this.vault.modify(this.file, content);
}
};
// src/NoteEaseCalculator.ts
var NoteEaseCalculator = class {
static Calculate(note, settings) {
let totalEase = 0;
let scheduledCount = 0;
note.questionList.forEach((question) => {
question.cards.filter((card) => card.hasSchedule).forEach((card) => {
totalEase += card.scheduleInfo.ease;
scheduledCount++;
});
});
let result = 0;
if (scheduledCount > 0) {
const flashcardsInNoteAvgEase = totalEase / scheduledCount;
const flashcardContribution = Math.min(
1,
Math.log(scheduledCount + 0.5) / Math.log(64)
);
result = flashcardsInNoteAvgEase * flashcardContribution + settings.baseEase * (1 - flashcardContribution);
}
return result;
}
};
// src/util/NumberCountDict.ts
var ValueCountDict = class {
constructor() {
this.dict = {};
}
// Record<value, count>
clearCountIfMissing(value) {
if (!this.hasValue(value))
this.dict[value] = 0;
}
hasValue(value) {
return Object.prototype.hasOwnProperty.call(this.dict, value);
}
incrementCount(value) {
this.clearCountIfMissing(value);
this.dict[value]++;
}
getMaxValue() {
return Math.max(...getKeysPreserveType(this.dict)) || 0;
}
getTotalOfValueMultiplyCount() {
const v = getTypedObjectEntries(this.dict).map(([value, count]) => value * count).reduce((a, b) => a + b, 0) || 0;
return v;
}
};
// src/stats.ts
var Stats = class {
constructor() {
this.eases = new ValueCountDict();
this.intervals = new ValueCountDict();
this.delayedDays = new ValueCountDict();
this.newCount = 0;
this.youngCount = 0;
this.matureCount = 0;
}
get totalCount() {
return this.youngCount + this.matureCount;
}
incrementNew() {
this.newCount++;
}
update(delayedDays, interval, ease) {
this.intervals.incrementCount(interval);
this.eases.incrementCount(ease);
this.delayedDays.incrementCount(delayedDays);
if (interval >= 32) {
this.matureCount++;
} else {
this.youngCount++;
}
}
getMaxInterval() {
return this.intervals.getMaxValue();
}
getAverageInterval() {
return this.intervals.getTotalOfValueMultiplyCount() / this.totalCount;
}
getAverageEases() {
return this.eases.getTotalOfValueMultiplyCount() / this.totalCount;
}
};
// src/DeckTreeStatsCalculator.ts
var DeckTreeStatsCalculator = class {
calculate(deckTree) {
const iteratorOrder = {
deckOrder: 0 /* Sequential */,
cardListOrder: 1 /* DueFirst */,
cardOrder: 0 /* Sequential */
};
const iterator = new DeckTreeIterator(
iteratorOrder,
1 /* CloneBeforeUse */
);
const result = new Stats();
iterator.setDeck(deckTree);
while (iterator.nextCard()) {
const card = iterator.currentCard;
if (card.hasSchedule) {
const schedule2 = card.scheduleInfo;
result.update(schedule2.delayBeforeReviewDaysInt, schedule2.interval, schedule2.ease);
} else {
result.incrementNew();
}
}
return result;
}
};
// src/NoteEaseList.ts
var NoteEaseList = class {
constructor(settings) {
this.dict = {};
this.settings = settings;
}
get baseEase() {
return this.settings.baseEase;
}
hasEaseForPath(path) {
return Object.prototype.hasOwnProperty.call(this.dict, path);
}
getEaseByPath(path) {
let ease = null;
if (this.hasEaseForPath(path)) {
ease = Math.round(this.dict[path]);
}
return ease;
}
setEaseForPath(path, ease) {
this.dict[path] = ease;
}
};
// src/QuestionPostponementList.ts
var QuestionPostponementList = class {
constructor(plugin, settings, list) {
this.plugin = plugin;
this.settings = settings;
this.list = list;
}
clear() {
this.list.splice(0);
}
add(question) {
if (!this.includes(question))
this.list.push(question.questionText.textHash);
}
includes(question) {
return this.list.includes(question.questionText.textHash);
}
async write() {
if (this.plugin == null)
return;
await this.plugin.savePluginData();
}
};
// src/main.ts
var DEFAULT_DATA = {
settings: DEFAULT_SETTINGS,
buryDate: "",
buryList: [],
historyDeck: null
};
var SRPlugin = class _SRPlugin extends import_obsidian11.Plugin {
constructor() {
super(...arguments);
this.syncLock = false;
this.reviewDecks = {};
this.incomingLinks = {};
this.pageranks = {};
this.dueNotesCount = 0;
this.dueDatesNotes = {};
// Record<# of days in future, due count>
this.deckTree = new Deck2("root", null);
}
async onload() {
await this.loadPluginData();
this.easeByPath = new NoteEaseList(this.data.settings);
this.questionPostponementList = new QuestionPostponementList(
this,
this.data.settings,
this.data.buryList
);
appIcon();
this.statusBar = this.addStatusBarItem();
this.statusBar.classList.add("mod-clickable");
this.statusBar.setAttribute("aria-label", t("OPEN_NOTE_FOR_REVIEW"));
this.statusBar.setAttribute("aria-label-position", "top");
this.statusBar.addEventListener("click", async () => {
if (!this.syncLock) {
await this.sync();
this.reviewNextNoteModal();
}
});
this.addRibbonIcon("SpacedRepIcon", t("REVIEW_CARDS"), async () => {
if (!this.syncLock) {
await this.sync();
this.openFlashcardModal(
this.deckTree,
this.remainingDeckTree,
1 /* Review */
);
}
});
if (!this.data.settings.disableFileMenuReviewOptions) {
this.registerEvent(
this.app.workspace.on("file-menu", (menu, fileish) => {
if (fileish instanceof import_obsidian11.TFile && fileish.extension === "md") {
menu.addItem((item) => {
item.setTitle(t("REVIEW_EASY_FILE_MENU")).setIcon("SpacedRepIcon").onClick(() => {
this.saveReviewResponse(fileish, 0 /* Easy */);
});
});
menu.addItem((item) => {
item.setTitle(t("REVIEW_GOOD_FILE_MENU")).setIcon("SpacedRepIcon").onClick(() => {
this.saveReviewResponse(fileish, 1 /* Good */);
});
});
menu.addItem((item) => {
item.setTitle(t("REVIEW_HARD_FILE_MENU")).setIcon("SpacedRepIcon").onClick(() => {
this.saveReviewResponse(fileish, 2 /* Hard */);
});
});
}
})
);
}
this.addCommand({
id: "srs-note-review-open-note",
name: t("OPEN_NOTE_FOR_REVIEW"),
callback: async () => {
if (!this.syncLock) {
await this.sync();
this.reviewNextNoteModal();
}
}
});
this.addCommand({
id: "srs-note-review-easy",
name: t("REVIEW_NOTE_EASY_CMD"),
callback: () => {
const openFile = this.app.workspace.getActiveFile();
if (openFile && openFile.extension === "md") {
this.saveReviewResponse(openFile, 0 /* Easy */);
}
}
});
this.addCommand({
id: "srs-note-review-good",
name: t("REVIEW_NOTE_GOOD_CMD"),
callback: () => {
const openFile = this.app.workspace.getActiveFile();
if (openFile && openFile.extension === "md") {
this.saveReviewResponse(openFile, 1 /* Good */);
}
}
});
this.addCommand({
id: "srs-note-review-hard",
name: t("REVIEW_NOTE_HARD_CMD"),
callback: () => {
const openFile = this.app.workspace.getActiveFile();
if (openFile && openFile.extension === "md") {
this.saveReviewResponse(openFile, 2 /* Hard */);
}
}
});
this.addCommand({
id: "srs-review-flashcards",
name: t("REVIEW_ALL_CARDS"),
callback: async () => {
if (!this.syncLock) {
await this.sync();
this.openFlashcardModal(
this.deckTree,
this.remainingDeckTree,
1 /* Review */
);
}
}
});
this.addCommand({
id: "srs-cram-flashcards",
name: t("CRAM_ALL_CARDS"),
callback: async () => {
await this.sync();
this.openFlashcardModal(this.deckTree, this.deckTree, 0 /* Cram */);
}
});
this.addCommand({
id: "srs-review-flashcards-in-note",
name: t("REVIEW_CARDS_IN_NOTE"),
callback: async () => {
const openFile = this.app.workspace.getActiveFile();
if (openFile && openFile.extension === "md") {
this.openFlashcardModalForSingleNote(openFile, 1 /* Review */);
}
}
});
this.addCommand({
id: "srs-cram-flashcards-in-note",
name: t("CRAM_CARDS_IN_NOTE"),
callback: async () => {
const openFile = this.app.workspace.getActiveFile();
if (openFile && openFile.extension === "md") {
this.openFlashcardModalForSingleNote(openFile, 0 /* Cram */);
}
}
});
this.addCommand({
id: "srs-view-stats",
name: t("VIEW_STATS"),
callback: async () => {
if (!this.syncLock) {
await this.sync();
new StatsModal(this.app, this).open();
}
}
});
this.addSettingTab(new SRSettingTab(this.app, this));
this.app.workspace.onLayoutReady(() => {
this.initView();
setTimeout(async () => {
if (!this.syncLock) {
await this.sync();
}
}, 2e3);
});
}
onunload() {
this.app.workspace.getLeavesOfType(REVIEW_QUEUE_VIEW_TYPE).forEach((leaf) => leaf.detach());
}
async openFlashcardModalForSingleNote(noteFile, reviewMode) {
const topicPath = this.findTopicPath(this.createSrTFile(noteFile));
const note = await this.loadNote(noteFile, topicPath);
const deckTree = new Deck2("root", null);
note.appendCardsToDeck(deckTree);
const remainingDeckTree = DeckTreeFilter.filterForRemainingCards(
this.questionPostponementList,
deckTree,
reviewMode
);
this.openFlashcardModal(deckTree, remainingDeckTree, reviewMode);
}
openFlashcardModal(fullDeckTree, remainingDeckTree, reviewMode) {
const deckIterator = _SRPlugin.createDeckTreeIterator(this.data.settings);
const cardScheduleCalculator = new CardScheduleCalculator(
this.data.settings,
this.easeByPath
);
const reviewSequencer = new FlashcardReviewSequencer(
reviewMode,
deckIterator,
this.data.settings,
cardScheduleCalculator,
this.questionPostponementList
);
reviewSequencer.setDeckTree(fullDeckTree, remainingDeckTree);
new FlashcardModal(this.app, this, this.data.settings, reviewSequencer, reviewMode).open();
}
static createDeckTreeIterator(settings) {
const iteratorOrder = {
deckOrder: 0 /* Sequential */,
cardListOrder: 1 /* DueFirst */,
cardOrder: settings.randomizeCardOrder ? 1 /* Random */ : 0 /* Sequential */
};
return new DeckTreeIterator(iteratorOrder, 0 /* UpdatedByIterator */);
}
async sync() {
if (this.syncLock) {
return;
}
this.syncLock = true;
graph.reset();
this.easeByPath = new NoteEaseList(this.data.settings);
this.incomingLinks = {};
this.pageranks = {};
this.dueNotesCount = 0;
this.dueDatesNotes = {};
this.reviewDecks = {};
const fullDeckTree = new Deck2("root", null);
const now = window.moment(Date.now());
const todayDate = now.format("YYYY-MM-DD");
if (todayDate !== this.data.buryDate) {
this.data.buryDate = todayDate;
this.questionPostponementList.clear();
await this.savePluginData();
}
const notes = this.app.vault.getMarkdownFiles();
for (const noteFile of notes) {
if (this.data.settings.noteFoldersToIgnore.some(
(folder) => noteFile.path.startsWith(folder)
)) {
continue;
}
if (this.incomingLinks[noteFile.path] === void 0) {
this.incomingLinks[noteFile.path] = [];
}
const links = this.app.metadataCache.resolvedLinks[noteFile.path] || {};
for (const targetPath in links) {
if (this.incomingLinks[targetPath] === void 0)
this.incomingLinks[targetPath] = [];
if (targetPath.split(".").pop().toLowerCase() === "md") {
this.incomingLinks[targetPath].push({
sourcePath: noteFile.path,
linkCount: links[targetPath]
});
graph.link(noteFile.path, targetPath, links[targetPath]);
}
}
const topicPath = this.findTopicPath(this.createSrTFile(noteFile));
if (topicPath.hasPath) {
const note = await this.loadNote(noteFile, topicPath);
const flashcardsInNoteAvgEase = NoteEaseCalculator.Calculate(
note,
this.data.settings
);
note.appendCardsToDeck(fullDeckTree);
if (flashcardsInNoteAvgEase > 0) {
this.easeByPath.setEaseForPath(note.filePath, flashcardsInNoteAvgEase);
}
}
const fileCachedData = this.app.metadataCache.getFileCache(noteFile) || {};
const frontmatter = fileCachedData.frontmatter || {};
const tags = (0, import_obsidian11.getAllTags)(fileCachedData) || [];
let shouldIgnore = true;
const matchedNoteTags = [];
for (const tagToReview of this.data.settings.tagsToReview) {
if (tags.some((tag) => tag === tagToReview || tag.startsWith(tagToReview + "/"))) {
if (!Object.prototype.hasOwnProperty.call(this.reviewDecks, tagToReview)) {
this.reviewDecks[tagToReview] = new ReviewDeck(tagToReview);
}
matchedNoteTags.push(tagToReview);
shouldIgnore = false;
break;
}
}
if (shouldIgnore) {
continue;
}
if (!(Object.prototype.hasOwnProperty.call(frontmatter, "sr-due") && Object.prototype.hasOwnProperty.call(frontmatter, "sr-interval") && Object.prototype.hasOwnProperty.call(frontmatter, "sr-ease"))) {
for (const matchedNoteTag of matchedNoteTags) {
this.reviewDecks[matchedNoteTag].newNotes.push(noteFile);
}
continue;
}
const dueUnix = window.moment(frontmatter["sr-due"], ["YYYY-MM-DD", "DD-MM-YYYY", "ddd MMM DD YYYY"]).valueOf();
for (const matchedNoteTag of matchedNoteTags) {
this.reviewDecks[matchedNoteTag].scheduledNotes.push({ note: noteFile, dueUnix });
if (dueUnix <= now.valueOf()) {
this.reviewDecks[matchedNoteTag].dueNotesCount++;
}
}
let ease;
if (this.easeByPath.hasEaseForPath(noteFile.path)) {
ease = (this.easeByPath.getEaseByPath(noteFile.path) + frontmatter["sr-ease"]) / 2;
} else {
ease = frontmatter["sr-ease"];
}
this.easeByPath.setEaseForPath(noteFile.path, ease);
if (dueUnix <= now.valueOf()) {
this.dueNotesCount++;
}
const nDays = Math.ceil((dueUnix - now.valueOf()) / (24 * 3600 * 1e3));
if (!Object.prototype.hasOwnProperty.call(this.dueDatesNotes, nDays)) {
this.dueDatesNotes[nDays] = 0;
}
this.dueDatesNotes[nDays]++;
}
graph.rank(0.85, 1e-6, (node, rank2) => {
this.pageranks[node] = rank2 * 1e4;
});
this.deckTree = DeckTreeFilter.filterForReviewableCards(fullDeckTree);
this.deckTree.sortSubdecksList();
this.remainingDeckTree = DeckTreeFilter.filterForRemainingCards(
this.questionPostponementList,
this.deckTree,
1 /* Review */
);
const calc = new DeckTreeStatsCalculator();
this.cardStats = calc.calculate(this.deckTree);
if (this.data.settings.showDebugMessages) {
console.log(`SR: ${t("EASES")}`, this.easeByPath.dict);
console.log(`SR: ${t("DECKS")}`, this.deckTree);
}
for (const deckKey in this.reviewDecks) {
this.reviewDecks[deckKey].sortNotes(this.pageranks);
}
if (this.data.settings.showDebugMessages) {
console.log(
"SR: " + t("SYNC_TIME_TAKEN", {
t: Date.now() - now.valueOf()
})
);
}
this.statusBar.setText(
t("STATUS_BAR", {
dueNotesCount: this.dueNotesCount,
dueFlashcardsCount: this.remainingDeckTree.getCardCount(2 /* All */, true)
})
);
if (this.data.settings.enableNoteReviewPaneOnStartup)
this.reviewQueueView.redraw();
this.syncLock = false;
}
async loadNote(noteFile, topicPath) {
const loader = new NoteFileLoader(this.data.settings);
const note = await loader.load(this.createSrTFile(noteFile), topicPath);
if (note.hasChanged)
note.writeNoteFile(this.data.settings);
return note;
}
async saveReviewResponse(note, response) {
const fileCachedData = this.app.metadataCache.getFileCache(note) || {};
const frontmatter = fileCachedData.frontmatter || {};
const tags = (0, import_obsidian11.getAllTags)(fileCachedData) || [];
if (this.data.settings.noteFoldersToIgnore.some((folder) => note.path.startsWith(folder))) {
new import_obsidian11.Notice(t("NOTE_IN_IGNORED_FOLDER"));
return;
}
let shouldIgnore = true;
for (const tag of tags) {
if (this.data.settings.tagsToReview.some(
(tagToReview) => tag === tagToReview || tag.startsWith(tagToReview + "/")
)) {
shouldIgnore = false;
break;
}
}
if (shouldIgnore) {
new import_obsidian11.Notice(t("PLEASE_TAG_NOTE"));
return;
}
let fileText = await this.app.vault.read(note);
let ease, interval, delayBeforeReview;
const now = Date.now();
if (!(Object.prototype.hasOwnProperty.call(frontmatter, "sr-due") && Object.prototype.hasOwnProperty.call(frontmatter, "sr-interval") && Object.prototype.hasOwnProperty.call(frontmatter, "sr-ease"))) {
let linkTotal = 0, linkPGTotal = 0, totalLinkCount = 0;
for (const statObj of this.incomingLinks[note.path] || []) {
const ease2 = this.easeByPath.getEaseByPath(statObj.sourcePath);
if (ease2) {
linkTotal += statObj.linkCount * this.pageranks[statObj.sourcePath] * ease2;
linkPGTotal += this.pageranks[statObj.sourcePath] * statObj.linkCount;
totalLinkCount += statObj.linkCount;
}
}
const outgoingLinks = this.app.metadataCache.resolvedLinks[note.path] || {};
for (const linkedFilePath in outgoingLinks) {
const ease2 = this.easeByPath.getEaseByPath(linkedFilePath);
if (ease2) {
linkTotal += outgoingLinks[linkedFilePath] * this.pageranks[linkedFilePath] * ease2;
linkPGTotal += this.pageranks[linkedFilePath] * outgoingLinks[linkedFilePath];
totalLinkCount += outgoingLinks[linkedFilePath];
}
}
const linkContribution = this.data.settings.maxLinkFactor * Math.min(1, Math.log(totalLinkCount + 0.5) / Math.log(64));
ease = (1 - linkContribution) * this.data.settings.baseEase + (totalLinkCount > 0 ? linkContribution * linkTotal / linkPGTotal : linkContribution * this.data.settings.baseEase);
if (this.easeByPath.hasEaseForPath(note.path)) {
ease = (ease + this.easeByPath.getEaseByPath(note.path)) / 2;
}
ease = Math.round(ease);
interval = 1;
delayBeforeReview = 0;
} else {
interval = frontmatter["sr-interval"];
ease = frontmatter["sr-ease"];
delayBeforeReview = now - window.moment(frontmatter["sr-due"], ["YYYY-MM-DD", "DD-MM-YYYY", "ddd MMM DD YYYY"]).valueOf();
}
const schedObj = schedule(
response,
interval,
ease,
delayBeforeReview,
this.data.settings,
this.dueDatesNotes
);
interval = schedObj.interval;
ease = schedObj.ease;
const due = window.moment(now + interval * 24 * 3600 * 1e3);
const dueString = due.format("YYYY-MM-DD");
if (SCHEDULING_INFO_REGEX.test(fileText)) {
const schedulingInfo = SCHEDULING_INFO_REGEX.exec(fileText);
fileText = fileText.replace(
SCHEDULING_INFO_REGEX,
`---
${schedulingInfo[1]}sr-due: ${dueString}
sr-interval: ${interval}
sr-ease: ${ease}
${schedulingInfo[5]}---`
);
} else if (YAML_FRONT_MATTER_REGEX.test(fileText)) {
const existingYaml = YAML_FRONT_MATTER_REGEX.exec(fileText);
fileText = fileText.replace(
YAML_FRONT_MATTER_REGEX,
`---
${existingYaml[1]}sr-due: ${dueString}
sr-interval: ${interval}
sr-ease: ${ease}
---`
);
} else {
fileText = `---
sr-due: ${dueString}
sr-interval: ${interval}
sr-ease: ${ease}
---
${fileText}`;
}
if (this.data.settings.burySiblingCards) {
const topicPath = this.findTopicPath(this.createSrTFile(note));
const noteX = await this.loadNote(note, topicPath);
for (const question of noteX.questionList) {
this.data.buryList.push(question.questionText.textHash);
}
await this.savePluginData();
}
await this.app.vault.modify(note, fileText);
new import_obsidian11.Notice(t("RESPONSE_RECEIVED"));
await this.sync();
if (this.data.settings.autoNextNote) {
this.reviewNextNote(this.lastSelectedReviewDeck);
}
}
async reviewNextNoteModal() {
const reviewDeckNames = Object.keys(this.reviewDecks);
if (reviewDeckNames.length === 1) {
this.reviewNextNote(reviewDeckNames[0]);
} else {
const deckSelectionModal = new ReviewDeckSelectionModal(this.app, reviewDeckNames);
deckSelectionModal.submitCallback = (deckKey) => this.reviewNextNote(deckKey);
deckSelectionModal.open();
}
}
async reviewNextNote(deckKey) {
if (!Object.prototype.hasOwnProperty.call(this.reviewDecks, deckKey)) {
new import_obsidian11.Notice(t("NO_DECK_EXISTS", { deckName: deckKey }));
return;
}
this.lastSelectedReviewDeck = deckKey;
const deck = this.reviewDecks[deckKey];
if (deck.dueNotesCount > 0) {
const index = this.data.settings.openRandomNote ? Math.floor(Math.random() * deck.dueNotesCount) : 0;
await this.app.workspace.getLeaf().openFile(deck.scheduledNotes[index].note);
return;
}
if (deck.newNotes.length > 0) {
const index = this.data.settings.openRandomNote ? Math.floor(Math.random() * deck.newNotes.length) : 0;
this.app.workspace.getLeaf().openFile(deck.newNotes[index]);
return;
}
new import_obsidian11.Notice(t("ALL_CAUGHT_UP"));
}
createSrTFile(note) {
return new SrTFile(this.app.vault, this.app.metadataCache, note);
}
findTopicPath(note) {
return TopicPath.getTopicPathOfFile(note, this.data.settings);
}
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
});
}
}
};
/*! Bundled license information:
moment/moment.js:
(*! moment.js *)
(*! version : 2.29.4 *)
(*! authors : Tim Wood, Iskren Chernev, Moment.js contributors *)
(*! license : MIT *)
(*! momentjs.com *)
@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.3
* https://www.chartjs.org
* (c) 2023 Chart.js Contributors
* Released under the MIT License
*)
chart.js/dist/chart.js:
(*!
* Chart.js v4.3.3
* https://www.chartjs.org
* (c) 2023 Chart.js Contributors
* Released under the MIT License
*)
*/
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3BhZ2VyYW5rLmpzQDEuMC4yL25vZGVfbW9kdWxlcy9wYWdlcmFuay5qcy9saWIvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3ZodG1sQDIuMi4wL25vZGVfbW9kdWxlcy92aHRtbC9zcmMvZW1wdHktdGFncy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdmh0bWxAMi4yLjAvbm9kZV9tb2R1bGVzL3ZodG1sL3NyYy92aHRtbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbW9tZW50QDIuMjkuNC9ub2RlX21vZHVsZXMvbW9tZW50L21vbWVudC5qcyIsICIuLi9zcmMvbWFpbi50cyIsICIuLi9zcmMvc2V0dGluZ3MudHMiLCAiLi4vc3JjL2xhbmcvaGVscGVycy50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvYWYudHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL2FyLnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS9jei50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvYm4udHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL2RhLnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS9kZS50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvZW4udHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL2VuLWdiLnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS9lcy50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvZnIudHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL2hpLnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS9pZC50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvaXQudHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL2phLnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS9rby50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvbXIudHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL25sLnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS9uby50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvcGwudHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL3B0LnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS9wdC1ici50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvcm8udHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL3J1LnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS90YS50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvdGUudHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL3RoLnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS90ci50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvdWsudHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL3VyLnRzIiwgIi4uL3NyYy9sYW5nL2xvY2FsZS92aS50cyIsICIuLi9zcmMvbGFuZy9sb2NhbGUvemgtY24udHMiLCAiLi4vc3JjL2xhbmcvbG9jYWxlL3poLXR3LnRzIiwgIi4uL3NyYy9ndWkvZmxhc2hjYXJkLW1vZGFsLnRzeCIsICIuLi9zcmMvc2NoZWR1bGluZy50cyIsICIuLi9zcmMvY29uc3RhbnRzLnRzIiwgIi4uL3NyYy9Ub3BpY1BhdGgudHMiLCAiLi4vc3JjL0ZsYXNoY2FyZFJldmlld1NlcXVlbmNlci50cyIsICIuLi9zcmMvRGVjay50cyIsICIuLi9zcmMvdXRpbC91dGlscy50cyIsICIuLi9zcmMvdXRpbC9EYXRlUHJvdmlkZXIudHMiLCAiLi4vc3JjL0NhcmRTY2hlZHVsZS50cyIsICIuLi9zcmMvdXRpbC9NdWx0aUxpbmVUZXh0RmluZGVyLnRzIiwgIi4uL3NyYy9RdWVzdGlvbi50cyIsICIuLi9zcmMvZ3VpL2ZsYXNoY2FyZHMtZWRpdC1tb2RhbC50cyIsICIuLi9zcmMvdXRpbC9SZW5kZXJNYXJrZG93bldyYXBwZXIudHMiLCAiLi4vc3JjL2d1aS9zdGF0cy1tb2RhbC50c3giLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BrdXJrbGUrY29sb3JAMC4zLjIvbm9kZV9tb2R1bGVzL0BrdXJrbGUvY29sb3IvZGlzdC9jb2xvci5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuMy4zL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvaGVscGVycy9oZWxwZXJzLmNvcmUudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuMy4zL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvaGVscGVycy9oZWxwZXJzLm1hdGgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuMy4zL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvaGVscGVycy9oZWxwZXJzLmNvbGxlY3Rpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuMy4zL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvaGVscGVycy9oZWxwZXJzLmV4dHJhcy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC4zLjMvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMuZWFzaW5nLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjMuMy9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2hlbHBlcnMvaGVscGVycy5jb2xvci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC4zLjMvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUuYW5pbWF0aW9ucy5kZWZhdWx0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC4zLjMvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUubGF5b3V0cy5kZWZhdWx0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC4zLjMvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMuaW50bC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC4zLjMvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUudGlja3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuMy4zL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLnNjYWxlLmRlZmF1bHRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjMuMy9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS5kZWZhdWx0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC4zLjMvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMuY2FudmFzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjMuMy9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2hlbHBlcnMvaGVscGVycy5vcHRpb25zLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjMuMy9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2hlbHBlcnMvaGVscGVycy5jb25maWcudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuMy4zL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvaGVscGVycy9oZWxwZXJzLmN1cnZlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjMuMy9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2hlbHBlcnMvaGVscGVycy5kb20udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuMy4zL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvaGVscGVycy9oZWxwZXJzLmludGVycG9sYXRpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuMy4zL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvaGVscGVycy9oZWxwZXJzLnJ0bC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC4zLjMvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9oZWxwZXJzL2hlbHBlcnMuc2VnbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC4zLjMvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUuYW5pbWF0b3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuMy4zL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLmFuaW1hdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC4zLjMvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUuYW5pbWF0aW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC4zLjMvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUuZGF0YXNldENvbnRyb2xsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuMy4zL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29udHJvbGxlcnMvY29udHJvbGxlci5iYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuMy4zL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29udHJvbGxlcnMvY29udHJvbGxlci5idWJibGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuMy4zL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29udHJvbGxlcnMvY29udHJvbGxlci5kb3VnaG51dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC4zLjMvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb250cm9sbGVycy9jb250cm9sbGVyLmxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuMy4zL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29udHJvbGxlcnMvY29udHJvbGxlci5wb2xhckFyZWEuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuMy4zL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29udHJvbGxlcnMvY29udHJvbGxlci5waWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuMy4zL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29udHJvbGxlcnMvY29udHJvbGxlci5yYWRhci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC4zLjMvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb250cm9sbGVycy9jb250cm9sbGVyLnNjYXR0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuMy4zL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLmFkYXB0ZXJzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjMuMy9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS5pbnRlcmFjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC4zLjMvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUubGF5b3V0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC4zLjMvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbGF0Zm9ybS9wbGF0Zm9ybS5iYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjMuMy9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3BsYXRmb3JtL3BsYXRmb3JtLmJhc2ljLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjMuMy9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3BsYXRmb3JtL3BsYXRmb3JtLmRvbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC4zLjMvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbGF0Zm9ybS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC4zLjMvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUuZWxlbWVudC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC4zLjMvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUuc2NhbGUuYXV0b3NraXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuMy4zL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvY29yZS9jb3JlLnNjYWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjMuMy9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS50eXBlZFJlZ2lzdHJ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjMuMy9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS5yZWdpc3RyeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC4zLjMvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUucGx1Z2lucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC4zLjMvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9jb3JlL2NvcmUuY29uZmlnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjMuMy9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2NvcmUvY29yZS5jb250cm9sbGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjMuMy9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2VsZW1lbnRzL2VsZW1lbnQuYXJjLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjMuMy9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2VsZW1lbnRzL2VsZW1lbnQubGluZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC4zLjMvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9lbGVtZW50cy9lbGVtZW50LnBvaW50LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjMuMy9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2VsZW1lbnRzL2VsZW1lbnQuYmFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjMuMy9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3BsdWdpbnMvcGx1Z2luLmNvbG9ycy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC4zLjMvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbHVnaW5zL3BsdWdpbi5kZWNpbWF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjMuMy9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3BsdWdpbnMvcGx1Z2luLmZpbGxlci9maWxsZXIuc2VnbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC4zLjMvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbHVnaW5zL3BsdWdpbi5maWxsZXIvZmlsbGVyLmhlbHBlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC4zLjMvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbHVnaW5zL3BsdWdpbi5maWxsZXIvZmlsbGVyLm9wdGlvbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuMy4zL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvcGx1Z2lucy9wbHVnaW4uZmlsbGVyL2ZpbGxlci50YXJnZXQuc3RhY2suanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuMy4zL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvcGx1Z2lucy9wbHVnaW4uZmlsbGVyL3NpbXBsZUFyYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC4zLjMvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbHVnaW5zL3BsdWdpbi5maWxsZXIvZmlsbGVyLnRhcmdldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC4zLjMvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbHVnaW5zL3BsdWdpbi5maWxsZXIvZmlsbGVyLmRyYXdpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJ0LmpzQDQuMy4zL25vZGVfbW9kdWxlcy9jaGFydC5qcy9zcmMvcGx1Z2lucy9wbHVnaW4uZmlsbGVyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjMuMy9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3BsdWdpbnMvcGx1Z2luLmxlZ2VuZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC4zLjMvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbHVnaW5zL3BsdWdpbi50aXRsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC4zLjMvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbHVnaW5zL3BsdWdpbi5zdWJ0aXRsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC4zLjMvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9wbHVnaW5zL3BsdWdpbi50b29sdGlwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjMuMy9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3NjYWxlcy9zY2FsZS5jYXRlZ29yeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC4zLjMvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9zY2FsZXMvc2NhbGUubGluZWFyYmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC4zLjMvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9zY2FsZXMvc2NhbGUubGluZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjMuMy9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3NjYWxlcy9zY2FsZS5sb2dhcml0aG1pYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY2hhcnQuanNANC4zLjMvbm9kZV9tb2R1bGVzL2NoYXJ0LmpzL3NyYy9zY2FsZXMvc2NhbGUucmFkaWFsTGluZWFyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjMuMy9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3NjYWxlcy9zY2FsZS50aW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjMuMy9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL3NjYWxlcy9zY2FsZS50aW1lc2VyaWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jaGFydC5qc0A0LjMuMy9ub2RlX21vZHVsZXMvY2hhcnQuanMvc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9ndWkvc2lkZWJhci50cyIsICIuLi9zcmMvUmV2aWV3RGVjay50cyIsICIuLi9zcmMvaWNvbnMvYXBwaWNvbi50cyIsICIuLi9zcmMvdXRpbC9SYW5kb21OdW1iZXJQcm92aWRlci50cyIsICIuLi9zcmMvRGVja1RyZWVJdGVyYXRvci50cyIsICIuLi9zcmMvTm90ZS50cyIsICIuLi9zcmMvQ2FyZC50cyIsICIuLi9zcmMvcGFyc2VyLnRzIiwgIi4uL3NyYy9RdWVzdGlvblR5cGUudHMiLCAiLi4vc3JjL05vdGVRdWVzdGlvblBhcnNlci50cyIsICIuLi9zcmMvTm90ZUZpbGVMb2FkZXIudHMiLCAiLi4vc3JjL1NSRmlsZS50cyIsICIuLi9zcmMvTm90ZUVhc2VDYWxjdWxhdG9yLnRzIiwgIi4uL3NyYy91dGlsL051bWJlckNvdW50RGljdC50cyIsICIuLi9zcmMvc3RhdHMudHMiLCAiLi4vc3JjL0RlY2tUcmVlU3RhdHNDYWxjdWxhdG9yLnRzIiwgIi4uL3NyYy9Ob3RlRWFzZUxpc3QudHMiLCAiLi4vc3JjL1F1ZXN0aW9uUG9zdHBvbmVtZW50TGlzdC50cyJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBLHdGQUFBQSxTQUFBO0FBQUE7QUFFQSxhQUFTLE9BQU8sUUFBUUMsV0FBVTtBQUM5QixVQUFLLE9BQU8sV0FBVyxZQUFjLE9BQU9BLGNBQWEsWUFBYTtBQUNsRSxpQkFBUyxPQUFPLFFBQVE7QUFDcEIsY0FBSSxPQUFPLGVBQWUsR0FBRyxNQUFNLE1BQU07QUFDckMsZ0JBQUlBLFVBQVMsS0FBSyxPQUFPLEdBQUcsQ0FBQyxNQUFNLE9BQU87QUFDdEM7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUVBLElBQUFELFFBQU8sVUFBVyxXQUFZO0FBQzFCLFVBQUksT0FBTztBQUFBLFFBQ1AsT0FBTztBQUFBLFFBQ1AsT0FBTyxDQUFDO0FBQUEsUUFDUixPQUFPLENBQUM7QUFBQSxNQUNaO0FBRUEsV0FBSyxPQUFPLFNBQVUsUUFBUSxRQUFRLFFBQVE7QUFDMUMsWUFBSyxTQUFTLE1BQU0sTUFBTSxRQUFVLFdBQVcsTUFBTztBQUNsRCxtQkFBUztBQUFBLFFBQ2I7QUFFQSxpQkFBUyxXQUFXLE1BQU07QUFFMUIsWUFBSSxLQUFLLE1BQU0sZUFBZSxNQUFNLE1BQU0sTUFBTTtBQUM1QyxlQUFLO0FBQ0wsZUFBSyxNQUFNLE1BQU0sSUFBSTtBQUFBLFlBQ2pCLFFBQVE7QUFBQSxZQUNSLFVBQVU7QUFBQSxVQUNkO0FBQUEsUUFDSjtBQUVBLGFBQUssTUFBTSxNQUFNLEVBQUUsWUFBWTtBQUUvQixZQUFJLEtBQUssTUFBTSxlQUFlLE1BQU0sTUFBTSxNQUFNO0FBQzVDLGVBQUs7QUFDTCxlQUFLLE1BQU0sTUFBTSxJQUFJO0FBQUEsWUFDakIsUUFBUTtBQUFBLFlBQ1IsVUFBVTtBQUFBLFVB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Q1YsR0FBRztBQUFBLEVBQ0gsR0FBRztBQUFBLEVBQ0gsR0FBRztBQUFBLEVBQ0gsR0FBRztBQUFBLEVBQ0gsR0FBRztBQUFBLEVBQ0gsR0FBRztBQUFBLEVBQ0gsR0FBRztBQUFBLEVBQ0gsR0FBRztBQUFBLEVBQ0gsR0FBRztBQUFBLEVBQ0gsR0FBRztBQUFBLEVBQ0gsR0FBRztBQUFBLEVBQ0gsR0FBRztBQUFBLEVBQ0gsR0FBRztBQUFBLEVBQ0gsR0FBRztBQUFBLEVBQ0gsR0FBRztBQUFBLEVBQ0gsR0FBRztBQUFBLEVBQ0gsR0FBRztBQUFBLEVBQ0gsR0FBRztBQUFBLEVBQ0gsR0FBRztBQUFBLEVBQ0gsR0FBRztBQUFBLEVBQ0gsR0FBRztBQUFBLEVBQ0gsR0FBRztBQUFBLEVBQ0gsR0FBRztBQUFBLEVBQ0gsR0FBRztBQUFBLEVBQ0gsR0FBRztBQUFBLEVBQ0gsR0FBRztBQUFBLEVBQ0gsR0FBRztBQUNMO0FBQ0EsSUFBTSxVQUFVO0FBQUEsRUFDZCxRQUFRO0FBQUEsRUFDUixhQUFhO0FBQUEsRUFDYixNQUFNO0FBQUEsRUFDTixXQUFXO0FBQUEsRUFDWCxNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxjQUFjO0FBQUEsRUFDZCxJQUFJO0FBQUEsRUFDSixTQUFTO0FBQUEsRUFDVCxNQUFNO0FBQUEsRUFDTixXQUFXO0FBQUEsRUFDWCxRQUFRO0FBQUEsRUFDUixVQUFVO0FBQUEsRUFDVixTQUFTO0FBQUEsRUFDVCxLQUFLO0FBQUEsRUFDTCxhQUFhO0FBQUEsRUFDYixTQUFTO0FBQUEsRUFDVCxTQUFTO0FBQUEsRUFDVCxNQUFNO0FBQUEsRUFDTixLQUFLO0FBQUEsRUFDTCxPQUFPO0FBQUEsRUFDUCxTQUFTO0FBQUEsRUFDVCxNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixRQUFRO0FBQUEsRUFDUixTQUFTO0FBQUEsRUFDVCxVQUFVO0FBQUEsRUFDVixRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxLQUFLO0FBQUEsRUFDTCxRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxLQUFLO0FBQUEsRUFDTCxRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixVQUFVO0FBQUEsRUFDVixRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixVQUFVO0FBQUEsRUFDVixVQUFVO0FBQUEsRUFDVixVQUFVO0FBQUEsRUFDVixVQUFVO0FBQUEsRUFDVixRQUFRO0FBQUEsRUFDUixTQUFTO0FBQUEsRUFDVCxXQUFXO0FBQUEsRUFDWCxLQUFLO0FBQUEsRUFDTCxRQUFRO0FBQUEsRUFDUixLQUFLO0FBQUEsRUFDTCxLQUFLO0FBQUEsRUFDTCxPQUFPO0FBQUEsRUFDUCxLQUFLO0FBQUEsRUFDTCxTQUFTO0FBQUEsRUFDVCxRQUFRO0FBQUEsRUFDUixTQUFTO0FBQUEsRUFDVCxPQUFPO0FBQUEsRUFDUCxNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixXQUFXO0FBQUEsRUFDWCxTQUFTO0FBQUEsRUFDVCxZQUFZO0FBQUEsRUFDWixLQUFLO0FBQUEsRUFDTCxNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxXQUFXO0FBQUEsRUFDWCxNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxTQUFTO0FBQUEsRUFDVCxLQUFLO0FBQUEsRUFDTCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQUEsRUFDVCxLQUFLO0FBQUEsRUFDTCxRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxZQUFZO0FBQUEsRUFDWixLQUFLO0FBQUEsRUFDTCxPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixNQUFNO0FBQUEsRUFDTixXQUFXO0FBQUEsRUFDWCxLQUFLO0FBQUEsRUFDTCxVQUFVO0FBQUEsRUFDVixZQUFZO0FBQUEsRUFDWixTQUFTO0FBQUEsRUFDVCxVQUFVO0FBQUEsRUFDVixTQUFTO0FBQUEsRUFDVCxZQUFZO0FBQUEsRUFDWixNQUFNO0FBQUEsRUFDTixRQUFRO0FBQUEsRUFDUixNQUFNO0FBQUEsRUFDTixTQUFTO0FBQUEsRUFDVCxPQUFPO0FBQUEsRUFDUCxTQUFTO0FBQUEsRUFDVCxNQUFNO0FBQUEsRUFDTixXQUFXO0FBQUEsRUFDWCxRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxZQUFZO0FBQUEsRUFDWixXQUFXO0FBQUEsRUFDWCxTQUFTO0FBQUEsRUFDVCxNQUFNO0FBQUEsRUFDTixLQUFLO0FBQUEsRUFDTCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQUEsRUFDVCxPQUFPO0FBQUEsRUFDUCxhQUFhO0FBQUEsRUFDYixJQUFJO0FBQUEsRUFDSixVQUFVO0FBQUEsRUFDVixPQUFPO0FBQUEsRUFDUCxXQUFXO0FBQUEsRUFDWCxPQUFPO0FBQUEsRUFDUCxXQUFXO0FBQUEsRUFDWCxPQUFPO0FBQUEsRUFDUCxTQUFTO0FBQUEsRUFDVCxPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxLQUFLO0FBQUEsRUFDTCxNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixVQUFVO0FBQUEsRUFDVixRQUFRO0FBQUEsRUFDUixLQUFLO0FBQUEsRUFDTCxLQUFLO0FBQUEsRUFDTCxPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixJQUFJO0FBQUEsRUFDSixPQUFPO0FBQUEsRUFDUCxLQUFLO0FBQUEsRUFDTCxNQUFNO0FBQUEsRUFDTixXQUFXO0FBQUEsRUFDWCxJQUFJO0FBQUEsRUFDSixPQUFPO0FBQ1Q7QUFDQSxTQUFTLFNBQVM7QUFDaEIsUUFBTSxXQUFXLENBQUM7QUFDbEIsUUFBTSxPQUFPLE9BQU8s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QVMsaUNBQ25CLElBQUksVUFBVSxnQkFBZ0Isc0JBQXNCLEVBQUUsVUFBVSxHQUNsRTtBQUNFLFdBQUssSUFBSSxVQUFVLGFBQWEsS0FBSyxFQUFFLGFBQWE7QUFBQSxRQUNoRCxNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsTUFDWixDQUFDO0FBQUEsSUFDTDtBQUFBLEVBQ0o7QUFDSjsiLAogICJuYW1lcyI6IFsibW9kdWxlIiwgImNhbGxiYWNrIiwgImFscGhhIiwgImVzYyIsICJTdHJpbmciLCAic3RyIiwgInJlcGxhY2UiLCAibWFwIiwgInMiLCAic2V0SW5uZXJIVE1MQXR0ciIsICJET01BdHRyaWJ1dGVOYW1lcyIsICJzYW5pdGl6ZWQiLCAiaCIsICJuYW1lIiwgImF0dHJzIiwgInN0YWNrIiwgImkiLCAiYXJndW1lbnRzIiwgImxlbmd0aCIsICJwdXNoIiwgImNoaWxkcmVuIiwgInJldmVyc2UiLCAiZW1wdHlUYWdzIiwgImluZGV4T2YiLCAiX19odG1sIiwgImNoaWxkIiwgInBvcCIsICJtb2R1bGUiLCAiY2FsbGJhY2siLCAiaXNBcnJheSIsICJpc09iamVjdCIsICJpc051bWJlciIsICJtYXAiLCAiZm9ybWF0IiwgImxvY2FsZSIsICJ0IiwgInRvIiwgImZyb20iLCAiaXNGdW5jdGlvbiIsICJzZXQiLCAibm93IiwgInNpZ24iLCAidG9rZW4iLCAib3JkaW5hbCIsICJpIiwgImRpZmYiLCAibG9jYWxlRGF0YSIsICJoIiwgImhvdXJzIiwgIm1pbnV0ZXMiLCAibmFtZXMiLCAiZGVmYXVsdHMiLCAidG9rZW5zIiwgIm1lcmlkaWVtIiwgInllYXJzIiwgIm1vbnRocyIsICJ3ZWVrcyIsICJkYXlzIiwgInNlY29uZHMiLCAibWlsbGlzZWNvbmRzIiwgIm9mZnNldCIsICJjbG9uZSIsICJyb3VuZCIsICJ0aHJlc2hvbGRzIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAibmFtZXMiLCAiY2FsbGJhY2siLCAiYXBwIiwgImltcG9ydF9vYnNpZGlhbiIsICJEZWNrIiwgInQiLCAiaDEiLCAiaDIiLCAiaW1wb3J0X21vbWVudCIsICJtb21lbnQiLCAibW9tZW50IiwgInQiLCAic2NoZWR1bGUiLCAiaW1wb3J0X29ic2lkaWFuIiwgImFwcCIsICJyZXNvbHZlIiwgImNhbGxiYWNrIiwgImltcG9ydF9vYnNpZGlhbiIsICJhcHAiLCAibGluayIsICJoIiwgImFwcCIsICJoIiwgInNjaGVkdWxlIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfdmh0bWwiLCAiaCIsICJoIiwgImludGVycG9sYXRlIiwgInQiLCAiY29sb3IiLCAibm9vcCIsICJ1aWQiLCAiaWQiLCAiaXNOdWxsT3JVbmRlZiIsICJ2YWx1ZSIsICJpc0FycmF5IiwgIkFycmF5IiwgInR5cGUiLCAiT2JqZWN0IiwgInByb3RvdHlwZSIsICJ0b1N0cmluZyIsICJjYWxsIiwgInNsaWNlIiwgImlzT2JqZWN0IiwgImlzTnVtYmVyRmluaXRlIiwgIk51bWJlciIsICJpc0Zpbml0ZSIsICJmaW5pdGVPckRlZmF1bHQiLCAiZGVmYXVsdFZhbHVlIiwgInZhbHVlT3JEZWZhdWx0IiwgInRvUGVyY2VudGFnZSIsICJkaW1lbnNpb24iLCAiZW5kc1dpdGgiLCAicGFyc2VGbG9hdCIsICJ0b0RpbWVuc2lvbiIsICJjYWxsYmFjayIsICJmbiIsICJhcmdzIiwgInRoaXNBcmciLCAiYXBwbHkiLCAiZWFjaCIsICJsb29wYWJsZSIsICJyZXZlcnNlIiwgImkiLCAibGVuIiwgImtleXMiLCAibGVuZ3RoIiwgIl9lbGVtZW50c0VxdWFsIiwgImEwIiwgImExIiwgImlsZW4iLCAidjAiLCAidjEiLCAiZGF0YXNldEluZGV4IiwgImluZGV4IiwgImNsb25lIiwgInNvdXJjZSIsICJtYXAiLCAidGFyZ2V0IiwgImNyZWF0ZSIsICJrbGVuIiwgImsiLCAiaXNWYWxpZEtleSIsICJrZXkiLCAiaW5kZXhPZiIsICJfbWVyZ2VyIiwgIm9wdGlvbnMiLCAidHZhbCIsICJzdmFsIiwgIm1lcmdlIiwgInNvdXJjZXMiLCAibWVyZ2VyIiwgImN1cnJlbnQiLCAibWVyZ2VJZiIsICJfbWVyZ2VySWYiLCAiaGFzT3duUHJvcGVydHkiLCAia2V5UmVzb2x2ZXJzIiwgInYiLCAieCIsICJvIiwgInkiLCAiX3NwbGl0S2V5IiwgImtleSIsICJwYXJ0cyIsICJzcGxpdCIsICJrZXlzIiwgInRtcCIsICJwYXJ0IiwgImVuZHNXaXRoIiwgInNsaWNlIiwgInB1c2giLCAiX2dldEtleVJlc29sdmVyIiwgIm9iaiIsICJrIiwgInJlc29sdmVPYmplY3RLZXkiLCAicmVzb2x2ZXIiLCAiX2NhcGl0YWxpemUiLCAic3RyIiwgImNoYXJBdCIsICJ0b1VwcGVyQ2FzZSIsICJkZWZpbmVkIiwgInZhbHVlIiwgImlzRnVuY3Rpb24iLCAic2V0c0VxdWFsIiwgImEiLCAiYiIsICJzaXplIiwgIml0ZW0iLCAiaGFzIiwgIl9pc0NsaWNrRXZlbnQiLCAiZSIsICJ0eXBlIiwgIlBJIiwgIk1hdGgiLCAiVEFVIiwgIlBJVEFVIiwgIklORklOSVRZIiwgIk51bWJlciIsICJQT1NJVElWRV9JTkZJTklUWSIsICJSQURfUEVSX0RFRyIsICJIQUxGX1BJIiwgIlFVQVJURVJfUEkiLCAiVFdPX1RISVJEU19QSSIsICJsb2cxMCIsICJzaWduIiwgImFsbW9zdEVxdWFscyIsICJlcHNpbG9uIiwgImFicyIsICJuaWNlTnVtIiwgInJhbmdlIiwgInJvdW5kZWRSYW5nZSIsICJyb3VuZCIsICJuaWNlUmFuZ2UiLCAicG93IiwgImZsb29yIiwgImZyYWN0aW9uIiwgIm5pY2VGcmFjdGlvbiIsICJfZmFjdG9yaXplIiwgInJlc3VsdCIsICJzcXJ0IiwgImkiLCAic29ydCIsICJwb3AiLCAiaXNOdW1iZXIiLCAibiIsICJpc05hTiIsICJwYXJzZUZsb2F0IiwgImlzRmluaXRlIiwgImFsbW9zdFdob2xlIiwgInJvdW5kZWQiLCAiX3NldE1pbkFuZE1heEJ5S2V5IiwgImFycmF5IiwgInRhcmdldCIsICJwcm9wZXJ0eSIsICJpbGVuIiwgImxlbmd0aCIsICJtaW4iLCAibWF4IiwgInRvUmFkaWFucyIsICJkZWdyZWVzIiwgInRvRGVncmVlcyIsICJyYWRpYW5zIiwgIl9kZWNpbWFsUGxhY2VzIiwgImlzRmluaXRlTnVtYmVyIiwgInAiLCAiZ2V0QW5nbGVGcm9tUG9pbnQiLCAiY2VudHJlUG9pbnQiLCAiYW5nbGVQb2ludCIsICJkaXN0YW5jZUZyb21YQ2VudGVyIiwgImRpc3RhbmNlRnJvbVlDZW50ZXIiLCAicmFkaWFsRGlzdGFuY2VGcm9tQ2VudGVyIiwgImFuZ2xlIiwgImF0YW4yIiwgImRpc3RhbmNlIiwgImRpc3RhbmNlQmV0d2VlblBvaW50cyIsICJwdDEiLCAicHQyIiwgIl9ub3JtYWxpemVBbmdsZSIsICJhIiwgIlRBVSIsICJfYW5nbGVCZXR3ZWVuIiwgImFuZ2xlIiwgInN0YXJ0IiwgImVuZCIsICJzYW1lQW5nbGVJc0Z1bGxDaXJjbGUiLCAicyIsICJlIiwgImFuZ2xlVG9TdGFydCIsICJhbmdsZVRvRW5kIiwgInN0YXJ0VG9BbmdsZSIsICJlbmRUb0FuZ2xlIiwgIl9saW1pdFZhbHVlIiwgInZhbHVlIiwgIm1pbiIsICJtYXgiLCAiTWF0aCIsICJfaW50MTZSYW5nZSIsICJfaXNCZXR3ZWVuIiwgImVwc2lsb24iLCAiX2xvb2t1cCIsICJ0YWJsZSIsICJjbXAiLCAiaW5kZXgiLCAiaGkiLCAibGVuZ3RoIiwgImxvIiwgIm1pZCIsICJfbG9va3VwQnlLZXkiLCAia2V5IiwgImxhc3QiLCAidGkiLCAiX3Jsb29rdXBCeUtleSIsICJfZmlsdGVyQmV0d2VlbiIsICJ2YWx1ZXMiLCAic2xpY2UiLCAiYXJyYXlFdmVudHMiLCAibGlzdGVuQXJyYXlFdmVudHMiLCAiYXJyYXkiLCAibGlzdGVuZXIiLCAiX2NoYXJ0anMiLCAibGlzdGVuZXJzIiwgInB1c2giLCAiT2JqZWN0IiwgImRlZmluZVByb3BlcnR5IiwgImNvbmZpZ3VyYWJsZSIsICJlbnVtZXJhYmxlIiwgImZvckVhY2giLCAibWV0aG9kIiwgIl9jYXBpdGFsaXplIiwgImJhc2UiLCAiYXJncyIsICJyZXMiLCAiYXBwbHkiLCAib2JqZWN0IiwgInVubGlzdGVuQXJyYXlFdmVudHMiLCAic3R1YiIsICJpbmRleE9mIiwgInNwbGljZSIsICJfYXJyYXlVbmlxdWUiLCAiaXRlbXMiLCAic2V0IiwgIlNldCIsICJzaXplIiwgIkFycmF5IiwgImZyb20iLCAicmVxdWVzdEFuaW1GcmFtZSIsICJ3aW5kb3ciLCAiY2FsbGJhY2siLCAicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwgInRocm90dGxlZCIsICJmbiIsICJ0aGlzQXJnIiwgImFyZ3NUb1VzZSIsICJ0aWNraW5nIiwgImFyZ3MiLCAiY2FsbCIsICJhcHBseSIsICJkZWJvdW5jZSIsICJkZWxheSIsICJ0aW1lb3V0IiwgImNsZWFyVGltZW91dCIsICJzZXRUaW1lb3V0IiwgIl90b0xlZnRSaWdodENlbnRlciIsICJhbGlnbiIsICJfYWxpZ25TdGFydEVuZCIsICJzdGFydCIsICJlbmQiLCAiX3RleHRYIiwgImxlZnQiLCAicmlnaHQiLCAicnRsIiwgImNoZWNrIiwgImF0RWRnZSIsICJ0IiwgImVsYXN0aWNJbiIsICJzIiwgInAiLCAiTWF0aCIsICJwb3ciLCAic2luIiwgIlRBVSIsICJlbGFzdGljT3V0IiwgImVmZmVjdHMiLCAibGluZWFyIiwgImVhc2VJblF1YWQiLCAiZWFzZU91dFF1YWQiLCAiZWFzZUluT3V0UXVhZCIsICJlYXNlSW5DdWJpYyIsICJlYXNlT3V0Q3ViaWMiLCAiZWFzZUluT3V0Q3ViaWMiLCAiZWFzZUluUXVhcnQiLCAiZWFzZU91dFF1YXJ0IiwgImVhc2VJbk91dFF1YXJ0IiwgImVhc2VJblF1aW50IiwgImVhc2VPdXRRdWludCIsICJlYXNlSW5PdXRRdWludCIsICJlYXNlSW5TaW5lIiwgImNvcyIsICJIQUxGX1BJIiwgImVhc2VPdXRTaW5lIiwgImVhc2VJbk91dFNpbmUiLCAiUEkiLCAiZWFzZUluRXhwbyIsICJlYXNlT3V0RXhwbyIsICJlYXNlSW5PdXRFeHBvIiwgImVhc2VJbkNpcmMiLCAic3FydCIsICJlYXNlT3V0Q2lyYyIsICJlYXNlSW5PdXRDaXJjIiwgImVhc2VJbkVsYXN0aWMiLCAiZWFzZU91dEVsYXN0aWMiLCAiZWFzZUluT3V0RWxhc3RpYyIsICJlYXNlSW5CYWNrIiwgImVhc2VPdXRCYWNrIiwgImVhc2VJbk91dEJhY2siLCAiZWFzZUluQm91bmNlIiwgImVhc2VPdXRCb3VuY2UiLCAibSIsICJkIiwgImVhc2VJbk91dEJvdW5jZSIsICJpc1BhdHRlcm5PckdyYWRpZW50IiwgInZhbHVlIiwgInR5cGUiLCAidG9TdHJpbmciLCAiY29sb3IiLCAiQ29sb3IiLCAiZ2V0SG92ZXJDb2xvciIsICJzYXR1cmF0ZSIsICJkYXJrZW4iLCAiaGV4U3RyaW5nIiwgIm51bWJlcnMiLCAiY29sb3JzIiwgImFwcGx5QW5pbWF0aW9uc0RlZmF1bHRzIiwgImRlZmF1bHRzIiwgInNldCIsICJkZWxheSIsICJ1bmRlZmluZWQiLCAiZHVyYXRpb24iLCAiZWFzaW5nIiwgImZuIiwgImZyb20iLCAibG9vcCIsICJ0byIsICJkZXNjcmliZSIsICJfZmFsbGJhY2siLCAiX2luZGV4YWJsZSIsICJfc2NyaXB0YWJsZSIsICJuYW1lIiwgInByb3BlcnRpZXMiLCAiYWN0aXZlIiwgImFuaW1hdGlvbiIsICJyZXNpemUiLCAic2hvdyIsICJhbmltYXRpb25zIiwgInZpc2libGUiLCAiaGlkZSIsICJ2IiwgImFwcGx5TGF5b3V0c0RlZmF1bHRzIiwgImF1dG9QYWRkaW5nIiwgInBhZGRpbmciLCAidG9wIiwgInJpZ2h0IiwgImJvdHRvbSIsICJsZWZ0IiwgImludGxDYWNoZSIsICJNYXAiLCAiZ2V0TnVtYmVyRm9ybWF0IiwgImxvY2FsZSIsICJvcHRpb25zIiwgImNhY2hlS2V5IiwgIkpTT04iLCAic3RyaW5naWZ5IiwgImZvcm1hdHRlciIsICJnZXQiLCAiSW50bCIsICJOdW1iZXJGb3JtYXQiLCAiZm9ybWF0TnVtYmVyIiwgIm51bSIsICJmb3JtYXQiLCAiZm9ybWF0dGVycyIsICJ2YWx1ZXMiLCAiaXNBcnJheSIsICJudW1lcmljIiwgInRpY2tWYWx1ZSIsICJpbmRleCIsICJ0aWNrcyIsICJjaGFydCIsICJub3RhdGlvbiIsICJkZWx0YSIsICJsZW5ndGgiLCAibWF4VGljayIsICJtYXgiLCAiYWJzIiwgImNhbGN1bGF0ZURlbHRhIiwgImxvZ0RlbHRhIiwgImxvZzEwIiwgIm51bURlY2ltYWwiLCAiaXNOYU4iLCAibWluIiwgImZsb29yIiwgIm1pbmltdW1GcmFjdGlvbkRpZ2l0cyIsICJtYXhpbXVtRnJhY3Rpb25EaWdpdHMiLCAiT2JqZWN0IiwgImFzc2lnbiIsICJsb2dhcml0aG1pYyIsICJyZW1haW4iLCAic2lnbmlmaWNhbmQiLCAiaW5jbHVkZXMiLCAiY2FsbCIsICJhcHBseVNjYWxlRGVmYXVsdHMiLCAiZGlzcGxheSIsICJvZmZzZXQiLCAicmV2ZXJzZSIsICJiZWdpbkF0WmVybyIsICJib3VuZHMiLCAiZ3JhY2UiLCAiZ3JpZCIsICJsaW5lV2lkdGgiLCAiZHJhd09uQ2hhcnRBcmVhIiwgImRyYXdUaWNrcyIsICJ0aWNrTGVuZ3RoIiwgInRpY2tXaWR0aCIsICJfY3R4IiwgInRpY2tDb2xvciIsICJib3JkZXIiLCAiZGFzaCIsICJkYXNoT2Zmc2V0IiwgIndpZHRoIiwgInRpdGxlIiwgInRleHQiLCAibWluUm90YXRpb24iLCAibWF4Um90YXRpb24iLCAibWlycm9yIiwgInRleHRTdHJva2VXaWR0aCIsICJ0ZXh0U3Ryb2tlQ29sb3IiLCAiYXV0b1NraXAiLCAiYXV0b1NraXBQYWRkaW5nIiwgImxhYmVsT2Zmc2V0IiwgImNhbGxiYWNrIiwgIlRpY2tzIiwgIm1pbm9yIiwgIm1ham9yIiwgImFsaWduIiwgImNyb3NzQWxpZ24iLCAic2hvd0xhYmVsQmFja2Ryb3AiLCAiYmFja2Ryb3BDb2xvciIsICJiYWNrZHJvcFBhZGRpbmciLCAicm91dGUiLCAic3RhcnRzV2l0aCIsICJvdmVycmlkZXMiLCAiY3JlYXRlIiwgImRlc2NyaXB0b3JzIiwgImdldFNjb3BlIiwgIm5vZGUiLCAia2V5IiwgImtleXMiLCAic3BsaXQiLCAiaSIsICJuIiwgImsiLCAicm9vdCIsICJzY29wZSIsICJtZXJnZSIsICJEZWZhdWx0cyIsICJjb25zdHJ1Y3RvciIsICJfZGVzY3JpcHRvcnMiLCAiX2FwcGxpZXJzIiwgImJhY2tncm91bmRDb2xvciIsICJib3JkZXJDb2xvciIsICJkYXRhc2V0cyIsICJkZXZpY2VQaXhlbFJhdGlvIiwgImNvbnRleHQiLCAicGxhdGZvcm0iLCAiZ2V0RGV2aWNlUGl4ZWxSYXRpbyIsICJlbGVtZW50cyIsICJldmVudHMiLCAiZm9udCIsICJmYW1pbHkiLCAic2l6ZSIsICJzdHlsZSIsICJsaW5lSGVpZ2h0IiwgIndlaWdodCIsICJob3ZlciIsICJob3ZlckJhY2tncm91bmRDb2xvciIsICJjdHgiLCAiaG92ZXJCb3JkZXJDb2xvciIsICJob3ZlckNvbG9yIiwgImluZGV4QXhpcyIsICJpbnRlcmFjdGlvbiIsICJtb2RlIiwgImludGVyc2VjdCIsICJpbmNsdWRlSW52aXNpYmxlIiwgIm1haW50YWluQXNwZWN0UmF0aW8iLCAib25Ib3ZlciIsICJvbkNsaWNrIiwgInBhcnNpbmciLCAicGx1Z2lucyIsICJyZXNwb25zaXZlIiwgInNjYWxlIiwgInNjYWxlcyIsICJzaG93TGluZSIsICJkcmF3QWN0aXZlRWxlbWVudHNPblRvcCIsICJhcHBseSIsICJvdmVycmlkZSIsICJ0YXJnZXRTY29wZSIsICJ0YXJnZXROYW1lIiwgInNjb3BlT2JqZWN0IiwgInRhcmdldFNjb3BlT2JqZWN0IiwgInByaXZhdGVOYW1lIiwgImRlZmluZVByb3BlcnRpZXMiLCAid3JpdGFibGUiLCAiZW51bWVyYWJsZSIsICJsb2NhbCIsICJ0YXJnZXQiLCAiaXNPYmplY3QiLCAidmFsdWVPckRlZmF1bHQiLCAiYXBwbGllcnMiLCAiZm9yRWFjaCIsICJ0b0ZvbnRTdHJpbmciLCAiaXNOdWxsT3JVbmRlZiIsICJfbWVhc3VyZVRleHQiLCAiZGF0YSIsICJnYyIsICJsb25nZXN0IiwgInN0cmluZyIsICJ0ZXh0V2lkdGgiLCAibWVhc3VyZVRleHQiLCAicHVzaCIsICJfbG9uZ2VzdFRleHQiLCAiYXJyYXlPZlRoaW5ncyIsICJjYWNoZSIsICJnYXJiYWdlQ29sbGVjdCIsICJzYXZlIiwgImlsZW4iLCAiaiIsICJqbGVuIiwgInRoaW5nIiwgIm5lc3RlZFRoaW5nIiwgInJlc3RvcmUiLCAiZ2NMZW4iLCAic3BsaWNlIiwgIl9hbGlnblBpeGVsIiwgInBpeGVsIiwgImN1cnJlbnREZXZpY2VQaXhlbFJhdGlvIiwgImhhbGZXaWR0aCIsICJyb3VuZCIsICJjbGVhckNhbnZhcyIsICJjYW52YXMiLCAiZ2V0Q29udGV4dCIsICJyZXNldFRyYW5zZm9ybSIsICJjbGVhclJlY3QiLCAiaGVpZ2h0IiwgImRyYXdQb2ludCIsICJ4IiwgInkiLCAiZHJhd1BvaW50TGVnZW5kIiwgInciLCAieE9mZnNldCIsICJ5T2Zmc2V0IiwgImNvcm5lclJhZGl1cyIsICJ4T2Zmc2V0VyIsICJ5T2Zmc2V0VyIsICJwb2ludFN0eWxlIiwgInJvdGF0aW9uIiwgInJhZGl1cyIsICJyYWQiLCAiUkFEX1BFUl9ERUciLCAidHJhbnNsYXRlIiwgInJvdGF0ZSIsICJkcmF3SW1hZ2UiLCAiYmVnaW5QYXRoIiwgImVsbGlwc2UiLCAiYXJjIiwgImNsb3NlUGF0aCIsICJtb3ZlVG8iLCAiVFdPX1RISVJEU19QSSIsICJsaW5lVG8iLCAiUVVBUlRFUl9QSSIsICJTUVJUMV8yIiwgInJlY3QiLCAiZmlsbCIsICJib3JkZXJXaWR0aCIsICJzdHJva2UiLCAiX2lzUG9pbnRJbkFyZWEiLCAicG9pbnQiLCAiYXJlYSIsICJtYXJnaW4iLCAiY2xpcEFyZWEiLCAiY2xpcCIsICJ1bmNsaXBBcmVhIiwgInNldFJlbmRlck9wdHMiLCAiY3R4IiwgIm9wdHMiLCAidHJhbnNsYXRpb24iLCAidHJhbnNsYXRlIiwgImlzTnVsbE9yVW5kZWYiLCAicm90YXRpb24iLCAicm90YXRlIiwgImNvbG9yIiwgImZpbGxTdHlsZSIsICJ0ZXh0QWxpZ24iLCAidGV4dEJhc2VsaW5lIiwgImRlY29yYXRlVGV4dCIsICJ4IiwgInkiLCAibGluZSIsICJzdHJpa2V0aHJvdWdoIiwgInVuZGVybGluZSIsICJtZXRyaWNzIiwgIm1lYXN1cmVUZXh0IiwgImxlZnQiLCAiYWN0dWFsQm91bmRpbmdCb3hMZWZ0IiwgInJpZ2h0IiwgImFjdHVhbEJvdW5kaW5nQm94UmlnaHQiLCAidG9wIiwgImFjdHVhbEJvdW5kaW5nQm94QXNjZW50IiwgImJvdHRvbSIsICJhY3R1YWxCb3VuZGluZ0JveERlc2NlbnQiLCAieURlY29yYXRpb24iLCAic3Ryb2tlU3R5bGUiLCAiYmVnaW5QYXRoIiwgImxpbmVXaWR0aCIsICJkZWNvcmF0aW9uV2lkdGgiLCAibW92ZVRvIiwgImxpbmVUbyIsICJzdHJva2UiLCAiZHJhd0JhY2tkcm9wIiwgIm9sZENvbG9yIiwgImZpbGxSZWN0IiwgIndpZHRoIiwgImhlaWdodCIsICJyZW5kZXJUZXh0IiwgInRleHQiLCAiZm9udCIsICJsaW5lcyIsICJpc0FycmF5IiwgInN0cm9rZVdpZHRoIiwgInN0cm9rZUNvbG9yIiwgImkiLCAic2F2ZSIsICJzdHJpbmciLCAibGVuZ3RoIiwgImJhY2tkcm9wIiwgInN0cm9rZVRleHQiLCAibWF4V2lkdGgiLCAiZmlsbFRleHQiLCAiTnVtYmVyIiwgImxpbmVIZWlnaHQiLCAicmVzdG9yZSIsICJhZGRSb3VuZGVkUmVjdFBhdGgiLCAicmVjdCIsICJ3IiwgImgiLCAicmFkaXVzIiwgImFyYyIsICJ0b3BMZWZ0IiwgIkhBTEZfUEkiLCAiUEkiLCAiYm90dG9tTGVmdCIsICJib3R0b21SaWdodCIsICJ0b3BSaWdodCIsICJMSU5FX0hFSUdIVCIsICJGT05UX1NUWUxFIiwgInRvTGluZUhlaWdodCIsICJ2YWx1ZSIsICJzaXplIiwgIm1hdGNoZXMiLCAibWF0Y2giLCAibnVtYmVyT3JaZXJvIiwgInYiLCAiX3JlYWRWYWx1ZVRvUHJvcHMiLCAicHJvcHMiLCAicmV0IiwgIm9ialByb3BzIiwgImlzT2JqZWN0IiwgImtleXMiLCAiT2JqZWN0IiwgInJlYWQiLCAicHJvcCIsICJ2YWx1ZU9yRGVmYXVsdCIsICJ0b1RSQkwiLCAidG9UUkJMQ29ybmVycyIsICJ0b1BhZGRpbmciLCAib2JqIiwgInRvRm9udCIsICJvcHRpb25zIiwgImZhbGxiYWNrIiwgImRlZmF1bHRzIiwgInBhcnNlSW50IiwgInN0eWxlIiwgImNvbnNvbGUiLCAid2FybiIsICJ1bmRlZmluZWQiLCAiZmFtaWx5IiwgIndlaWdodCIsICJ0b0ZvbnRTdHJpbmciLCAicmVzb2x2ZSIsICJpbnB1dHMiLCAiY29udGV4dCIsICJpbmRleCIsICJpbmZvIiwgImNhY2hlYWJsZSIsICJpbGVuIiwgIl9hZGRHcmFjZSIsICJtaW5tYXgiLCAiZ3JhY2UiLCAiYmVnaW5BdFplcm8iLCAibWluIiwgIm1heCIsICJjaGFuZ2UiLCAidG9EaW1lbnNpb24iLCAia2VlcFplcm8iLCAiYWRkIiwgIk1hdGgiLCAiYWJzIiwgImNyZWF0ZUNvbnRleHQiLCAicGFyZW50Q29udGV4dCIsICJhc3NpZ24iLCAiY3JlYXRlIiwgIl9jcmVhdGVSZXNvbHZlciIsICJzY29wZXMiLCAicHJlZml4ZXMiLCAicm9vdFNjb3BlcyIsICJnZXRUYXJnZXQiLCAiZmluYWxSb290U2NvcGVzIiwgIl9yZXNvbHZlIiwgImNhY2hlIiwgIlN5bWJvbCIsICJ0b1N0cmluZ1RhZyIsICJfY2FjaGVhYmxlIiwgIl9zY29wZXMiLCAiX3Jvb3RTY29wZXMiLCAiX2ZhbGxiYWNrIiwgIl9nZXRUYXJnZXQiLCAib3ZlcnJpZGUiLCAic2NvcGUiLCAiUHJveHkiLCAiZGVsZXRlUHJvcGVydHkiLCAidGFyZ2V0IiwgIl9rZXlzIiwgImdldCIsICJfY2FjaGVkIiwgIl9yZXNvbHZlV2l0aFByZWZpeGVzIiwgImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsICJSZWZsZWN0IiwgImdldFByb3RvdHlwZU9mIiwgImhhcyIsICJnZXRLZXlzRnJvbUFsbFNjb3BlcyIsICJpbmNsdWRlcyIsICJvd25LZXlzIiwgInNldCIsICJzdG9yYWdlIiwgIl9zdG9yYWdlIiwgIl9hdHRhY2hDb250ZXh0IiwgInByb3h5IiwgInN1YlByb3h5IiwgImRlc2NyaXB0b3JEZWZhdWx0cyIsICJfcHJveHkiLCAiX2NvbnRleHQiLCAiX3N1YlByb3h5IiwgIl9zdGFjayIsICJTZXQiLCAiX2Rlc2NyaXB0b3JzIiwgInNldENvbnRleHQiLCAicmVjZWl2ZXIiLCAiX3Jlc29sdmVXaXRoQ29udGV4dCIsICJhbGxLZXlzIiwgImVudW1lcmFibGUiLCAiY29uZmlndXJhYmxlIiwgInNjcmlwdGFibGUiLCAiaW5kZXhhYmxlIiwgIl9zY3JpcHRhYmxlIiwgIl9pbmRleGFibGUiLCAiX2FsbEtleXMiLCAiaXNTY3JpcHRhYmxlIiwgImlzRnVuY3Rpb24iLCAiaXNJbmRleGFibGUiLCAicmVhZEtleSIsICJwcmVmaXgiLCAibmFtZSIsICJfY2FwaXRhbGl6ZSIsICJuZWVkc1N1YlJlc29sdmVyIiwgImNvbnN0cnVjdG9yIiwgInByb3RvdHlwZSIsICJoYXNPd25Qcm9wZXJ0eSIsICJjYWxsIiwgImRlc2NyaXB0b3JzIiwgIl9yZXNvbHZlU2NyaXB0YWJsZSIsICJfcmVzb2x2ZUFycmF5IiwgImdldFZhbHVlIiwgIkVycm9yIiwgIkFycmF5IiwgImZyb20iLCAiam9pbiIsICJkZWxldGUiLCAiY3JlYXRlU3ViUmVzb2x2ZXIiLCAiYXJyIiwgImZpbHRlciIsICJzIiwgIml0ZW0iLCAicmVzb2x2ZXIiLCAicHVzaCIsICJyZXNvbHZlRmFsbGJhY2siLCAiZ2V0U2NvcGUiLCAia2V5IiwgInBhcmVudCIsICJyZXNvbHZlT2JqZWN0S2V5IiwgImFkZFNjb3BlcyIsICJwYXJlbnRTY29wZXMiLCAicGFyZW50RmFsbGJhY2siLCAiYWxsU2NvcGVzIiwgImFkZFNjb3Blc0Zyb21LZXkiLCAic3ViR2V0VGFyZ2V0IiwgInJlc29sdmVLZXlzRnJvbUFsbFNjb3BlcyIsICJrIiwgInN0YXJ0c1dpdGgiLCAiRVBTSUxPTiIsICJOdW1iZXIiLCAiX2lzRG9tU3VwcG9ydGVkIiwgIndpbmRvdyIsICJkb2N1bWVudCIsICJfZ2V0UGFyZW50Tm9kZSIsICJkb21Ob2RlIiwgInBhcmVudCIsICJwYXJlbnROb2RlIiwgInRvU3RyaW5nIiwgImhvc3QiLCAicGFyc2VNYXhTdHlsZSIsICJzdHlsZVZhbHVlIiwgIm5vZGUiLCAicGFyZW50UHJvcGVydHkiLCAidmFsdWVJblBpeGVscyIsICJwYXJzZUludCIsICJpbmRleE9mIiwgImdldENvbXB1dGVkU3R5bGUiLCAiZWxlbWVudCIsICJvd25lckRvY3VtZW50IiwgImRlZmF1bHRWaWV3IiwgImdldFN0eWxlIiwgImVsIiwgInByb3BlcnR5IiwgImdldFByb3BlcnR5VmFsdWUiLCAicG9zaXRpb25zIiwgImdldFBvc2l0aW9uZWRTdHlsZSIsICJzdHlsZXMiLCAic3R5bGUiLCAic3VmZml4IiwgInJlc3VsdCIsICJpIiwgInBvcyIsICJwYXJzZUZsb2F0IiwgIndpZHRoIiwgImxlZnQiLCAicmlnaHQiLCAiaGVpZ2h0IiwgInRvcCIsICJib3R0b20iLCAidXNlT2Zmc2V0UG9zIiwgIngiLCAieSIsICJ0YXJnZXQiLCAic2hhZG93Um9vdCIsICJnZXRDYW52YXNQb3NpdGlvbiIsICJlIiwgImNhbnZhcyIsICJ0b3VjaGVzIiwgInNvdXJjZSIsICJsZW5ndGgiLCAib2Zmc2V0WCIsICJvZmZzZXRZIiwgImJveCIsICJyZWN0IiwgImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsICJjbGllbnRYIiwgImNsaWVudFkiLCAiZ2V0UmVsYXRpdmVQb3NpdGlvbiIsICJldmVudCIsICJjaGFydCIsICJjdXJyZW50RGV2aWNlUGl4ZWxSYXRpbyIsICJib3JkZXJCb3giLCAiYm94U2l6aW5nIiwgInBhZGRpbmdzIiwgImJvcmRlcnMiLCAieE9mZnNldCIsICJ5T2Zmc2V0IiwgIk1hdGgiLCAicm91bmQiLCAiZ2V0Q29udGFpbmVyU2l6ZSIsICJtYXhXaWR0aCIsICJtYXhIZWlnaHQiLCAidW5kZWZpbmVkIiwgImNvbnRhaW5lciIsICJjbGllbnRXaWR0aCIsICJjbGllbnRIZWlnaHQiLCAiY29udGFpbmVyU3R5bGUiLCAiY29udGFpbmVyQm9yZGVyIiwgImNvbnRhaW5lclBhZGRpbmciLCAiSU5GSU5JVFkiLCAicm91bmQxIiwgInYiLCAiZ2V0TWF4aW11bVNpemUiLCAiYmJXaWR0aCIsICJiYkhlaWdodCIsICJhc3BlY3RSYXRpbyIsICJtYXJnaW5zIiwgImNvbnRhaW5lclNpemUiLCAibWF4IiwgIm1pbiIsICJtYWludGFpbkhlaWdodCIsICJmbG9vciIsICJyZXRpbmFTY2FsZSIsICJmb3JjZVJhdGlvIiwgImZvcmNlU3R5bGUiLCAicGl4ZWxSYXRpbyIsICJkZXZpY2VIZWlnaHQiLCAiZGV2aWNlV2lkdGgiLCAiY3R4IiwgInNldFRyYW5zZm9ybSIsICJzdXBwb3J0c0V2ZW50TGlzdGVuZXJPcHRpb25zIiwgInBhc3NpdmVTdXBwb3J0ZWQiLCAib3B0aW9ucyIsICJwYXNzaXZlIiwgImFkZEV2ZW50TGlzdGVuZXIiLCAicmVtb3ZlRXZlbnRMaXN0ZW5lciIsICJyZWFkVXNlZFNpemUiLCAidmFsdWUiLCAibWF0Y2hlcyIsICJtYXRjaCIsICJnZXRSaWdodFRvTGVmdEFkYXB0ZXIiLCAicmVjdFgiLCAid2lkdGgiLCAieCIsICJzZXRXaWR0aCIsICJ3IiwgInRleHRBbGlnbiIsICJhbGlnbiIsICJ4UGx1cyIsICJ2YWx1ZSIsICJsZWZ0Rm9yTHRyIiwgIml0ZW1XaWR0aCIsICJnZXRMZWZ0VG9SaWdodEFkYXB0ZXIiLCAiX2l0ZW1XaWR0aCIsICJnZXRSdGxBZGFwdGVyIiwgInJ0bCIsICJvdmVycmlkZVRleHREaXJlY3Rpb24iLCAiY3R4IiwgImRpcmVjdGlvbiIsICJzdHlsZSIsICJvcmlnaW5hbCIsICJjYW52YXMiLCAiZ2V0UHJvcGVydHlWYWx1ZSIsICJnZXRQcm9wZXJ0eVByaW9yaXR5IiwgInNldFByb3BlcnR5IiwgInByZXZUZXh0RGlyZWN0aW9uIiwgInJlc3RvcmVUZXh0RGlyZWN0aW9uIiwgInVuZGVmaW5lZCIsICJBbmltYXRvciIsICJjb25zdHJ1Y3RvciIsICJfcmVxdWVzdCIsICJfY2hhcnRzIiwgIk1hcCIsICJfcnVubmluZyIsICJfbGFzdERhdGUiLCAidW5kZWZpbmVkIiwgIl9ub3RpZnkiLCAiY2hhcnQiLCAiYW5pbXMiLCAiZGF0ZSIsICJ0eXBlIiwgImNhbGxiYWNrcyIsICJsaXN0ZW5lcnMiLCAibnVtU3RlcHMiLCAiZHVyYXRpb24iLCAiZm9yRWFjaCIsICJmbiIsICJpbml0aWFsIiwgImN1cnJlbnRTdGVwIiwgIk1hdGgiLCAibWluIiwgInN0YXJ0IiwgIl9yZWZyZXNoIiwgInJlcXVlc3RBbmltRnJhbWUiLCAiY2FsbCIsICJ3aW5kb3ciLCAiX3VwZGF0ZSIsICJEYXRlIiwgIm5vdyIsICJyZW1haW5pbmciLCAicnVubmluZyIsICJpdGVtcyIsICJsZW5ndGgiLCAiaSIsICJkcmF3IiwgIml0ZW0iLCAiX2FjdGl2ZSIsICJfdG90YWwiLCAidGljayIsICJwb3AiLCAiX2dldEFuaW1zIiwgImNoYXJ0cyIsICJnZXQiLCAiY29tcGxldGUiLCAicHJvZ3Jlc3MiLCAic2V0IiwgImxpc3RlbiIsICJldmVudCIsICJjYiIsICJwdXNoIiwgImFkZCIsICJoYXMiLCAicmVkdWNlIiwgImFjYyIsICJjdXIiLCAibWF4IiwgIl9kdXJhdGlvbiIsICJzdG9wIiwgImNhbmNlbCIsICJyZW1vdmUiLCAiZGVsZXRlIiwgInRyYW5zcGFyZW50IiwgImludGVycG9sYXRvcnMiLCAiYm9vbGVhbiIsICJmcm9tIiwgInRvIiwgImZhY3RvciIsICJjb2xvciIsICJjMCIsICJoZWxwZXJzQ29sb3IiLCAiYzEiLCAidmFsaWQiLCAibWl4IiwgImhleFN0cmluZyIsICJudW1iZXIiLCAiQW5pbWF0aW9uIiwgImNmZyIsICJ0YXJnZXQiLCAicHJvcCIsICJjdXJyZW50VmFsdWUiLCAicmVzb2x2ZSIsICJfZm4iLCAiX2Vhc2luZyIsICJlZmZlY3RzIiwgImVhc2luZyIsICJsaW5lYXIiLCAiX3N0YXJ0IiwgImZsb29yIiwgImRlbGF5IiwgIl9sb29wIiwgImxvb3AiLCAiX3RhcmdldCIsICJfcHJvcCIsICJfZnJvbSIsICJfdG8iLCAiX3Byb21pc2VzIiwgImFjdGl2ZSIsICJ1cGRhdGUiLCAiZWxhcHNlZCIsICJyZW1haW4iLCAid2FpdCIsICJwcm9taXNlcyIsICJQcm9taXNlIiwgInJlcyIsICJyZWoiLCAicmVzb2x2ZWQiLCAibWV0aG9kIiwgIkFuaW1hdGlvbnMiLCAiY29uZmlnIiwgIl9jaGFydCIsICJfcHJvcGVydGllcyIsICJjb25maWd1cmUiLCAiaXNPYmplY3QiLCAiYW5pbWF0aW9uT3B0aW9ucyIsICJPYmplY3QiLCAia2V5cyIsICJkZWZhdWx0cyIsICJhbmltYXRpb24iLCAiYW5pbWF0ZWRQcm9wcyIsICJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwgImtleSIsICJvcHRpb24iLCAiaXNBcnJheSIsICJwcm9wZXJ0aWVzIiwgIl9hbmltYXRlT3B0aW9ucyIsICJ2YWx1ZXMiLCAibmV3T3B0aW9ucyIsICJvcHRpb25zIiwgInJlc29sdmVUYXJnZXRPcHRpb25zIiwgImFuaW1hdGlvbnMiLCAiX2NyZWF0ZUFuaW1hdGlvbnMiLCAiJHNoYXJlZCIsICJhd2FpdEFsbCIsICIkYW5pbWF0aW9ucyIsICJ0aGVuIiwgInByb3BzIiwgImNoYXJBdCIsICJ2YWx1ZSIsICJzaXplIiwgImFzc2lnbiIsICJhbmltYXRvciIsICJhbmltIiwgImFsbCIsICJzY2FsZUNsaXAiLCAic2NhbGUiLCAiYWxsb3dlZE92ZXJmbG93IiwgIm9wdHMiLCAicmV2ZXJzZSIsICJlbmQiLCAiZGVmYXVsdENsaXAiLCAieFNjYWxlIiwgInlTY2FsZSIsICJ4IiwgInkiLCAidG9wIiwgInJpZ2h0IiwgImJvdHRvbSIsICJsZWZ0IiwgInRvQ2xpcCIsICJ0IiwgInIiLCAiYiIsICJsIiwgImRpc2FibGVkIiwgImdldFNvcnRlZERhdGFzZXRJbmRpY2VzIiwgImZpbHRlclZpc2libGUiLCAibWV0YXNldHMiLCAiX2dldFNvcnRlZERhdGFzZXRNZXRhcyIsICJpbGVuIiwgImluZGV4IiwgImFwcGx5U3RhY2siLCAic3RhY2siLCAiZHNJbmRleCIsICJzaW5nbGVNb2RlIiwgIm1vZGUiLCAiZGF0YXNldEluZGV4IiwgIm90aGVyVmFsdWUiLCAiaXNGaW5pdGUiLCAic2lnbiIsICJjb252ZXJ0T2JqZWN0RGF0YVRvQXJyYXkiLCAiZGF0YSIsICJhZGF0YSIsICJBcnJheSIsICJpc1N0YWNrZWQiLCAibWV0YSIsICJzdGFja2VkIiwgImdldFN0YWNrS2V5IiwgImluZGV4U2NhbGUiLCAidmFsdWVTY2FsZSIsICJpZCIsICJnZXRVc2VyQm91bmRzIiwgIm1pbkRlZmluZWQiLCAibWF4RGVmaW5lZCIsICJOdW1iZXIiLCAiTkVHQVRJVkVfSU5GSU5JVFkiLCAiUE9TSVRJVkVfSU5GSU5JVFkiLCAiZ2V0T3JDcmVhdGVTdGFjayIsICJzdGFja3MiLCAic3RhY2tLZXkiLCAiaW5kZXhWYWx1ZSIsICJzdWJTdGFjayIsICJnZXRMYXN0SW5kZXhJblN0YWNrIiwgInZTY2FsZSIsICJwb3NpdGl2ZSIsICJnZXRNYXRjaGluZ1Zpc2libGVNZXRhcyIsICJ1cGRhdGVTdGFja3MiLCAiY29udHJvbGxlciIsICJwYXJzZWQiLCAiX2NhY2hlZE1ldGEiLCAiX3N0YWNrcyIsICJpU2NhbGUiLCAiaUF4aXMiLCAiYXhpcyIsICJ2QXhpcyIsICJpdGVtU3RhY2tzIiwgIl90b3AiLCAiX2JvdHRvbSIsICJ2aXN1YWxWYWx1ZXMiLCAiX3Zpc3VhbFZhbHVlcyIsICJnZXRGaXJzdFNjYWxlSWQiLCAic2NhbGVzIiwgImZpbHRlciIsICJzaGlmdCIsICJjcmVhdGVEYXRhc2V0Q29udGV4dCIsICJwYXJlbnQiLCAiY3JlYXRlQ29udGV4dCIsICJkYXRhc2V0IiwgImNyZWF0ZURhdGFDb250ZXh0IiwgImVsZW1lbnQiLCAiZGF0YUluZGV4IiwgInJhdyIsICJjbGVhclN0YWNrcyIsICJfcGFyc2VkIiwgImlzRGlyZWN0VXBkYXRlTW9kZSIsICJjbG9uZUlmTm90U2hhcmVkIiwgImNhY2hlZCIsICJzaGFyZWQiLCAiY3JlYXRlU3RhY2siLCAiY2FuU3RhY2siLCAiaGlkZGVuIiwgIl9zdGFja2VkIiwgIkRhdGFzZXRDb250cm9sbGVyIiwgIl9jdHgiLCAiY3R4IiwgIl9jYWNoZWREYXRhT3B0cyIsICJnZXRNZXRhIiwgIl90eXBlIiwgIl9wYXJzaW5nIiwgIl9kYXRhIiwgIl9vYmplY3REYXRhIiwgIl9zaGFyZWRPcHRpb25zIiwgIl9kcmF3U3RhcnQiLCAiX2RyYXdDb3VudCIsICJlbmFibGVPcHRpb25TaGFyaW5nIiwgInN1cHBvcnRzRGVjaW1hdGlvbiIsICIkY29udGV4dCIsICJfc3luY0xpc3QiLCAiZGF0YXNldEVsZW1lbnRUeXBlIiwgImRhdGFFbGVtZW50VHlwZSIsICJpbml0aWFsaXplIiwgImxpbmtTY2FsZXMiLCAiYWRkRWxlbWVudHMiLCAiZmlsbCIsICJpc1BsdWdpbkVuYWJsZWQiLCAiY29uc29sZSIsICJ3YXJuIiwgInVwZGF0ZUluZGV4IiwgImdldERhdGFzZXQiLCAiY2hvb3NlSWQiLCAieGlkIiwgInhBeGlzSUQiLCAidmFsdWVPckRlZmF1bHQiLCAieWlkIiwgInlBeGlzSUQiLCAicmlkIiwgInJBeGlzSUQiLCAiaW5kZXhBeGlzIiwgImlpZCIsICJpQXhpc0lEIiwgInZpZCIsICJ2QXhpc0lEIiwgImdldFNjYWxlRm9ySWQiLCAiclNjYWxlIiwgImRhdGFzZXRzIiwgImdldERhdGFzZXRNZXRhIiwgInNjYWxlSUQiLCAiX2dldE90aGVyU2NhbGUiLCAicmVzZXQiLCAiX2Rlc3Ryb3kiLCAidW5saXN0ZW5BcnJheUV2ZW50cyIsICJfZGF0YUNoZWNrIiwgImlzRXh0ZW5zaWJsZSIsICJsaXN0ZW5BcnJheUV2ZW50cyIsICJidWlsZE9yVXBkYXRlRWxlbWVudHMiLCAicmVzZXROZXdFbGVtZW50cyIsICJzdGFja0NoYW5nZWQiLCAib2xkU3RhY2tlZCIsICJfcmVzeW5jRWxlbWVudHMiLCAic2NvcGVLZXlzIiwgImRhdGFzZXRTY29wZUtleXMiLCAic2NvcGVzIiwgImdldE9wdGlvblNjb3BlcyIsICJjcmVhdGVSZXNvbHZlciIsICJnZXRDb250ZXh0IiwgInBhcnNpbmciLCAicGFyc2UiLCAiY291bnQiLCAic29ydGVkIiwgIl9zb3J0ZWQiLCAicHJldiIsICJwYXJzZUFycmF5RGF0YSIsICJwYXJzZU9iamVjdERhdGEiLCAicGFyc2VQcmltaXRpdmVEYXRhIiwgImlzTm90SW5PcmRlckNvbXBhcmVkVG9QcmV2IiwgImxhYmVscyIsICJnZXRMYWJlbHMiLCAic2luZ2xlU2NhbGUiLCAieEF4aXNLZXkiLCAieUF4aXNLZXkiLCAicmVzb2x2ZU9iamVjdEtleSIsICJnZXRQYXJzZWQiLCAiZ2V0RGF0YUVsZW1lbnQiLCAidXBkYXRlUmFuZ2VGcm9tUGFyc2VkIiwgInJhbmdlIiwgInBhcnNlZFZhbHVlIiwgIk5hTiIsICJnZXRNaW5NYXgiLCAib3RoZXJTY2FsZSIsICJvdGhlck1pbiIsICJvdGhlck1heCIsICJfc2tpcCIsICJnZXRBbGxQYXJzZWRWYWx1ZXMiLCAiZ2V0TWF4T3ZlcmZsb3ciLCAiZ2V0TGFiZWxBbmRWYWx1ZSIsICJsYWJlbCIsICJnZXRMYWJlbEZvclZhbHVlIiwgIl9jbGlwIiwgImNsaXAiLCAiZWxlbWVudHMiLCAiYXJlYSIsICJjaGFydEFyZWEiLCAiZHJhd0FjdGl2ZUVsZW1lbnRzT25Ub3AiLCAiZ2V0U3R5bGUiLCAicmVzb2x2ZURhdGFzZXRFbGVtZW50T3B0aW9ucyIsICJyZXNvbHZlRGF0YUVsZW1lbnRPcHRpb25zIiwgImNvbnRleHQiLCAiX3Jlc29sdmVFbGVtZW50T3B0aW9ucyIsICJlbGVtZW50VHlwZSIsICJjYWNoZSIsICJjYWNoZUtleSIsICJzaGFyaW5nIiwgImRlZmluZWQiLCAiZGF0YXNldEVsZW1lbnRTY29wZUtleXMiLCAicHJlZml4ZXMiLCAibmFtZXMiLCAicmVzb2x2ZU5hbWVkT3B0aW9ucyIsICJmcmVlemUiLCAiX3Jlc29sdmVBbmltYXRpb25zIiwgInRyYW5zaXRpb24iLCAiZGF0YXNldEFuaW1hdGlvblNjb3BlS2V5cyIsICJfY2FjaGVhYmxlIiwgImdldFNoYXJlZE9wdGlvbnMiLCAiaW5jbHVkZU9wdGlvbnMiLCAic2hhcmVkT3B0aW9ucyIsICJfYW5pbWF0aW9uc0Rpc2FibGVkIiwgIl9nZXRTaGFyZWRPcHRpb25zIiwgImZpcnN0T3B0cyIsICJwcmV2aW91c2x5U2hhcmVkT3B0aW9ucyIsICJ1cGRhdGVTaGFyZWRPcHRpb25zIiwgInVwZGF0ZUVsZW1lbnQiLCAiX3NldFN0eWxlIiwgInJlbW92ZUhvdmVyU3R5bGUiLCAic2V0SG92ZXJTdHlsZSIsICJfcmVtb3ZlRGF0YXNldEhvdmVyU3R5bGUiLCAiX3NldERhdGFzZXRIb3ZlclN0eWxlIiwgImFyZzEiLCAiYXJnMiIsICJudW1NZXRhIiwgIm51bURhdGEiLCAiX2luc2VydEVsZW1lbnRzIiwgIl9yZW1vdmVFbGVtZW50cyIsICJtb3ZlIiwgImFyciIsICJ1cGRhdGVFbGVtZW50cyIsICJyZW1vdmVkIiwgInNwbGljZSIsICJfc3luYyIsICJhcmdzIiwgIl9kYXRhQ2hhbmdlcyIsICJfb25EYXRhUHVzaCIsICJhcmd1bWVudHMiLCAiX29uRGF0YVBvcCIsICJfb25EYXRhU2hpZnQiLCAiX29uRGF0YVNwbGljZSIsICJuZXdDb3VudCIsICJfb25EYXRhVW5zaGlmdCIsICJnZXRBbGxTY2FsZVZhbHVlcyIsICJfY2FjaGUiLCAiJGJhciIsICJ2aXNpYmxlTWV0YXMiLCAiY29uY2F0IiwgIl9hcnJheVVuaXF1ZSIsICJzb3J0IiwgImEiLCAiY29tcHV0ZU1pblNhbXBsZVNpemUiLCAiX2xlbmd0aCIsICJjdXJyIiwgInVwZGF0ZU1pbkFuZFByZXYiLCAiYWJzIiwgImdldFBpeGVsRm9yVmFsdWUiLCAidGlja3MiLCAiZ2V0UGl4ZWxGb3JUaWNrIiwgImNvbXB1dGVGaXRDYXRlZ29yeVRyYWl0cyIsICJydWxlciIsICJzdGFja0NvdW50IiwgInRoaWNrbmVzcyIsICJiYXJUaGlja25lc3MiLCAicmF0aW8iLCAiaXNOdWxsT3JVbmRlZiIsICJjYXRlZ29yeVBlcmNlbnRhZ2UiLCAiYmFyUGVyY2VudGFnZSIsICJjaHVuayIsICJwaXhlbHMiLCAiY29tcHV0ZUZsZXhDYXRlZ29yeVRyYWl0cyIsICJuZXh0IiwgInBlcmNlbnQiLCAicGFyc2VGbG9hdEJhciIsICJlbnRyeSIsICJzdGFydFZhbHVlIiwgImVuZFZhbHVlIiwgImJhclN0YXJ0IiwgImJhckVuZCIsICJfY3VzdG9tIiwgInBhcnNlVmFsdWUiLCAicGFyc2VBcnJheU9yUHJpbWl0aXZlIiwgImlzRmxvYXRCYXIiLCAiY3VzdG9tIiwgImJhclNpZ24iLCAiYWN0dWFsQmFzZSIsICJpc0hvcml6b250YWwiLCAiYm9yZGVyUHJvcHMiLCAiaG9yaXpvbnRhbCIsICJiYXNlIiwgInNldEJvcmRlclNraXBwZWQiLCAiZWRnZSIsICJib3JkZXJTa2lwcGVkIiwgImVuYWJsZUJvcmRlclJhZGl1cyIsICJwYXJzZUVkZ2UiLCAic3dhcCIsICJzdGFydEVuZCIsICJvcmlnIiwgInYxIiwgInYyIiwgInYiLCAic2V0SW5mbGF0ZUFtb3VudCIsICJpbmZsYXRlQW1vdW50IiwgIkJhckNvbnRyb2xsZXIiLCAiaUF4aXNLZXkiLCAidkF4aXNLZXkiLCAib2JqIiwgImJhcnMiLCAiZ2V0QmFzZVBpeGVsIiwgIl9nZXRSdWxlciIsICJ2cGl4ZWxzIiwgImhlYWQiLCAiX2NhbGN1bGF0ZUJhclZhbHVlUGl4ZWxzIiwgImlwaXhlbHMiLCAiX2NhbGN1bGF0ZUJhckluZGV4UGl4ZWxzIiwgImNlbnRlciIsICJoZWlnaHQiLCAid2lkdGgiLCAiX2dldFN0YWNrcyIsICJsYXN0IiwgImdyb3VwZWQiLCAic2tpcE51bGwiLCAidmFsIiwgImlzTmFOIiwgImluZGV4T2YiLCAiX2dldFN0YWNrQ291bnQiLCAiX2dldFN0YWNrSW5kZXgiLCAibmFtZSIsICJfc3RhcnRQaXhlbCIsICJfZW5kUGl4ZWwiLCAiYmFzZVZhbHVlIiwgIm1pbkJhckxlbmd0aCIsICJmbG9hdGluZyIsICJnZXREYXRhVmlzaWJpbGl0eSIsICJzdGFydFBpeGVsIiwgImdldFBpeGVsRm9yRGVjaW1hbCIsICJlbmRQaXhlbCIsICJnZXRWYWx1ZUZvclBpeGVsIiwgImhhbGZHcmlkIiwgImdldExpbmVXaWR0aEZvclZhbHVlIiwgIm1heEJhclRoaWNrbmVzcyIsICJJbmZpbml0eSIsICJzdGFja0luZGV4IiwgInJlY3RzIiwgIm51bWJlcnMiLCAib3ZlcnJpZGVzIiwgIl9pbmRleF8iLCAib2Zmc2V0IiwgImdyaWQiLCAiX3ZhbHVlXyIsICJiZWdpbkF0WmVybyIsICJnZXRSYXRpb0FuZE9mZnNldCIsICJyb3RhdGlvbiIsICJjaXJjdW1mZXJlbmNlIiwgImN1dG91dCIsICJyYXRpb1giLCAicmF0aW9ZIiwgIm9mZnNldFgiLCAib2Zmc2V0WSIsICJUQVUiLCAic3RhcnRBbmdsZSIsICJlbmRBbmdsZSIsICJzdGFydFgiLCAiTWF0aCIsICJjb3MiLCAic3RhcnRZIiwgInNpbiIsICJlbmRYIiwgImVuZFkiLCAiY2FsY01heCIsICJhbmdsZSIsICJhIiwgImIiLCAiX2FuZ2xlQmV0d2VlbiIsICJtYXgiLCAiY2FsY01pbiIsICJtaW4iLCAibWF4WCIsICJtYXhZIiwgIkhBTEZfUEkiLCAibWluWCIsICJQSSIsICJtaW5ZIiwgIkRvdWdobnV0Q29udHJvbGxlciIsICJEYXRhc2V0Q29udHJvbGxlciIsICJjb25zdHJ1Y3RvciIsICJjaGFydCIsICJkYXRhc2V0SW5kZXgiLCAiZW5hYmxlT3B0aW9uU2hhcmluZyIsICJpbm5lclJhZGl1cyIsICJ1bmRlZmluZWQiLCAib3V0ZXJSYWRpdXMiLCAibGlua1NjYWxlcyIsICJwYXJzZSIsICJzdGFydCIsICJjb3VudCIsICJkYXRhIiwgImdldERhdGFzZXQiLCAibWV0YSIsICJfY2FjaGVkTWV0YSIsICJfcGFyc2luZyIsICJfcGFyc2VkIiwgImdldHRlciIsICJpIiwgImlzT2JqZWN0IiwgImtleSIsICJyZXNvbHZlT2JqZWN0S2V5IiwgImlsZW4iLCAiX2dldFJvdGF0aW9uIiwgInRvUmFkaWFucyIsICJvcHRpb25zIiwgIl9nZXRDaXJjdW1mZXJlbmNlIiwgIl9nZXRSb3RhdGlvbkV4dGVudHMiLCAiZGF0YXNldHMiLCAibGVuZ3RoIiwgImlzRGF0YXNldFZpc2libGUiLCAiZ2V0RGF0YXNldE1ldGEiLCAidHlwZSIsICJfdHlwZSIsICJjb250cm9sbGVyIiwgInVwZGF0ZSIsICJtb2RlIiwgImNoYXJ0QXJlYSIsICJhcmNzIiwgInNwYWNpbmciLCAiZ2V0TWF4Qm9yZGVyV2lkdGgiLCAiZ2V0TWF4T2Zmc2V0IiwgIm1heFNpemUiLCAid2lkdGgiLCAiaGVpZ2h0IiwgInRvUGVyY2VudGFnZSIsICJjaGFydFdlaWdodCIsICJfZ2V0UmluZ1dlaWdodCIsICJpbmRleCIsICJtYXhXaWR0aCIsICJtYXhIZWlnaHQiLCAibWF4UmFkaXVzIiwgInRvRGltZW5zaW9uIiwgInJhZGl1cyIsICJyYWRpdXNMZW5ndGgiLCAiX2dldFZpc2libGVEYXRhc2V0V2VpZ2h0VG90YWwiLCAidG90YWwiLCAiY2FsY3VsYXRlVG90YWwiLCAiX2dldFJpbmdXZWlnaHRPZmZzZXQiLCAidXBkYXRlRWxlbWVudHMiLCAiX2NpcmN1bWZlcmVuY2UiLCAicmVzZXQiLCAib3B0cyIsICJhbmltYXRpb24iLCAiYW5pbWF0ZVJvdGF0ZSIsICJnZXREYXRhVmlzaWJpbGl0eSIsICJoaWRkZW4iLCAiY2FsY3VsYXRlQ2lyY3VtZmVyZW5jZSIsICJhbmltYXRpb25PcHRzIiwgImNlbnRlclgiLCAibGVmdCIsICJyaWdodCIsICJjZW50ZXJZIiwgInRvcCIsICJib3R0b20iLCAiYW5pbWF0ZVNjYWxlIiwgInNoYXJlZE9wdGlvbnMiLCAiaW5jbHVkZU9wdGlvbnMiLCAiX2dldFNoYXJlZE9wdGlvbnMiLCAiYXJjIiwgInByb3BlcnRpZXMiLCAieCIsICJ5IiwgInJlc29sdmVEYXRhRWxlbWVudE9wdGlvbnMiLCAiYWN0aXZlIiwgInVwZGF0ZUVsZW1lbnQiLCAibWV0YURhdGEiLCAidmFsdWUiLCAiaXNOYU4iLCAiYWJzIiwgImdldExhYmVsQW5kVmFsdWUiLCAibGFiZWxzIiwgImZvcm1hdE51bWJlciIsICJsb2NhbGUiLCAibGFiZWwiLCAiYm9yZGVyQWxpZ24iLCAiYm9yZGVyV2lkdGgiLCAiaG92ZXJCb3JkZXJXaWR0aCIsICJvZmZzZXQiLCAiaG92ZXJPZmZzZXQiLCAicmluZ1dlaWdodE9mZnNldCIsICJ2YWx1ZU9yRGVmYXVsdCIsICJ3ZWlnaHQiLCAiaWQiLCAiZGVmYXVsdHMiLCAiZGF0YXNldEVsZW1lbnRUeXBlIiwgImRhdGFFbGVtZW50VHlwZSIsICJhbmltYXRpb25zIiwgIm51bWJlcnMiLCAiaW5kZXhBeGlzIiwgImRlc2NyaXB0b3JzIiwgIl9zY3JpcHRhYmxlIiwgIm5hbWUiLCAiX2luZGV4YWJsZSIsICJzdGFydHNXaXRoIiwgIm92ZXJyaWRlcyIsICJhc3BlY3RSYXRpbyIsICJwbHVnaW5zIiwgImxlZ2VuZCIsICJnZW5lcmF0ZUxhYmVscyIsICJwb2ludFN0eWxlIiwgImNvbG9yIiwgIm1hcCIsICJzdHlsZSIsICJnZXRTdHlsZSIsICJ0ZXh0IiwgImZpbGxTdHlsZSIsICJiYWNrZ3JvdW5kQ29sb3IiLCAic3Ryb2tlU3R5bGUiLCAiYm9yZGVyQ29sb3IiLCAiZm9udENvbG9yIiwgImxpbmVXaWR0aCIsICJvbkNsaWNrIiwgImUiLCAibGVnZW5kSXRlbSIsICJ0b2dnbGVEYXRhVmlzaWJpbGl0eSIsICJQaWVDb250cm9sbGVyIiwgIkRvdWdobnV0Q29udHJvbGxlciIsICJpZCIsICJkZWZhdWx0cyIsICJjdXRvdXQiLCAicm90YXRpb24iLCAiY2lyY3VtZmVyZW5jZSIsICJyYWRpdXMiLCAiYWJzdHJhY3QiLCAiRXJyb3IiLCAiRGF0ZUFkYXB0ZXJCYXNlIiwgImNvbnN0cnVjdG9yIiwgIm9wdGlvbnMiLCAib3ZlcnJpZGUiLCAibWVtYmVycyIsICJPYmplY3QiLCAiYXNzaWduIiwgInByb3RvdHlwZSIsICJpbml0IiwgImZvcm1hdHMiLCAicGFyc2UiLCAiZm9ybWF0IiwgImFkZCIsICJkaWZmIiwgInN0YXJ0T2YiLCAiZW5kT2YiLCAiX2RhdGUiLCAiYmluYXJ5U2VhcmNoIiwgIm1ldGFzZXQiLCAiYXhpcyIsICJ2YWx1ZSIsICJpbnRlcnNlY3QiLCAiY29udHJvbGxlciIsICJkYXRhIiwgIl9zb3J0ZWQiLCAiaVNjYWxlIiwgIl9jYWNoZWRNZXRhIiwgImxlbmd0aCIsICJsb29rdXBNZXRob2QiLCAiX3JldmVyc2VQaXhlbHMiLCAiX3Jsb29rdXBCeUtleSIsICJfbG9va3VwQnlLZXkiLCAiX3NoYXJlZE9wdGlvbnMiLCAiZWwiLCAicmFuZ2UiLCAiZ2V0UmFuZ2UiLCAic3RhcnQiLCAiZW5kIiwgImxvIiwgImhpIiwgImV2YWx1YXRlSW50ZXJhY3Rpb25JdGVtcyIsICJjaGFydCIsICJwb3NpdGlvbiIsICJoYW5kbGVyIiwgIm1ldGFzZXRzIiwgImdldFNvcnRlZFZpc2libGVEYXRhc2V0TWV0YXMiLCAiaSIsICJpbGVuIiwgImluZGV4IiwgImoiLCAiZWxlbWVudCIsICJza2lwIiwgImdldERpc3RhbmNlTWV0cmljRm9yQXhpcyIsICJ1c2VYIiwgImluZGV4T2YiLCAidXNlWSIsICJwdDEiLCAicHQyIiwgImRlbHRhWCIsICJNYXRoIiwgImFicyIsICJ4IiwgImRlbHRhWSIsICJ5IiwgInNxcnQiLCAicG93IiwgImdldEludGVyc2VjdEl0ZW1zIiwgInVzZUZpbmFsUG9zaXRpb24iLCAiaW5jbHVkZUludmlzaWJsZSIsICJpdGVtcyIsICJpc1BvaW50SW5BcmVhIiwgImV2YWx1YXRpb25GdW5jIiwgImRhdGFzZXRJbmRleCIsICJfaXNQb2ludEluQXJlYSIsICJjaGFydEFyZWEiLCAiaW5SYW5nZSIsICJwdXNoIiwgImdldE5lYXJlc3RSYWRpYWxJdGVtcyIsICJzdGFydEFuZ2xlIiwgImVuZEFuZ2xlIiwgImdldFByb3BzIiwgImFuZ2xlIiwgImdldEFuZ2xlRnJvbVBvaW50IiwgIl9hbmdsZUJldHdlZW4iLCAiZ2V0TmVhcmVzdENhcnRlc2lhbkl0ZW1zIiwgImRpc3RhbmNlTWV0cmljIiwgIm1pbkRpc3RhbmNlIiwgIk51bWJlciIsICJQT1NJVElWRV9JTkZJTklUWSIsICJjZW50ZXIiLCAiZ2V0Q2VudGVyUG9pbnQiLCAicG9pbnRJbkFyZWEiLCAiZGlzdGFuY2UiLCAiZ2V0TmVhcmVzdEl0ZW1zIiwgImdldEF4aXNJdGVtcyIsICJyYW5nZU1ldGhvZCIsICJpbnRlcnNlY3RzSXRlbSIsICJtb2RlcyIsICJlIiwgImdldFJlbGF0aXZlUG9zaXRpb24iLCAiZWxlbWVudHMiLCAiZm9yRWFjaCIsICJtZXRhIiwgImRhdGFzZXQiLCAiZ2V0RGF0YXNldE1ldGEiLCAicG9pbnQiLCAibmVhcmVzdCIsICJTVEFUSUNfUE9TSVRJT05TIiwgImZpbHRlckJ5UG9zaXRpb24iLCAiYXJyYXkiLCAiZmlsdGVyIiwgInYiLCAicG9zIiwgImZpbHRlckR5bmFtaWNQb3NpdGlvbkJ5QXhpcyIsICJib3giLCAic29ydEJ5V2VpZ2h0IiwgInJldmVyc2UiLCAic29ydCIsICJhIiwgImIiLCAidjAiLCAidjEiLCAid2VpZ2h0IiwgIndyYXBCb3hlcyIsICJib3hlcyIsICJsYXlvdXRCb3hlcyIsICJzdGFjayIsICJzdGFja1dlaWdodCIsICJob3Jpem9udGFsIiwgImlzSG9yaXpvbnRhbCIsICJidWlsZFN0YWNrcyIsICJsYXlvdXRzIiwgInN0YWNrcyIsICJ3cmFwIiwgImluY2x1ZGVzIiwgIl9zdGFjayIsICJjb3VudCIsICJwbGFjZWQiLCAic2l6ZSIsICJzZXRMYXlvdXREaW1zIiwgInBhcmFtcyIsICJ2Qm94TWF4V2lkdGgiLCAiaEJveE1heEhlaWdodCIsICJsYXlvdXQiLCAiZnVsbFNpemUiLCAiZmFjdG9yIiwgIndpZHRoIiwgImF2YWlsYWJsZVdpZHRoIiwgImhlaWdodCIsICJhdmFpbGFibGVIZWlnaHQiLCAiYnVpbGRMYXlvdXRCb3hlcyIsICJsZWZ0IiwgInJpZ2h0IiwgInRvcCIsICJib3R0b20iLCAiY2VudGVySG9yaXpvbnRhbCIsICJjZW50ZXJWZXJ0aWNhbCIsICJsZWZ0QW5kVG9wIiwgImNvbmNhdCIsICJyaWdodEFuZEJvdHRvbSIsICJ2ZXJ0aWNhbCIsICJnZXRDb21iaW5lZE1heCIsICJtYXhQYWRkaW5nIiwgIm1heCIsICJ1cGRhdGVNYXhQYWRkaW5nIiwgImJveFBhZGRpbmciLCAidXBkYXRlRGltcyIsICJpc09iamVjdCIsICJnZXRQYWRkaW5nIiwgIm5ld1dpZHRoIiwgIm91dGVyV2lkdGgiLCAibmV3SGVpZ2h0IiwgIm91dGVySGVpZ2h0IiwgIndpZHRoQ2hhbmdlZCIsICJ3IiwgImhlaWdodENoYW5nZWQiLCAiaCIsICJzYW1lIiwgIm90aGVyIiwgImhhbmRsZU1heFBhZGRpbmciLCAidXBkYXRlUG9zIiwgImNoYW5nZSIsICJnZXRNYXJnaW5zIiwgIm1hcmdpbkZvclBvc2l0aW9ucyIsICJwb3NpdGlvbnMiLCAibWFyZ2luIiwgImZpdEJveGVzIiwgInJlZml0Qm94ZXMiLCAicmVmaXQiLCAiY2hhbmdlZCIsICJ1cGRhdGUiLCAic2V0Qm94RGltcyIsICJwbGFjZUJveGVzIiwgInVzZXJQYWRkaW5nIiwgInBhZGRpbmciLCAiZGVmaW5lZCIsICJhZGRCb3giLCAiaXRlbSIsICJfbGF5ZXJzIiwgInoiLCAiZHJhdyIsICJyZW1vdmVCb3giLCAibGF5b3V0SXRlbSIsICJzcGxpY2UiLCAiY29uZmlndXJlIiwgIm1pblBhZGRpbmciLCAidG9QYWRkaW5nIiwgInZlcnRpY2FsQm94ZXMiLCAiaG9yaXpvbnRhbEJveGVzIiwgImVhY2giLCAiYmVmb3JlTGF5b3V0IiwgInZpc2libGVWZXJ0aWNhbEJveENvdW50IiwgInJlZHVjZSIsICJ0b3RhbCIsICJkaXNwbGF5IiwgImZyZWV6ZSIsICJCYXNlUGxhdGZvcm0iLCAiYWNxdWlyZUNvbnRleHQiLCAiY2FudmFzIiwgImFzcGVjdFJhdGlvIiwgInJlbGVhc2VDb250ZXh0IiwgImNvbnRleHQiLCAiYWRkRXZlbnRMaXN0ZW5lciIsICJ0eXBlIiwgImxpc3RlbmVyIiwgInJlbW92ZUV2ZW50TGlzdGVuZXIiLCAiZ2V0RGV2aWNlUGl4ZWxSYXRpbyIsICJnZXRNYXhpbXVtU2l6ZSIsICJmbG9vciIsICJpc0F0dGFjaGVkIiwgInVwZGF0ZUNvbmZpZyIsICJjb25maWciLCAiQmFzaWNQbGF0Zm9ybSIsICJnZXRDb250ZXh0IiwgImFuaW1hdGlvbiIsICJFWFBBTkRPX0tFWSIsICJFVkVOVF9UWVBFUyIsICJ0b3VjaHN0YXJ0IiwgInRvdWNobW92ZSIsICJ0b3VjaGVuZCIsICJwb2ludGVyZW50ZXIiLCAicG9pbnRlcmRvd24iLCAicG9pbnRlcm1vdmUiLCAicG9pbnRlcnVwIiwgInBvaW50ZXJsZWF2ZSIsICJwb2ludGVyb3V0IiwgImlzTnVsbE9yRW1wdHkiLCAiaW5pdENhbnZhcyIsICJzdHlsZSIsICJyZW5kZXJIZWlnaHQiLCAiZ2V0QXR0cmlidXRlIiwgInJlbmRlcldpZHRoIiwgImluaXRpYWwiLCAiYm94U2l6aW5nIiwgImRpc3BsYXlXaWR0aCIsICJyZWFkVXNlZFNpemUiLCAidW5kZWZpbmVkIiwgImRpc3BsYXlIZWlnaHQiLCAiZXZlbnRMaXN0ZW5lck9wdGlvbnMiLCAic3VwcG9ydHNFdmVudExpc3RlbmVyT3B0aW9ucyIsICJwYXNzaXZlIiwgImFkZExpc3RlbmVyIiwgIm5vZGUiLCAicmVtb3ZlTGlzdGVuZXIiLCAiZnJvbU5hdGl2ZUV2ZW50IiwgImV2ZW50IiwgIm5hdGl2ZSIsICJub2RlTGlzdENvbnRhaW5zIiwgIm5vZGVMaXN0IiwgImNvbnRhaW5zIiwgImNyZWF0ZUF0dGFjaE9ic2VydmVyIiwgIm9ic2VydmVyIiwgIk11dGF0aW9uT2JzZXJ2ZXIiLCAiZW50cmllcyIsICJ0cmlnZ2VyIiwgImVudHJ5IiwgImFkZGVkTm9kZXMiLCAicmVtb3ZlZE5vZGVzIiwgIm9ic2VydmUiLCAiZG9jdW1lbnQiLCAiY2hpbGRMaXN0IiwgInN1YnRyZWUiLCAiY3JlYXRlRGV0YWNoT2JzZXJ2ZXIiLCAiZHJwTGlzdGVuaW5nQ2hhcnRzIiwgIk1hcCIsICJvbGREZXZpY2VQaXhlbFJhdGlvIiwgIm9uV2luZG93UmVzaXplIiwgImRwciIsICJ3aW5kb3ciLCAiZGV2aWNlUGl4ZWxSYXRpbyIsICJyZXNpemUiLCAiY3VycmVudERldmljZVBpeGVsUmF0aW8iLCAibGlzdGVuRGV2aWNlUGl4ZWxSYXRpb0NoYW5nZXMiLCAic2V0IiwgInVubGlzdGVuRGV2aWNlUGl4ZWxSYXRpb0NoYW5nZXMiLCAiZGVsZXRlIiwgImNyZWF0ZVJlc2l6ZU9ic2VydmVyIiwgImNvbnRhaW5lciIsICJfZ2V0UGFyZW50Tm9kZSIsICJ0aHJvdHRsZWQiLCAiY2xpZW50V2lkdGgiLCAiUmVzaXplT2JzZXJ2ZXIiLCAiY29udGVudFJlY3QiLCAicmVsZWFzZU9ic2VydmVyIiwgImRpc2Nvbm5lY3QiLCAiY3JlYXRlUHJveHlBbmRMaXN0ZW4iLCAicHJveHkiLCAiY3R4IiwgIkRvbVBsYXRmb3JtIiwgInByb3AiLCAiaXNOdWxsT3JVbmRlZiIsICJyZW1vdmVBdHRyaWJ1dGUiLCAic2V0QXR0cmlidXRlIiwgImtleXMiLCAia2V5IiwgInByb3hpZXMiLCAiJHByb3hpZXMiLCAiaGFuZGxlcnMiLCAiYXR0YWNoIiwgImRldGFjaCIsICJpc0Nvbm5lY3RlZCIsICJfZGV0ZWN0UGxhdGZvcm0iLCAiX2lzRG9tU3VwcG9ydGVkIiwgIk9mZnNjcmVlbkNhbnZhcyIsICJFbGVtZW50IiwgImFjdGl2ZSIsICIkYW5pbWF0aW9ucyIsICJ0b29sdGlwUG9zaXRpb24iLCAiaGFzVmFsdWUiLCAiaXNOdW1iZXIiLCAicHJvcHMiLCAiZmluYWwiLCAiYW5pbXMiLCAicmV0IiwgIl90byIsICJkZWZhdWx0cyIsICJkZWZhdWx0Um91dGVzIiwgImF1dG9Ta2lwIiwgInNjYWxlIiwgInRpY2tzIiwgInRpY2tPcHRzIiwgImRldGVybWluZWRNYXhUaWNrcyIsICJkZXRlcm1pbmVNYXhUaWNrcyIsICJ0aWNrc0xpbWl0IiwgIm1pbiIsICJtYXhUaWNrc0xpbWl0IiwgIm1ham9ySW5kaWNlcyIsICJtYWpvciIsICJlbmFibGVkIiwgImdldE1ham9ySW5kaWNlcyIsICJudW1NYWpvckluZGljZXMiLCAiZmlyc3QiLCAibGFzdCIsICJuZXdUaWNrcyIsICJza2lwTWFqb3JzIiwgInNwYWNpbmciLCAiY2FsY3VsYXRlU3BhY2luZyIsICJhdmdNYWpvclNwYWNpbmciLCAicm91bmQiLCAib2Zmc2V0IiwgInRpY2tMZW5ndGgiLCAiX3RpY2tTaXplIiwgIm1heFNjYWxlIiwgIl9sZW5ndGgiLCAibWF4Q2hhcnQiLCAiX21heExlbmd0aCIsICJldmVuTWFqb3JTcGFjaW5nIiwgImdldEV2ZW5TcGFjaW5nIiwgImZhY3RvcnMiLCAiX2ZhY3Rvcml6ZSIsICJyZXN1bHQiLCAibmV4dCIsICJjZWlsIiwgIm1ham9yU3RhcnQiLCAibWFqb3JFbmQiLCAidmFsdWVPckRlZmF1bHQiLCAiYXJyIiwgImxlbiIsICJyZXZlcnNlQWxpZ24iLCAiYWxpZ24iLCAib2Zmc2V0RnJvbUVkZ2UiLCAiZWRnZSIsICJnZXRUaWNrc0xpbWl0IiwgInRpY2tzTGVuZ3RoIiwgInNhbXBsZSIsICJudW1JdGVtcyIsICJpbmNyZW1lbnQiLCAiZ2V0UGl4ZWxGb3JHcmlkTGluZSIsICJvZmZzZXRHcmlkTGluZXMiLCAidmFsaWRJbmRleCIsICJfc3RhcnRQaXhlbCIsICJfZW5kUGl4ZWwiLCAiZXBzaWxvbiIsICJsaW5lVmFsdWUiLCAiZ2V0UGl4ZWxGb3JUaWNrIiwgImdhcmJhZ2VDb2xsZWN0IiwgImNhY2hlcyIsICJjYWNoZSIsICJnYyIsICJnY0xlbiIsICJnZXRUaWNrTWFya0xlbmd0aCIsICJkcmF3VGlja3MiLCAiZ2V0VGl0bGVIZWlnaHQiLCAiZmFsbGJhY2siLCAiZm9udCIsICJ0b0ZvbnQiLCAibGluZXMiLCAiaXNBcnJheSIsICJ0ZXh0IiwgImxpbmVIZWlnaHQiLCAiY3JlYXRlU2NhbGVDb250ZXh0IiwgInBhcmVudCIsICJjcmVhdGVDb250ZXh0IiwgImNyZWF0ZVRpY2tDb250ZXh0IiwgInRpY2siLCAidGl0bGVBbGlnbiIsICJfdG9MZWZ0UmlnaHRDZW50ZXIiLCAidGl0bGVBcmdzIiwgInNjYWxlcyIsICJyb3RhdGlvbiIsICJtYXhXaWR0aCIsICJ0aXRsZVgiLCAidGl0bGVZIiwgIl9hbGlnblN0YXJ0RW5kIiwgInBvc2l0aW9uQXhpc0lEIiwgImdldFBpeGVsRm9yVmFsdWUiLCAiSEFMRl9QSSIsICJTY2FsZSIsICJjZmciLCAiaWQiLCAiX21hcmdpbnMiLCAibWF4SGVpZ2h0IiwgInBhZGRpbmdUb3AiLCAicGFkZGluZ0JvdHRvbSIsICJwYWRkaW5nTGVmdCIsICJwYWRkaW5nUmlnaHQiLCAibGFiZWxSb3RhdGlvbiIsICJfcmFuZ2UiLCAiX2dyaWRMaW5lSXRlbXMiLCAiX2xhYmVsSXRlbXMiLCAiX2xhYmVsU2l6ZXMiLCAiX2xvbmdlc3RUZXh0Q2FjaGUiLCAiX3VzZXJNYXgiLCAiX3VzZXJNaW4iLCAiX3N1Z2dlc3RlZE1heCIsICJfc3VnZ2VzdGVkTWluIiwgIl90aWNrc0xlbmd0aCIsICJfYm9yZGVyVmFsdWUiLCAiX2NhY2hlIiwgIl9kYXRhTGltaXRzQ2FjaGVkIiwgIiRjb250ZXh0IiwgInNldENvbnRleHQiLCAic3VnZ2VzdGVkTWluIiwgInN1Z2dlc3RlZE1heCIsICJyYXciLCAiZ2V0VXNlckJvdW5kcyIsICJmaW5pdGVPckRlZmF1bHQiLCAiTkVHQVRJVkVfSU5GSU5JVFkiLCAibWluRGVmaW5lZCIsICJpc0Zpbml0ZSIsICJtYXhEZWZpbmVkIiwgImdldE1pbk1heCIsICJjYW5TdGFjayIsICJtZXRhcyIsICJnZXRNYXRjaGluZ1Zpc2libGVNZXRhcyIsICJnZXRUaWNrcyIsICJnZXRMYWJlbHMiLCAibGFiZWxzIiwgInhMYWJlbHMiLCAieUxhYmVscyIsICJnZXRMYWJlbEl0ZW1zIiwgIl9jb21wdXRlTGFiZWxJdGVtcyIsICJiZWZvcmVVcGRhdGUiLCAiY2FsbCIsICJtYXJnaW5zIiwgImJlZ2luQXRaZXJvIiwgImdyYWNlIiwgInNhbXBsZVNpemUiLCAiYmVmb3JlU2V0RGltZW5zaW9ucyIsICJzZXREaW1lbnNpb25zIiwgImFmdGVyU2V0RGltZW5zaW9ucyIsICJiZWZvcmVEYXRhTGltaXRzIiwgImRldGVybWluZURhdGFMaW1pdHMiLCAiYWZ0ZXJEYXRhTGltaXRzIiwgIl9hZGRHcmFjZSIsICJiZWZvcmVCdWlsZFRpY2tzIiwgImJ1aWxkVGlja3MiLCAiYWZ0ZXJCdWlsZFRpY2tzIiwgInNhbXBsaW5nRW5hYmxlZCIsICJfY29udmVydFRpY2tzVG9MYWJlbHMiLCAiYmVmb3JlQ2FsY3VsYXRlTGFiZWxSb3RhdGlvbiIsICJjYWxjdWxhdGVMYWJlbFJvdGF0aW9uIiwgImFmdGVyQ2FsY3VsYXRlTGFiZWxSb3RhdGlvbiIsICJzb3VyY2UiLCAiYWZ0ZXJBdXRvU2tpcCIsICJiZWZvcmVGaXQiLCAiZml0IiwgImFmdGVyRml0IiwgImFmdGVyVXBkYXRlIiwgInJldmVyc2VQaXhlbHMiLCAic3RhcnRQaXhlbCIsICJlbmRQaXhlbCIsICJfYWxpZ25Ub1BpeGVscyIsICJhbGlnblRvUGl4ZWxzIiwgIl9jYWxsSG9va3MiLCAibmFtZSIsICJub3RpZnlQbHVnaW5zIiwgImJlZm9yZVRpY2tUb0xhYmVsQ29udmVyc2lvbiIsICJnZW5lcmF0ZVRpY2tMYWJlbHMiLCAibGFiZWwiLCAiY2FsbGJhY2siLCAiYWZ0ZXJUaWNrVG9MYWJlbENvbnZlcnNpb24iLCAibnVtVGlja3MiLCAibWluUm90YXRpb24iLCAibWF4Um90YXRpb24iLCAidGlja1dpZHRoIiwgIm1heExhYmVsRGlhZ29uYWwiLCAiX2lzVmlzaWJsZSIsICJsYWJlbFNpemVzIiwgIl9nZXRMYWJlbFNpemVzIiwgIm1heExhYmVsV2lkdGgiLCAid2lkZXN0IiwgIm1heExhYmVsSGVpZ2h0IiwgImhpZ2hlc3QiLCAiX2xpbWl0VmFsdWUiLCAiZ3JpZCIsICJ0aXRsZSIsICJ0b0RlZ3JlZXMiLCAiYXNpbiIsICJtaW5TaXplIiwgInRpdGxlT3B0cyIsICJncmlkT3B0cyIsICJ0aXRsZUhlaWdodCIsICJ0aWNrUGFkZGluZyIsICJhbmdsZVJhZGlhbnMiLCAidG9SYWRpYW5zIiwgImNvcyIsICJzaW4iLCAibGFiZWxIZWlnaHQiLCAibWlycm9yIiwgImxhYmVsV2lkdGgiLCAiX2NhbGN1bGF0ZVBhZGRpbmciLCAiX2hhbmRsZU1hcmdpbnMiLCAiaXNSb3RhdGVkIiwgImxhYmVsc0JlbG93VGlja3MiLCAib2Zmc2V0TGVmdCIsICJvZmZzZXRSaWdodCIsICJpc0Z1bGxTaXplIiwgIl9jb21wdXRlTGFiZWxTaXplcyIsICJ3aWR0aHMiLCAiaGVpZ2h0cyIsICJ3aWRlc3RMYWJlbFNpemUiLCAiaGlnaGVzdExhYmVsU2l6ZSIsICJqbGVuIiwgInRpY2tGb250IiwgImZvbnRTdHJpbmciLCAibmVzdGVkTGFiZWwiLCAiX3Jlc29sdmVUaWNrRm9udE9wdGlvbnMiLCAic3RyaW5nIiwgIl9tZWFzdXJlVGV4dCIsICJ2YWx1ZUF0IiwgImlkeCIsICJnZXRMYWJlbEZvclZhbHVlIiwgIk5hTiIsICJnZXRWYWx1ZUZvclBpeGVsIiwgInBpeGVsIiwgImdldFBpeGVsRm9yRGVjaW1hbCIsICJkZWNpbWFsIiwgIl9pbnQxNlJhbmdlIiwgIl9hbGlnblBpeGVsIiwgImdldERlY2ltYWxGb3JQaXhlbCIsICJnZXRCYXNlUGl4ZWwiLCAiZ2V0QmFzZVZhbHVlIiwgIm9wdGlvblRpY2tzIiwgInJvdCIsICJhdXRvU2tpcFBhZGRpbmciLCAiX2NvbXB1dGVHcmlkTGluZUl0ZW1zIiwgImJvcmRlciIsICJ0bCIsICJib3JkZXJPcHRzIiwgImF4aXNXaWR0aCIsICJheGlzSGFsZldpZHRoIiwgImFsaWduQm9yZGVyVmFsdWUiLCAiYm9yZGVyVmFsdWUiLCAiYWxpZ25lZExpbmVWYWx1ZSIsICJ0eDEiLCAidHkxIiwgInR4MiIsICJ0eTIiLCAieDEiLCAieTEiLCAieDIiLCAieTIiLCAibGltaXQiLCAic3RlcCIsICJvcHRzQXRJbmRleCIsICJvcHRzQXRJbmRleEJvcmRlciIsICJsaW5lV2lkdGgiLCAibGluZUNvbG9yIiwgImNvbG9yIiwgImJvcmRlckRhc2giLCAiZGFzaCIsICJib3JkZXJEYXNoT2Zmc2V0IiwgImRhc2hPZmZzZXQiLCAidGlja0NvbG9yIiwgInRpY2tCb3JkZXJEYXNoIiwgInRpY2tCb3JkZXJEYXNoT2Zmc2V0IiwgImNyb3NzQWxpZ24iLCAidGlja0FuZFBhZGRpbmciLCAiaFRpY2tBbmRQYWRkaW5nIiwgInRleHRBbGlnbiIsICJsaW5lQ291bnQiLCAidGV4dE9mZnNldCIsICJ0ZXh0QmFzZWxpbmUiLCAiX2dldFhBeGlzTGFiZWxBbGlnbm1lbnQiLCAiX2dldFlBeGlzTGFiZWxBbGlnbm1lbnQiLCAibGFiZWxPZmZzZXQiLCAiaGFsZkNvdW50IiwgInN0cm9rZUNvbG9yIiwgInRleHRTdHJva2VDb2xvciIsICJzdHJva2VXaWR0aCIsICJ0ZXh0U3Ryb2tlV2lkdGgiLCAidGlja1RleHRBbGlnbiIsICJzaG93TGFiZWxCYWNrZHJvcCIsICJiYWNrZHJvcCIsICJsYWJlbFBhZGRpbmciLCAiYmFja2Ryb3BQYWRkaW5nIiwgImJhY2tkcm9wQ29sb3IiLCAidHJhbnNsYXRpb24iLCAiX2NvbXB1dGVMYWJlbEFyZWEiLCAiZHJhd0JhY2tncm91bmQiLCAiYmFja2dyb3VuZENvbG9yIiwgInNhdmUiLCAiZmlsbFN0eWxlIiwgImZpbGxSZWN0IiwgInJlc3RvcmUiLCAiZ2V0TGluZVdpZHRoRm9yVmFsdWUiLCAiZmluZEluZGV4IiwgInQiLCAib3B0cyIsICJkcmF3R3JpZCIsICJkcmF3TGluZSIsICJwMSIsICJwMiIsICJzdHJva2VTdHlsZSIsICJzZXRMaW5lRGFzaCIsICJsaW5lRGFzaE9mZnNldCIsICJiZWdpblBhdGgiLCAibW92ZVRvIiwgImxpbmVUbyIsICJzdHJva2UiLCAiZHJhd09uQ2hhcnRBcmVhIiwgImRyYXdCb3JkZXIiLCAibGFzdExpbmVXaWR0aCIsICJkcmF3TGFiZWxzIiwgImFyZWEiLCAiY2xpcEFyZWEiLCAicmVuZGVyVGV4dE9wdGlvbnMiLCAicmVuZGVyVGV4dCIsICJ1bmNsaXBBcmVhIiwgImRyYXdUaXRsZSIsICJ0eiIsICJneiIsICJieiIsICJheGlzSUQiLCAiX21heERpZ2l0cyIsICJmb250U2l6ZSIsICJUeXBlZFJlZ2lzdHJ5IiwgInNjb3BlIiwgImNyZWF0ZSIsICJpc0ZvclR5cGUiLCAiaXNQcm90b3R5cGVPZiIsICJyZWdpc3RlciIsICJwcm90byIsICJnZXRQcm90b3R5cGVPZiIsICJwYXJlbnRTY29wZSIsICJpc0lDaGFydENvbXBvbmVudCIsICJyZWdpc3RlckRlZmF1bHRzIiwgIm92ZXJyaWRlcyIsICJnZXQiLCAidW5yZWdpc3RlciIsICJpdGVtRGVmYXVsdHMiLCAibWVyZ2UiLCAicm91dGVEZWZhdWx0cyIsICJkZXNjcmlwdG9ycyIsICJkZXNjcmliZSIsICJyb3V0ZXMiLCAicHJvcGVydHkiLCAicHJvcGVydHlQYXJ0cyIsICJzcGxpdCIsICJzb3VyY2VOYW1lIiwgInBvcCIsICJzb3VyY2VTY29wZSIsICJqb2luIiwgInBhcnRzIiwgInRhcmdldE5hbWUiLCAidGFyZ2V0U2NvcGUiLCAicm91dGUiLCAiUmVnaXN0cnkiLCAiY29udHJvbGxlcnMiLCAiRGF0YXNldENvbnRyb2xsZXIiLCAicGx1Z2lucyIsICJfdHlwZWRSZWdpc3RyaWVzIiwgImFyZ3MiLCAiX2VhY2giLCAicmVtb3ZlIiwgImFkZENvbnRyb2xsZXJzIiwgImFkZEVsZW1lbnRzIiwgImFkZFBsdWdpbnMiLCAiYWRkU2NhbGVzIiwgImdldENvbnRyb2xsZXIiLCAiX2dldCIsICJnZXRFbGVtZW50IiwgImdldFBsdWdpbiIsICJnZXRTY2FsZSIsICJyZW1vdmVDb250cm9sbGVycyIsICJyZW1vdmVFbGVtZW50cyIsICJyZW1vdmVQbHVnaW5zIiwgInJlbW92ZVNjYWxlcyIsICJtZXRob2QiLCAidHlwZWRSZWdpc3RyeSIsICJhcmciLCAicmVnIiwgIl9nZXRSZWdpc3RyeUZvclR5cGUiLCAiX2V4ZWMiLCAiaXRlbVJlZyIsICJyZWdpc3RyeSIsICJjb21wb25lbnQiLCAiY2FtZWxNZXRob2QiLCAiX2NhcGl0YWxpemUiLCAiUGx1Z2luU2VydmljZSIsICJfaW5pdCIsICJub3RpZnkiLCAiaG9vayIsICJfY3JlYXRlRGVzY3JpcHRvcnMiLCAiX25vdGlmeSIsICJfZGVzY3JpcHRvcnMiLCAiZGVzY3JpcHRvciIsICJwbHVnaW4iLCAiY2FsbENhbGxiYWNrIiwgImNhbmNlbGFibGUiLCAiaW52YWxpZGF0ZSIsICJfb2xkQ2FjaGUiLCAiX25vdGlmeVN0YXRlQ2hhbmdlcyIsICJhbGwiLCAiYWxsUGx1Z2lucyIsICJjcmVhdGVEZXNjcmlwdG9ycyIsICJwcmV2aW91c0Rlc2NyaXB0b3JzIiwgInNvbWUiLCAibG9jYWxJZHMiLCAibG9jYWwiLCAiZ2V0T3B0cyIsICJwbHVnaW5PcHRzIiwgInBsdWdpblNjb3BlS2V5cyIsICJzY29wZXMiLCAiZ2V0T3B0aW9uU2NvcGVzIiwgImNyZWF0ZVJlc29sdmVyIiwgInNjcmlwdGFibGUiLCAiaW5kZXhhYmxlIiwgImFsbEtleXMiLCAiZ2V0SW5kZXhBeGlzIiwgImRhdGFzZXREZWZhdWx0cyIsICJkYXRhc2V0cyIsICJkYXRhc2V0T3B0aW9ucyIsICJpbmRleEF4aXMiLCAiZ2V0QXhpc0Zyb21EZWZhdWx0U2NhbGVJRCIsICJnZXREZWZhdWx0U2NhbGVJREZyb21BeGlzIiwgImlkTWF0Y2hlc0F4aXMiLCAiYXhpc0Zyb21Qb3NpdGlvbiIsICJkZXRlcm1pbmVBeGlzIiwgInNjYWxlT3B0aW9ucyIsICJ0b0xvd2VyQ2FzZSIsICJnZXRBeGlzRnJvbURhdGFzZXQiLCAicmV0cmlldmVBeGlzRnJvbURhdGFzZXRzIiwgImJvdW5kRHMiLCAiZCIsICJ4QXhpc0lEIiwgInlBeGlzSUQiLCAibWVyZ2VTY2FsZUNvbmZpZyIsICJjaGFydERlZmF1bHRzIiwgImNvbmZpZ1NjYWxlcyIsICJjaGFydEluZGV4QXhpcyIsICJzY2FsZUNvbmYiLCAiY29uc29sZSIsICJlcnJvciIsICJfcHJveHkiLCAid2FybiIsICJkZWZhdWx0SWQiLCAiZGVmYXVsdFNjYWxlT3B0aW9ucyIsICJtZXJnZUlmIiwgImRlZmF1bHRJRCIsICJpbml0T3B0aW9ucyIsICJpbml0RGF0YSIsICJpbml0Q29uZmlnIiwgImtleUNhY2hlIiwgImtleXNDYWNoZWQiLCAiU2V0IiwgImNhY2hlZEtleXMiLCAiY2FjaGVLZXkiLCAiZ2VuZXJhdGUiLCAiYWRkSWZGb3VuZCIsICJvYmoiLCAicmVzb2x2ZU9iamVjdEtleSIsICJDb25maWciLCAiX2NvbmZpZyIsICJfc2NvcGVDYWNoZSIsICJfcmVzb2x2ZXJDYWNoZSIsICJwbGF0Zm9ybSIsICJjbGVhckNhY2hlIiwgImNsZWFyIiwgImRhdGFzZXRTY29wZUtleXMiLCAiZGF0YXNldFR5cGUiLCAiZGF0YXNldEFuaW1hdGlvblNjb3BlS2V5cyIsICJ0cmFuc2l0aW9uIiwgImRhdGFzZXRFbGVtZW50U2NvcGVLZXlzIiwgImVsZW1lbnRUeXBlIiwgImFkZGl0aW9uYWxPcHRpb25TY29wZXMiLCAiX2NhY2hlZFNjb3BlcyIsICJtYWluU2NvcGUiLCAicmVzZXRDYWNoZSIsICJrZXlMaXN0cyIsICJjYWNoZWQiLCAiQXJyYXkiLCAiZnJvbSIsICJoYXMiLCAiY2hhcnRPcHRpb25TY29wZXMiLCAicmVzb2x2ZU5hbWVkT3B0aW9ucyIsICJuYW1lcyIsICJwcmVmaXhlcyIsICIkc2hhcmVkIiwgInJlc29sdmVyIiwgInN1YlByZWZpeGVzIiwgImdldFJlc29sdmVyIiwgIm5lZWRDb250ZXh0IiwgImlzRnVuY3Rpb24iLCAic3ViUmVzb2x2ZXIiLCAiX2F0dGFjaENvbnRleHQiLCAiZGVzY3JpcHRvckRlZmF1bHRzIiwgInJlc29sdmVyQ2FjaGUiLCAiX2NyZWF0ZVJlc29sdmVyIiwgInAiLCAiaGFzRnVuY3Rpb24iLCAiZ2V0T3duUHJvcGVydHlOYW1lcyIsICJhY2MiLCAiaXNTY3JpcHRhYmxlIiwgImlzSW5kZXhhYmxlIiwgIktOT1dOX1BPU0lUSU9OUyIsICJwb3NpdGlvbklzSG9yaXpvbnRhbCIsICJjb21wYXJlMkxldmVsIiwgImwxIiwgImwyIiwgIm9uQW5pbWF0aW9uc0NvbXBsZXRlIiwgImFuaW1hdGlvbk9wdGlvbnMiLCAib25Db21wbGV0ZSIsICJvbkFuaW1hdGlvblByb2dyZXNzIiwgIm9uUHJvZ3Jlc3MiLCAiZ2V0Q2FudmFzIiwgImdldEVsZW1lbnRCeUlkIiwgImluc3RhbmNlcyIsICJnZXRDaGFydCIsICJ2YWx1ZXMiLCAiYyIsICJtb3ZlTnVtZXJpY0tleXMiLCAibW92ZSIsICJpbnRLZXkiLCAiZGV0ZXJtaW5lTGFzdEV2ZW50IiwgImxhc3RFdmVudCIsICJpbkNoYXJ0QXJlYSIsICJpc0NsaWNrIiwgImdldERhdGFzZXRBcmVhIiwgInhTY2FsZSIsICJ5U2NhbGUiLCAiQ2hhcnQiLCAiaW52YWxpZGF0ZVBsdWdpbnMiLCAidXNlckNvbmZpZyIsICJpbml0aWFsQ2FudmFzIiwgImV4aXN0aW5nQ2hhcnQiLCAidWlkIiwgIl9vcHRpb25zIiwgIl9hc3BlY3RSYXRpbyIsICJfbWV0YXNldHMiLCAiX3N0YWNrcyIsICJfYWN0aXZlIiwgIl9sYXN0RXZlbnQiLCAiX2xpc3RlbmVycyIsICJfcmVzcG9uc2l2ZUxpc3RlbmVycyIsICJfc29ydGVkTWV0YXNldHMiLCAiX3BsdWdpbnMiLCAiX2hpZGRlbkluZGljZXMiLCAiYXR0YWNoZWQiLCAiX2FuaW1hdGlvbnNEaXNhYmxlZCIsICJfZG9SZXNpemUiLCAiZGVib3VuY2UiLCAibW9kZSIsICJyZXNpemVEZWxheSIsICJfZGF0YUNoYW5nZXMiLCAiYW5pbWF0b3IiLCAibGlzdGVuIiwgIl9pbml0aWFsaXplIiwgIm1haW50YWluQXNwZWN0UmF0aW8iLCAicmVzcG9uc2l2ZSIsICJyZXRpbmFTY2FsZSIsICJiaW5kRXZlbnRzIiwgImNsZWFyQ2FudmFzIiwgInN0b3AiLCAicnVubmluZyIsICJfcmVzaXplIiwgIl9yZXNpemVCZWZvcmVEcmF3IiwgIm5ld1NpemUiLCAibmV3UmF0aW8iLCAib25SZXNpemUiLCAicmVuZGVyIiwgImVuc3VyZVNjYWxlc0hhdmVJRHMiLCAic2NhbGVzT3B0aW9ucyIsICJheGlzT3B0aW9ucyIsICJidWlsZE9yVXBkYXRlU2NhbGVzIiwgInNjYWxlT3B0cyIsICJ1cGRhdGVkIiwgIm1hcCIsICJpc1JhZGlhbCIsICJkcG9zaXRpb24iLCAiZHR5cGUiLCAic2NhbGVUeXBlIiwgInNjYWxlQ2xhc3MiLCAiaGFzVXBkYXRlZCIsICJfdXBkYXRlTWV0YXNldHMiLCAibnVtRGF0YSIsICJudW1NZXRhIiwgIl9kZXN0cm95RGF0YXNldE1ldGEiLCAic2xpY2UiLCAiX3JlbW92ZVVucmVmZXJlbmNlZE1ldGFzZXRzIiwgIl9kYXRhc2V0IiwgImJ1aWxkT3JVcGRhdGVDb250cm9sbGVycyIsICJuZXdDb250cm9sbGVycyIsICJvcmRlciIsICJ2aXNpYmxlIiwgImlzRGF0YXNldFZpc2libGUiLCAidXBkYXRlSW5kZXgiLCAibGlua1NjYWxlcyIsICJDb250cm9sbGVyQ2xhc3MiLCAiZGF0YXNldEVsZW1lbnRUeXBlIiwgImRhdGFFbGVtZW50VHlwZSIsICJfcmVzZXRFbGVtZW50cyIsICJyZXNldCIsICJhbmltc0Rpc2FibGVkIiwgIl91cGRhdGVTY2FsZXMiLCAiX2NoZWNrRXZlbnRCaW5kaW5ncyIsICJfdXBkYXRlSGlkZGVuSW5kaWNlcyIsICJidWlsZE9yVXBkYXRlRWxlbWVudHMiLCAiZ2V0TWF4T3ZlcmZsb3ciLCAiX21pblBhZGRpbmciLCAiYXV0b1BhZGRpbmciLCAiX3VwZGF0ZUxheW91dCIsICJfdXBkYXRlRGF0YXNldHMiLCAiX2V2ZW50SGFuZGxlciIsICJfdXBkYXRlSG92ZXJTdHlsZXMiLCAiZXhpc3RpbmdFdmVudHMiLCAibmV3RXZlbnRzIiwgImV2ZW50cyIsICJzZXRzRXF1YWwiLCAidW5iaW5kRXZlbnRzIiwgImNoYW5nZXMiLCAiX2dldFVuaWZvcm1EYXRhQ2hhbmdlcyIsICJkYXRhc2V0Q291bnQiLCAibWFrZVNldCIsICJjaGFuZ2VTZXQiLCAibm9BcmVhIiwgIl9pZHgiLCAiX3VwZGF0ZURhdGFzZXQiLCAiX3VwZGF0ZSIsICJsYXllcnMiLCAiX2RyYXdEYXRhc2V0cyIsICJfZ2V0U29ydGVkRGF0YXNldE1ldGFzIiwgImZpbHRlclZpc2libGUiLCAiX2RyYXdEYXRhc2V0IiwgImNsaXAiLCAiX2NsaXAiLCAidXNlQ2xpcCIsICJkaXNhYmxlZCIsICJnZXRFbGVtZW50c0F0RXZlbnRGb3JNb2RlIiwgIkludGVyYWN0aW9uIiwgImhpZGRlbiIsICJfcGFyc2VkIiwgImdldFZpc2libGVEYXRhc2V0Q291bnQiLCAic2V0RGF0YXNldFZpc2liaWxpdHkiLCAidG9nZ2xlRGF0YVZpc2liaWxpdHkiLCAiZ2V0RGF0YVZpc2liaWxpdHkiLCAiX3VwZGF0ZVZpc2liaWxpdHkiLCAiZGF0YUluZGV4IiwgIl9yZXNvbHZlQW5pbWF0aW9ucyIsICJoaWRlIiwgInNob3ciLCAiX2Rlc3Ryb3kiLCAiX3N0b3AiLCAiZGVzdHJveSIsICJ0b0Jhc2U2NEltYWdlIiwgInRvRGF0YVVSTCIsICJiaW5kVXNlckV2ZW50cyIsICJiaW5kUmVzcG9uc2l2ZUV2ZW50cyIsICJsaXN0ZW5lcnMiLCAiX2FkZCIsICJvZmZzZXRYIiwgIm9mZnNldFkiLCAiX3JlbW92ZSIsICJkZXRhY2hlZCIsICJ1cGRhdGVIb3ZlclN0eWxlIiwgInByZWZpeCIsICJnZXRBY3RpdmVFbGVtZW50cyIsICJzZXRBY3RpdmVFbGVtZW50cyIsICJhY3RpdmVFbGVtZW50cyIsICJsYXN0QWN0aXZlIiwgIl9lbGVtZW50c0VxdWFsIiwgImlzUGx1Z2luRW5hYmxlZCIsICJwbHVnaW5JZCIsICJyZXBsYXkiLCAiaG92ZXJPcHRpb25zIiwgImhvdmVyIiwgImRlYWN0aXZhdGVkIiwgImFjdGl2YXRlZCIsICJldmVudEZpbHRlciIsICJfaGFuZGxlRXZlbnQiLCAiX2dldEFjdGl2ZUVsZW1lbnRzIiwgIl9pc0NsaWNrRXZlbnQiLCAib25Ib3ZlciIsICJvbkNsaWNrIiwgInZlcnNpb24iLCAiY2xpcEFyYyIsICJwaXhlbE1hcmdpbiIsICJvdXRlclJhZGl1cyIsICJpbm5lclJhZGl1cyIsICJhbmdsZU1hcmdpbiIsICJhcmMiLCAiY2xvc2VQYXRoIiwgInRvUmFkaXVzQ29ybmVycyIsICJfcmVhZFZhbHVlVG9Qcm9wcyIsICJwYXJzZUJvcmRlclJhZGl1cyIsICJhbmdsZURlbHRhIiwgIm8iLCAiYm9yZGVyUmFkaXVzIiwgImhhbGZUaGlja25lc3MiLCAiaW5uZXJMaW1pdCIsICJjb21wdXRlT3V0ZXJMaW1pdCIsICJ2YWwiLCAib3V0ZXJBcmNMaW1pdCIsICJvdXRlclN0YXJ0IiwgIm91dGVyRW5kIiwgImlubmVyU3RhcnQiLCAiaW5uZXJFbmQiLCAiclRoZXRhVG9YWSIsICJyIiwgInRoZXRhIiwgInBhdGhBcmMiLCAiY2lyY3VsYXIiLCAiaW5uZXJSIiwgInNwYWNpbmdPZmZzZXQiLCAiYWxwaGEiLCAibm9TcGFjaW5nSW5uZXJSYWRpdXMiLCAibm9TcGFjaW5nT3V0ZXJSYWRpdXMiLCAiYXZOb2dTcGFjaW5nUmFkaXVzIiwgImFkanVzdGVkQW5nbGUiLCAiYmV0YSIsICJQSSIsICJhbmdsZU9mZnNldCIsICJvdXRlclN0YXJ0QWRqdXN0ZWRSYWRpdXMiLCAib3V0ZXJFbmRBZGp1c3RlZFJhZGl1cyIsICJvdXRlclN0YXJ0QWRqdXN0ZWRBbmdsZSIsICJvdXRlckVuZEFkanVzdGVkQW5nbGUiLCAiaW5uZXJTdGFydEFkanVzdGVkUmFkaXVzIiwgImlubmVyRW5kQWRqdXN0ZWRSYWRpdXMiLCAiaW5uZXJTdGFydEFkanVzdGVkQW5nbGUiLCAiaW5uZXJFbmRBZGp1c3RlZEFuZ2xlIiwgIm91dGVyTWlkQWRqdXN0ZWRBbmdsZSIsICJwQ2VudGVyIiwgInA0IiwgImlubmVyTWlkQWRqdXN0ZWRBbmdsZSIsICJwOCIsICJvdXRlclN0YXJ0WCIsICJvdXRlclN0YXJ0WSIsICJvdXRlckVuZFgiLCAib3V0ZXJFbmRZIiwgImRyYXdBcmMiLCAiZnVsbENpcmNsZXMiLCAiY2lyY3VtZmVyZW5jZSIsICJmaWxsIiwgImlzTmFOIiwgIlRBVSIsICJib3JkZXJXaWR0aCIsICJib3JkZXJKb2luU3R5bGUiLCAiaW5uZXIiLCAiYm9yZGVyQWxpZ24iLCAibGluZUpvaW4iLCAiQXJjRWxlbWVudCIsICJjaGFydFgiLCAiY2hhcnRZIiwgInJBZGp1c3QiLCAiX2NpcmN1bWZlcmVuY2UiLCAiYmV0d2VlbkFuZ2xlcyIsICJ3aXRoaW5SYWRpdXMiLCAiX2lzQmV0d2VlbiIsICJoYWxmQW5nbGUiLCAiaGFsZlJhZGl1cyIsICJ0cmFuc2xhdGUiLCAiZml4IiwgInJhZGl1c09mZnNldCIsICJib3JkZXJDb2xvciIsICJfc2NyaXB0YWJsZSIsICJfaW5kZXhhYmxlIiwgImdldEJhckJvdW5kcyIsICJiYXIiLCAidXNlRmluYWxQb3NpdGlvbiIsICJ4IiwgInkiLCAiYmFzZSIsICJ3aWR0aCIsICJoZWlnaHQiLCAiZ2V0UHJvcHMiLCAibGVmdCIsICJyaWdodCIsICJ0b3AiLCAiYm90dG9tIiwgImhhbGYiLCAiaG9yaXpvbnRhbCIsICJNYXRoIiwgIm1pbiIsICJtYXgiLCAic2tpcE9yTGltaXQiLCAic2tpcCIsICJ2YWx1ZSIsICJfbGltaXRWYWx1ZSIsICJwYXJzZUJvcmRlcldpZHRoIiwgIm1heFciLCAibWF4SCIsICJvcHRpb25zIiwgImJvcmRlcldpZHRoIiwgImJvcmRlclNraXBwZWQiLCAibyIsICJ0b1RSQkwiLCAidCIsICJyIiwgImIiLCAibCIsICJwYXJzZUJvcmRlclJhZGl1cyIsICJlbmFibGVCb3JkZXJSYWRpdXMiLCAiYm9yZGVyUmFkaXVzIiwgInRvVFJCTENvcm5lcnMiLCAibWF4UiIsICJlbmFibGVCb3JkZXIiLCAiaXNPYmplY3QiLCAidG9wTGVmdCIsICJ0b3BSaWdodCIsICJib3R0b21MZWZ0IiwgImJvdHRvbVJpZ2h0IiwgImJvdW5kaW5nUmVjdHMiLCAiYm91bmRzIiwgImJvcmRlciIsICJyYWRpdXMiLCAib3V0ZXIiLCAidyIsICJoIiwgImlubmVyIiwgImluUmFuZ2UiLCAic2tpcFgiLCAic2tpcFkiLCAic2tpcEJvdGgiLCAiX2lzQmV0d2VlbiIsICJoYXNSYWRpdXMiLCAiYWRkTm9ybWFsUmVjdFBhdGgiLCAiY3R4IiwgInJlY3QiLCAiaW5mbGF0ZVJlY3QiLCAiYW1vdW50IiwgInJlZlJlY3QiLCAiQmFyRWxlbWVudCIsICJFbGVtZW50IiwgImNvbnN0cnVjdG9yIiwgImNmZyIsICJ1bmRlZmluZWQiLCAiaW5mbGF0ZUFtb3VudCIsICJPYmplY3QiLCAiYXNzaWduIiwgImRyYXciLCAiYm9yZGVyQ29sb3IiLCAiYmFja2dyb3VuZENvbG9yIiwgImFkZFJlY3RQYXRoIiwgImFkZFJvdW5kZWRSZWN0UGF0aCIsICJzYXZlIiwgImJlZ2luUGF0aCIsICJjbGlwIiwgImZpbGxTdHlsZSIsICJmaWxsIiwgInJlc3RvcmUiLCAibW91c2VYIiwgIm1vdXNlWSIsICJpblhSYW5nZSIsICJpbllSYW5nZSIsICJnZXRDZW50ZXJQb2ludCIsICJnZXRSYW5nZSIsICJheGlzIiwgImlkIiwgImRlZmF1bHRzIiwgInBvaW50U3R5bGUiLCAiZGVmYXVsdFJvdXRlcyIsICJnZXRCb3hTaXplIiwgImxhYmVsT3B0cyIsICJmb250U2l6ZSIsICJib3hIZWlnaHQiLCAiYm94V2lkdGgiLCAidXNlUG9pbnRTdHlsZSIsICJNYXRoIiwgIm1pbiIsICJwb2ludFN0eWxlV2lkdGgiLCAiaXRlbUhlaWdodCIsICJtYXgiLCAiaXRlbXNFcXVhbCIsICJhIiwgImIiLCAiZGF0YXNldEluZGV4IiwgImluZGV4IiwgIkxlZ2VuZCIsICJFbGVtZW50IiwgImNvbnN0cnVjdG9yIiwgImNvbmZpZyIsICJfYWRkZWQiLCAibGVnZW5kSGl0Qm94ZXMiLCAiX2hvdmVyZWRJdGVtIiwgImRvdWdobnV0TW9kZSIsICJjaGFydCIsICJvcHRpb25zIiwgImN0eCIsICJsZWdlbmRJdGVtcyIsICJ1bmRlZmluZWQiLCAiY29sdW1uU2l6ZXMiLCAibGluZVdpZHRocyIsICJtYXhIZWlnaHQiLCAibWF4V2lkdGgiLCAidG9wIiwgImJvdHRvbSIsICJsZWZ0IiwgInJpZ2h0IiwgImhlaWdodCIsICJ3aWR0aCIsICJfbWFyZ2lucyIsICJwb3NpdGlvbiIsICJ3ZWlnaHQiLCAiZnVsbFNpemUiLCAidXBkYXRlIiwgIm1hcmdpbnMiLCAic2V0RGltZW5zaW9ucyIsICJidWlsZExhYmVscyIsICJmaXQiLCAiaXNIb3Jpem9udGFsIiwgImxhYmVscyIsICJjYWxsIiwgImdlbmVyYXRlTGFiZWxzIiwgImZpbHRlciIsICJpdGVtIiwgImRhdGEiLCAic29ydCIsICJyZXZlcnNlIiwgImRpc3BsYXkiLCAibGFiZWxGb250IiwgInRvRm9udCIsICJmb250IiwgInNpemUiLCAidGl0bGVIZWlnaHQiLCAiX2NvbXB1dGVUaXRsZUhlaWdodCIsICJzdHJpbmciLCAiX2ZpdFJvd3MiLCAiX2ZpdENvbHMiLCAicGFkZGluZyIsICJoaXRib3hlcyIsICJsaW5lSGVpZ2h0IiwgInRvdGFsSGVpZ2h0IiwgInRleHRBbGlnbiIsICJ0ZXh0QmFzZWxpbmUiLCAicm93IiwgImZvckVhY2giLCAibGVnZW5kSXRlbSIsICJpIiwgIml0ZW1XaWR0aCIsICJtZWFzdXJlVGV4dCIsICJ0ZXh0IiwgImxlbmd0aCIsICJfaXRlbUhlaWdodCIsICJoZWlnaHRMaW1pdCIsICJ0b3RhbFdpZHRoIiwgImN1cnJlbnRDb2xXaWR0aCIsICJjdXJyZW50Q29sSGVpZ2h0IiwgImNvbCIsICJjYWxjdWxhdGVJdGVtU2l6ZSIsICJwdXNoIiwgImFkanVzdEhpdEJveGVzIiwgImFsaWduIiwgInJ0bCIsICJydGxIZWxwZXIiLCAiZ2V0UnRsQWRhcHRlciIsICJfYWxpZ25TdGFydEVuZCIsICJoaXRib3giLCAibGVmdEZvckx0ciIsICJ4IiwgImRyYXciLCAiY2xpcEFyZWEiLCAiX2RyYXciLCAidW5jbGlwQXJlYSIsICJvcHRzIiwgImRlZmF1bHRDb2xvciIsICJkZWZhdWx0cyIsICJjb2xvciIsICJoYWxmRm9udFNpemUiLCAiY3Vyc29yIiwgImRyYXdUaXRsZSIsICJsaW5lV2lkdGgiLCAiZHJhd0xlZ2VuZEJveCIsICJ5IiwgImlzTmFOIiwgInNhdmUiLCAidmFsdWVPckRlZmF1bHQiLCAiZmlsbFN0eWxlIiwgImxpbmVDYXAiLCAibGluZURhc2hPZmZzZXQiLCAibGluZUpvaW4iLCAic3Ryb2tlU3R5bGUiLCAic2V0TGluZURhc2giLCAibGluZURhc2giLCAiZHJhd09wdGlvbnMiLCAicmFkaXVzIiwgIlNRUlQyIiwgInBvaW50U3R5bGUiLCAicm90YXRpb24iLCAiYm9yZGVyV2lkdGgiLCAiY2VudGVyWCIsICJ4UGx1cyIsICJjZW50ZXJZIiwgImRyYXdQb2ludExlZ2VuZCIsICJ5Qm94VG9wIiwgInhCb3hMZWZ0IiwgImJvcmRlclJhZGl1cyIsICJ0b1RSQkxDb3JuZXJzIiwgImJlZ2luUGF0aCIsICJPYmplY3QiLCAidmFsdWVzIiwgInNvbWUiLCAidiIsICJhZGRSb3VuZGVkUmVjdFBhdGgiLCAidyIsICJoIiwgInJlY3QiLCAiZmlsbCIsICJzdHJva2UiLCAicmVzdG9yZSIsICJmaWxsVGV4dCIsICJyZW5kZXJUZXh0IiwgInN0cmlrZXRocm91Z2giLCAiaGlkZGVuIiwgImxpbmUiLCAib3ZlcnJpZGVUZXh0RGlyZWN0aW9uIiwgInRleHREaXJlY3Rpb24iLCAiZm9udENvbG9yIiwgInRleHRXaWR0aCIsICJzZXRXaWR0aCIsICJyZWFsWCIsICJfdGV4dFgiLCAiZm9udExpbmVIZWlnaHQiLCAiY2FsY3VsYXRlTGVnZW5kSXRlbUhlaWdodCIsICJyZXN0b3JlVGV4dERpcmVjdGlvbiIsICJ0aXRsZU9wdHMiLCAidGl0bGUiLCAidGl0bGVGb250IiwgInRpdGxlUGFkZGluZyIsICJ0b1BhZGRpbmciLCAidG9wUGFkZGluZ1BsdXNIYWxmRm9udFNpemUiLCAicmVkdWNlIiwgImFjYyIsICJfdG9MZWZ0UmlnaHRDZW50ZXIiLCAiX2dldExlZ2VuZEl0ZW1BdCIsICJoaXRCb3giLCAibGgiLCAiX2lzQmV0d2VlbiIsICJoYW5kbGVFdmVudCIsICJlIiwgImlzTGlzdGVuZWQiLCAidHlwZSIsICJob3ZlcmVkSXRlbSIsICJwcmV2aW91cyIsICJzYW1lSXRlbSIsICJvbkxlYXZlIiwgIm9uSG92ZXIiLCAib25DbGljayIsICJjYWxjdWxhdGVJdGVtV2lkdGgiLCAiY2FsY3VsYXRlSXRlbUhlaWdodCIsICJsZWdlbmRJdGVtVGV4dCIsICJsYWJlbEhlaWdodCIsICJpZCIsICJfZWxlbWVudCIsICJzdGFydCIsICJfYXJncyIsICJsZWdlbmQiLCAibGF5b3V0cyIsICJjb25maWd1cmUiLCAiYWRkQm94IiwgInN0b3AiLCAicmVtb3ZlQm94IiwgImJlZm9yZVVwZGF0ZSIsICJhZnRlclVwZGF0ZSIsICJhZnRlckV2ZW50IiwgImFyZ3MiLCAicmVwbGF5IiwgImV2ZW50IiwgImNpIiwgImlzRGF0YXNldFZpc2libGUiLCAiaGlkZSIsICJzaG93IiwgImRhdGFzZXRzIiwgInVzZUJvcmRlclJhZGl1cyIsICJfZ2V0U29ydGVkRGF0YXNldE1ldGFzIiwgIm1hcCIsICJtZXRhIiwgInN0eWxlIiwgImNvbnRyb2xsZXIiLCAiZ2V0U3R5bGUiLCAibGFiZWwiLCAiYmFja2dyb3VuZENvbG9yIiwgInZpc2libGUiLCAiYm9yZGVyQ2FwU3R5bGUiLCAiYm9yZGVyRGFzaCIsICJib3JkZXJEYXNoT2Zmc2V0IiwgImJvcmRlckpvaW5TdHlsZSIsICJib3JkZXJDb2xvciIsICJkZXNjcmlwdG9ycyIsICJfc2NyaXB0YWJsZSIsICJuYW1lIiwgInN0YXJ0c1dpdGgiLCAiaW5jbHVkZXMiLCAiVGl0bGUiLCAiX3BhZGRpbmciLCAibGluZUNvdW50IiwgImlzQXJyYXkiLCAidGV4dFNpemUiLCAicG9zIiwgIl9kcmF3QXJncyIsICJvZmZzZXQiLCAidGl0bGVYIiwgInRpdGxlWSIsICJQSSIsICJmb250T3B0cyIsICJ0cmFuc2xhdGlvbiIsICJjcmVhdGVUaXRsZSIsICJ0aXRsZUJsb2NrIiwgImRlZmF1bHRSb3V0ZXMiLCAiX2luZGV4YWJsZSIsICJXZWFrTWFwIiwgInNldCIsICJnZXQiLCAiZGVsZXRlIiwgInBvc2l0aW9uZXJzIiwgImF2ZXJhZ2UiLCAiaXRlbXMiLCAibGVuIiwgImNvdW50IiwgImVsIiwgImVsZW1lbnQiLCAiaGFzVmFsdWUiLCAidG9vbHRpcFBvc2l0aW9uIiwgIm5lYXJlc3QiLCAiZXZlbnRQb3NpdGlvbiIsICJtaW5EaXN0YW5jZSIsICJOdW1iZXIiLCAiUE9TSVRJVkVfSU5GSU5JVFkiLCAibmVhcmVzdEVsZW1lbnQiLCAiY2VudGVyIiwgImdldENlbnRlclBvaW50IiwgImQiLCAiZGlzdGFuY2VCZXR3ZWVuUG9pbnRzIiwgInRwIiwgInB1c2hPckNvbmNhdCIsICJiYXNlIiwgInRvUHVzaCIsICJBcnJheSIsICJwcm90b3R5cGUiLCAiYXBwbHkiLCAic3BsaXROZXdsaW5lcyIsICJzdHIiLCAiU3RyaW5nIiwgImluZGV4T2YiLCAic3BsaXQiLCAiY3JlYXRlVG9vbHRpcEl0ZW0iLCAiZ2V0RGF0YXNldE1ldGEiLCAidmFsdWUiLCAiZ2V0TGFiZWxBbmRWYWx1ZSIsICJwYXJzZWQiLCAiZ2V0UGFyc2VkIiwgInJhdyIsICJmb3JtYXR0ZWRWYWx1ZSIsICJkYXRhc2V0IiwgImdldERhdGFzZXQiLCAiZGF0YUluZGV4IiwgImdldFRvb2x0aXBTaXplIiwgInRvb2x0aXAiLCAiYm9keSIsICJmb290ZXIiLCAiYm9keUZvbnQiLCAiZm9vdGVyRm9udCIsICJ0aXRsZUxpbmVDb3VudCIsICJmb290ZXJMaW5lQ291bnQiLCAiYm9keUxpbmVJdGVtQ291bnQiLCAiY29tYmluZWRCb2R5TGVuZ3RoIiwgImJvZHlJdGVtIiwgImJlZm9yZSIsICJsaW5lcyIsICJhZnRlciIsICJiZWZvcmVCb2R5IiwgImFmdGVyQm9keSIsICJ0aXRsZVNwYWNpbmciLCAidGl0bGVNYXJnaW5Cb3R0b20iLCAiYm9keUxpbmVIZWlnaHQiLCAiZGlzcGxheUNvbG9ycyIsICJib2R5U3BhY2luZyIsICJmb290ZXJNYXJnaW5Ub3AiLCAiZm9vdGVyU3BhY2luZyIsICJ3aWR0aFBhZGRpbmciLCAibWF4TGluZVdpZHRoIiwgImVhY2giLCAiY29uY2F0IiwgImJveFBhZGRpbmciLCAiZGV0ZXJtaW5lWUFsaWduIiwgImRvZXNOb3RGaXRXaXRoQWxpZ24iLCAieEFsaWduIiwgImNhcmV0IiwgImNhcmV0U2l6ZSIsICJjYXJldFBhZGRpbmciLCAiZGV0ZXJtaW5lWEFsaWduIiwgInlBbGlnbiIsICJjaGFydFdpZHRoIiwgImNoYXJ0QXJlYSIsICJkZXRlcm1pbmVBbGlnbm1lbnQiLCAiYWxpZ25YIiwgImFsaWduWSIsICJwYWRkaW5nQW5kU2l6ZSIsICJnZXRCYWNrZ3JvdW5kUG9pbnQiLCAiYWxpZ25tZW50IiwgImNvcm5lclJhZGl1cyIsICJ0b3BMZWZ0IiwgInRvcFJpZ2h0IiwgImJvdHRvbUxlZnQiLCAiYm90dG9tUmlnaHQiLCAiX2xpbWl0VmFsdWUiLCAiZ2V0QWxpZ25lZFgiLCAiZ2V0QmVmb3JlQWZ0ZXJCb2R5TGluZXMiLCAiY2FsbGJhY2siLCAiY3JlYXRlVG9vbHRpcENvbnRleHQiLCAicGFyZW50IiwgInRvb2x0aXBJdGVtcyIsICJjcmVhdGVDb250ZXh0IiwgIm92ZXJyaWRlQ2FsbGJhY2tzIiwgImNhbGxiYWNrcyIsICJjb250ZXh0IiwgIm92ZXJyaWRlIiwgImRlZmF1bHRDYWxsYmFja3MiLCAiYmVmb3JlVGl0bGUiLCAibm9vcCIsICJsYWJlbENvdW50IiwgIm1vZGUiLCAiYWZ0ZXJUaXRsZSIsICJiZWZvcmVMYWJlbCIsICJ0b29sdGlwSXRlbSIsICJpc051bGxPclVuZGVmIiwgImxhYmVsQ29sb3IiLCAibGFiZWxUZXh0Q29sb3IiLCAiYm9keUNvbG9yIiwgImxhYmVsUG9pbnRTdHlsZSIsICJhZnRlckxhYmVsIiwgImJlZm9yZUZvb3RlciIsICJhZnRlckZvb3RlciIsICJpbnZva2VDYWxsYmFja1dpdGhGYWxsYmFjayIsICJhcmciLCAicmVzdWx0IiwgIlRvb2x0aXAiLCAib3BhY2l0eSIsICJfYWN0aXZlIiwgIl9ldmVudFBvc2l0aW9uIiwgIl9zaXplIiwgIl9jYWNoZWRBbmltYXRpb25zIiwgIl90b29sdGlwSXRlbXMiLCAiJGFuaW1hdGlvbnMiLCAiJGNvbnRleHQiLCAiZGF0YVBvaW50cyIsICJjYXJldFgiLCAiY2FyZXRZIiwgImxhYmVsQ29sb3JzIiwgImxhYmVsUG9pbnRTdHlsZXMiLCAibGFiZWxUZXh0Q29sb3JzIiwgImluaXRpYWxpemUiLCAiX3Jlc29sdmVBbmltYXRpb25zIiwgImNhY2hlZCIsICJzZXRDb250ZXh0IiwgImdldENvbnRleHQiLCAiZW5hYmxlZCIsICJhbmltYXRpb24iLCAiYW5pbWF0aW9ucyIsICJBbmltYXRpb25zIiwgIl9jYWNoZWFibGUiLCAiZnJlZXplIiwgImdldFRpdGxlIiwgImdldEJlZm9yZUJvZHkiLCAiZ2V0Qm9keSIsICJib2R5SXRlbXMiLCAic2NvcGVkIiwgImdldEFmdGVyQm9keSIsICJnZXRGb290ZXIiLCAiX2NyZWF0ZUl0ZW1zIiwgImFjdGl2ZSIsICJhcnJheSIsICJpdGVtU29ydCIsICJjaGFuZ2VkIiwgInByb3BlcnRpZXMiLCAicG9zaXRpb25BbmRTaXplIiwgImFzc2lnbiIsICJiYWNrZ3JvdW5kUG9pbnQiLCAiZXh0ZXJuYWwiLCAiZHJhd0NhcmV0IiwgInRvb2x0aXBQb2ludCIsICJjYXJldFBvc2l0aW9uIiwgImdldENhcmV0UG9zaXRpb24iLCAibGluZVRvIiwgIngxIiwgInkxIiwgIngyIiwgInkyIiwgIngzIiwgInkzIiwgInB0WCIsICJwdFkiLCAicHQiLCAidGl0bGVBbGlnbiIsICJ0aXRsZUNvbG9yIiwgIl9kcmF3Q29sb3JCb3giLCAiY29sb3JYIiwgInJ0bENvbG9yWCIsICJ5T2ZmU2V0IiwgImNvbG9yWSIsICJtdWx0aUtleUJhY2tncm91bmQiLCAiZHJhd1BvaW50IiwgImlzT2JqZWN0IiwgIm91dGVyWCIsICJpbm5lclgiLCAiZmlsbFJlY3QiLCAic3Ryb2tlUmVjdCIsICJkcmF3Qm9keSIsICJib2R5QWxpZ24iLCAieExpbmVQYWRkaW5nIiwgImZpbGxMaW5lT2ZUZXh0IiwgImJvZHlBbGlnbkZvckNhbGN1bGF0aW9uIiwgInRleHRDb2xvciIsICJqIiwgImlsZW4iLCAiamxlbiIsICJkcmF3Rm9vdGVyIiwgImZvb3RlckFsaWduIiwgImZvb3RlckNvbG9yIiwgImRyYXdCYWNrZ3JvdW5kIiwgInRvb2x0aXBTaXplIiwgIm1vdmVUbyIsICJxdWFkcmF0aWNDdXJ2ZVRvIiwgImNsb3NlUGF0aCIsICJfdXBkYXRlQW5pbWF0aW9uVGFyZ2V0IiwgImFuaW1zIiwgImFuaW1YIiwgImFuaW1ZIiwgInBvaW50IiwgIl90byIsICJfd2lsbFJlbmRlciIsICJhYnMiLCAiaGFzVG9vbHRpcENvbnRlbnQiLCAiZ2xvYmFsQWxwaGEiLCAiZ2V0QWN0aXZlRWxlbWVudHMiLCAic2V0QWN0aXZlRWxlbWVudHMiLCAiYWN0aXZlRWxlbWVudHMiLCAibGFzdEFjdGl2ZSIsICJFcnJvciIsICJfZWxlbWVudHNFcXVhbCIsICJwb3NpdGlvbkNoYW5nZWQiLCAiX3Bvc2l0aW9uQ2hhbmdlZCIsICJfaWdub3JlUmVwbGF5RXZlbnRzIiwgImluQ2hhcnRBcmVhIiwgIl9nZXRBY3RpdmVFbGVtZW50cyIsICJnZXRFbGVtZW50c0F0RXZlbnRGb3JNb2RlIiwgImFmdGVySW5pdCIsICJyZXNldCIsICJhZnRlckRyYXciLCAibm90aWZ5UGx1Z2lucyIsICJjYW5jZWxhYmxlIiwgInVzZUZpbmFsUG9zaXRpb24iLCAiZHVyYXRpb24iLCAiZWFzaW5nIiwgIm51bWJlcnMiLCAiX2ZhbGxiYWNrIiwgImFkZGl0aW9uYWxPcHRpb25TY29wZXMiLCAiYWRkSWZTdHJpbmciLCAibGFiZWxzIiwgInJhdyIsICJpbmRleCIsICJhZGRlZExhYmVscyIsICJwdXNoIiwgInVuc2hpZnQiLCAibGFiZWwiLCAiaXNOYU4iLCAiZmluZE9yQWRkTGFiZWwiLCAiZmlyc3QiLCAiaW5kZXhPZiIsICJsYXN0IiwgImxhc3RJbmRleE9mIiwgInZhbGlkSW5kZXgiLCAibWF4IiwgIl9saW1pdFZhbHVlIiwgIk1hdGgiLCAicm91bmQiLCAiX2dldExhYmVsRm9yVmFsdWUiLCAidmFsdWUiLCAiZ2V0TGFiZWxzIiwgImxlbmd0aCIsICJDYXRlZ29yeVNjYWxlIiwgIlNjYWxlIiwgImNvbnN0cnVjdG9yIiwgImNmZyIsICJfc3RhcnRWYWx1ZSIsICJ1bmRlZmluZWQiLCAiX3ZhbHVlUmFuZ2UiLCAiX2FkZGVkTGFiZWxzIiwgImluaXQiLCAic2NhbGVPcHRpb25zIiwgImFkZGVkIiwgInNwbGljZSIsICJwYXJzZSIsICJpc051bGxPclVuZGVmIiwgImlzRmluaXRlIiwgInZhbHVlT3JEZWZhdWx0IiwgImRldGVybWluZURhdGFMaW1pdHMiLCAibWluRGVmaW5lZCIsICJtYXhEZWZpbmVkIiwgImdldFVzZXJCb3VuZHMiLCAibWluIiwgImdldE1pbk1heCIsICJvcHRpb25zIiwgImJvdW5kcyIsICJidWlsZFRpY2tzIiwgIm9mZnNldCIsICJ0aWNrcyIsICJzbGljZSIsICJnZXRMYWJlbEZvclZhbHVlIiwgImNhbGwiLCAiY29uZmlndXJlIiwgImlzSG9yaXpvbnRhbCIsICJfcmV2ZXJzZVBpeGVscyIsICJnZXRQaXhlbEZvclZhbHVlIiwgIk5hTiIsICJnZXRQaXhlbEZvckRlY2ltYWwiLCAiZ2V0UGl4ZWxGb3JUaWNrIiwgImdldFZhbHVlRm9yUGl4ZWwiLCAicGl4ZWwiLCAiZ2V0RGVjaW1hbEZvclBpeGVsIiwgImdldEJhc2VQaXhlbCIsICJib3R0b20iLCAiaWQiLCAiZGVmYXVsdHMiLCAiY2FsbGJhY2siLCAiZ2VuZXJhdGVUaWNrcyIsICJnZW5lcmF0aW9uT3B0aW9ucyIsICJkYXRhUmFuZ2UiLCAiTUlOX1NQQUNJTkciLCAic3RlcCIsICJwcmVjaXNpb24iLCAiY291bnQiLCAibWF4VGlja3MiLCAibWF4RGlnaXRzIiwgImluY2x1ZGVCb3VuZHMiLCAidW5pdCIsICJtYXhTcGFjZXMiLCAicm1pbiIsICJybWF4IiwgImNvdW50RGVmaW5lZCIsICJtaW5TcGFjaW5nIiwgInNwYWNpbmciLCAibmljZU51bSIsICJmYWN0b3IiLCAibmljZU1pbiIsICJuaWNlTWF4IiwgIm51bVNwYWNlcyIsICJjZWlsIiwgImZsb29yIiwgInBvdyIsICJhbG1vc3RXaG9sZSIsICJhbG1vc3RFcXVhbHMiLCAiZGVjaW1hbFBsYWNlcyIsICJfZGVjaW1hbFBsYWNlcyIsICJqIiwgInJlbGF0aXZlTGFiZWxTaXplIiwgInRpY2tWYWx1ZSIsICJob3Jpem9udGFsIiwgIm1pblJvdGF0aW9uIiwgInJhZCIsICJ0b1JhZGlhbnMiLCAicmF0aW8iLCAic2luIiwgImNvcyIsICJMaW5lYXJTY2FsZUJhc2UiLCAic3RhcnQiLCAiZW5kIiwgIl9lbmRWYWx1ZSIsICJOdW1iZXIiLCAiaGFuZGxlVGlja1JhbmdlT3B0aW9ucyIsICJiZWdpbkF0WmVybyIsICJzZXRNaW4iLCAidiIsICJzZXRNYXgiLCAibWluU2lnbiIsICJzaWduIiwgIm1heFNpZ24iLCAiYWJzIiwgImdldFRpY2tMaW1pdCIsICJ0aWNrT3B0cyIsICJtYXhUaWNrc0xpbWl0IiwgInN0ZXBTaXplIiwgImNvbnNvbGUiLCAid2FybiIsICJjb21wdXRlVGlja0xpbWl0IiwgIlBPU0lUSVZFX0lORklOSVRZIiwgIm9wdHMiLCAibnVtZXJpY0dlbmVyYXRvck9wdGlvbnMiLCAiX21heERpZ2l0cyIsICJfcmFuZ2UiLCAiX3NldE1pbkFuZE1heEJ5S2V5IiwgInJldmVyc2UiLCAiZm9ybWF0TnVtYmVyIiwgImNoYXJ0IiwgImxvY2FsZSIsICJmb3JtYXQiLCAiTGluZWFyU2NhbGUiLCAid2lkdGgiLCAiaGVpZ2h0IiwgInRpY2tGb250IiwgIl9yZXNvbHZlVGlja0ZvbnRPcHRpb25zIiwgImxpbmVIZWlnaHQiLCAiVGlja3MiLCAiZm9ybWF0dGVycyIsICJudW1lcmljIiwgImxvZzEwRmxvb3IiLCAibG9nMTAiLCAiY2hhbmdlRXhwb25lbnQiLCAibSIsICJpc01ham9yIiwgInRpY2tWYWwiLCAicmVtYWluIiwgInN0ZXBzIiwgInJhbmdlRXhwIiwgInJhbmdlU3RlcCIsICJzdGFydEV4cCIsICJyYW5nZSIsICJmaW5pdGVPckRlZmF1bHQiLCAibWluRXhwIiwgImV4cCIsICJiYXNlIiwgInNpZ25pZmljYW5kIiwgIm1ham9yIiwgImxhc3RUaWNrIiwgIkxvZ2FyaXRobWljU2NhbGUiLCAicHJvdG90eXBlIiwgImFwcGx5IiwgIl96ZXJvIiwgIl9zdWdnZXN0ZWRNaW4iLCAiX3VzZXJNaW4iLCAiX3VzZXJNYXgiLCAiZGVjaW1hbCIsICJsb2dhcml0aG1pYyIsICJlbmFibGVkIiwgImdldFRpY2tCYWNrZHJvcEhlaWdodCIsICJkaXNwbGF5IiwgInBhZGRpbmciLCAidG9QYWRkaW5nIiwgImJhY2tkcm9wUGFkZGluZyIsICJmb250IiwgInNpemUiLCAibWVhc3VyZUxhYmVsU2l6ZSIsICJjdHgiLCAiaXNBcnJheSIsICJ3IiwgIl9sb25nZXN0VGV4dCIsICJzdHJpbmciLCAiaCIsICJkZXRlcm1pbmVMaW1pdHMiLCAiYW5nbGUiLCAicG9zIiwgImZpdFdpdGhQb2ludExhYmVscyIsICJzY2FsZSIsICJvcmlnIiwgImwiLCAibGVmdCIsICJfcGFkZGluZyIsICJyIiwgInJpZ2h0IiwgInQiLCAidG9wIiwgImIiLCAibGltaXRzIiwgIk9iamVjdCIsICJhc3NpZ24iLCAibGFiZWxTaXplcyIsICJ2YWx1ZUNvdW50IiwgIl9wb2ludExhYmVscyIsICJwb2ludExhYmVsT3B0cyIsICJwb2ludExhYmVscyIsICJhZGRpdGlvbmFsQW5nbGUiLCAiY2VudGVyUG9pbnRMYWJlbHMiLCAiUEkiLCAiaSIsICJzZXRDb250ZXh0IiwgImdldFBvaW50TGFiZWxDb250ZXh0IiwgInBvaW50UG9zaXRpb24iLCAiZ2V0UG9pbnRQb3NpdGlvbiIsICJkcmF3aW5nQXJlYSIsICJwbEZvbnQiLCAidG9Gb250IiwgInRleHRTaXplIiwgImFuZ2xlUmFkaWFucyIsICJfbm9ybWFsaXplQW5nbGUiLCAiZ2V0SW5kZXhBbmdsZSIsICJ0b0RlZ3JlZXMiLCAiaExpbWl0cyIsICJ4IiwgInZMaW1pdHMiLCAieSIsICJ1cGRhdGVMaW1pdHMiLCAic2V0Q2VudGVyUG9pbnQiLCAiX3BvaW50TGFiZWxJdGVtcyIsICJidWlsZFBvaW50TGFiZWxJdGVtcyIsICJjcmVhdGVQb2ludExhYmVsSXRlbSIsICJpdGVtT3B0cyIsICJvdXRlckRpc3RhbmNlIiwgImV4dHJhIiwgInBvaW50TGFiZWxQb3NpdGlvbiIsICJIQUxGX1BJIiwgInlGb3JBbmdsZSIsICJ0ZXh0QWxpZ24iLCAiZ2V0VGV4dEFsaWduRm9yQW5nbGUiLCAibGVmdEZvclRleHRBbGlnbiIsICJ2aXNpYmxlIiwgImlzTm90T3ZlcmxhcHBlZCIsICJpdGVtIiwgImFyZWEiLCAiYXBleGVzSW5BcmVhIiwgIl9pc1BvaW50SW5BcmVhIiwgIml0ZW1zIiwgImFsaWduIiwgImRyYXdQb2ludExhYmVsQm94IiwgImJhY2tkcm9wQ29sb3IiLCAiYm9yZGVyUmFkaXVzIiwgInRvVFJCTENvcm5lcnMiLCAiZmlsbFN0eWxlIiwgImJhY2tkcm9wTGVmdCIsICJiYWNrZHJvcFRvcCIsICJiYWNrZHJvcFdpZHRoIiwgImJhY2tkcm9wSGVpZ2h0IiwgInZhbHVlcyIsICJzb21lIiwgImJlZ2luUGF0aCIsICJhZGRSb3VuZGVkUmVjdFBhdGgiLCAicmFkaXVzIiwgImZpbGwiLCAiZmlsbFJlY3QiLCAiZHJhd1BvaW50TGFiZWxzIiwgImxhYmVsQ291bnQiLCAib3B0c0F0SW5kZXgiLCAicmVuZGVyVGV4dCIsICJjb2xvciIsICJ0ZXh0QmFzZWxpbmUiLCAicGF0aFJhZGl1c0xpbmUiLCAiY2lyY3VsYXIiLCAiYXJjIiwgInhDZW50ZXIiLCAieUNlbnRlciIsICJUQVUiLCAibW92ZVRvIiwgImxpbmVUbyIsICJkcmF3UmFkaXVzTGluZSIsICJncmlkTGluZU9wdHMiLCAiYm9yZGVyT3B0cyIsICJsaW5lV2lkdGgiLCAic2F2ZSIsICJzdHJva2VTdHlsZSIsICJzZXRMaW5lRGFzaCIsICJkYXNoIiwgImxpbmVEYXNoT2Zmc2V0IiwgImRhc2hPZmZzZXQiLCAiY2xvc2VQYXRoIiwgInN0cm9rZSIsICJyZXN0b3JlIiwgImNyZWF0ZVBvaW50TGFiZWxDb250ZXh0IiwgInBhcmVudCIsICJjcmVhdGVDb250ZXh0IiwgInR5cGUiLCAiUmFkaWFsTGluZWFyU2NhbGUiLCAic2V0RGltZW5zaW9ucyIsICJtYXhXaWR0aCIsICJtYXhIZWlnaHQiLCAiZ2VuZXJhdGVUaWNrTGFiZWxzIiwgIm1hcCIsICJjYWxsQ2FsbGJhY2siLCAiZmlsdGVyIiwgImdldERhdGFWaXNpYmlsaXR5IiwgImZpdCIsICJsZWZ0TW92ZW1lbnQiLCAicmlnaHRNb3ZlbWVudCIsICJ0b3BNb3ZlbWVudCIsICJib3R0b21Nb3ZlbWVudCIsICJhbmdsZU11bHRpcGxpZXIiLCAic3RhcnRBbmdsZSIsICJnZXREaXN0YW5jZUZyb21DZW50ZXJGb3JWYWx1ZSIsICJzY2FsaW5nRmFjdG9yIiwgImdldFZhbHVlRm9yRGlzdGFuY2VGcm9tQ2VudGVyIiwgImRpc3RhbmNlIiwgInNjYWxlZERpc3RhbmNlIiwgInBvaW50TGFiZWwiLCAiZ2V0Q29udGV4dCIsICJkaXN0YW5jZUZyb21DZW50ZXIiLCAiZ2V0UG9pbnRQb3NpdGlvbkZvclZhbHVlIiwgImdldEJhc2VQb3NpdGlvbiIsICJnZXRCYXNlVmFsdWUiLCAiZ2V0UG9pbnRMYWJlbFBvc2l0aW9uIiwgImRyYXdCYWNrZ3JvdW5kIiwgImJhY2tncm91bmRDb2xvciIsICJncmlkIiwgImRyYXdHcmlkIiwgImFuZ2xlTGluZXMiLCAiYm9yZGVyIiwgInBvc2l0aW9uIiwgImZvckVhY2giLCAidGljayIsICJjb250ZXh0IiwgIm9wdHNBdEluZGV4Qm9yZGVyIiwgImJvcmRlckRhc2giLCAiYm9yZGVyRGFzaE9mZnNldCIsICJkcmF3Qm9yZGVyIiwgImRyYXdMYWJlbHMiLCAidHJhbnNsYXRlIiwgInJvdGF0ZSIsICJzaG93TGFiZWxCYWNrZHJvcCIsICJtZWFzdXJlVGV4dCIsICJzdHJva2VDb2xvciIsICJ0ZXh0U3Ryb2tlQ29sb3IiLCAic3Ryb2tlV2lkdGgiLCAidGV4dFN0cm9rZVdpZHRoIiwgImRyYXdUaXRsZSIsICJhbmltYXRlIiwgImRlZmF1bHRSb3V0ZXMiLCAiZGVzY3JpcHRvcnMiLCAiX2ZhbGxiYWNrIiwgIklOVEVSVkFMUyIsICJtaWxsaXNlY29uZCIsICJjb21tb24iLCAic2Vjb25kIiwgIm1pbnV0ZSIsICJob3VyIiwgImRheSIsICJ3ZWVrIiwgIm1vbnRoIiwgInF1YXJ0ZXIiLCAieWVhciIsICJVTklUUyIsICJrZXlzIiwgInNvcnRlciIsICJhIiwgImlucHV0IiwgImFkYXB0ZXIiLCAiX2FkYXB0ZXIiLCAicGFyc2VyIiwgImlzb1dlZWtkYXkiLCAiX3BhcnNlT3B0cyIsICJpc051bWJlciIsICJzdGFydE9mIiwgImRldGVybWluZVVuaXRGb3JBdXRvVGlja3MiLCAibWluVW5pdCIsICJjYXBhY2l0eSIsICJpbGVuIiwgImludGVydmFsIiwgIk1BWF9TQUZFX0lOVEVHRVIiLCAiZGV0ZXJtaW5lVW5pdEZvckZvcm1hdHRpbmciLCAibnVtVGlja3MiLCAiZGlmZiIsICJkZXRlcm1pbmVNYWpvclVuaXQiLCAiYWRkVGljayIsICJ0aW1lIiwgInRpbWVzdGFtcHMiLCAibG8iLCAiaGkiLCAiX2xvb2t1cCIsICJ0aW1lc3RhbXAiLCAic2V0TWFqb3JUaWNrcyIsICJtYWpvclVuaXQiLCAiYWRkIiwgInRpY2tzRnJvbVRpbWVzdGFtcHMiLCAiVGltZVNjYWxlIiwgInByb3BzIiwgIl9jYWNoZSIsICJkYXRhIiwgImFsbCIsICJfdW5pdCIsICJfbWFqb3JVbml0IiwgIl9vZmZzZXRzIiwgIl9ub3JtYWxpemVkIiwgInNjYWxlT3B0cyIsICJhZGFwdGVycyIsICJfZGF0ZSIsICJkYXRlIiwgIm1lcmdlSWYiLCAiZGlzcGxheUZvcm1hdHMiLCAiZm9ybWF0cyIsICJub3JtYWxpemVkIiwgImJlZm9yZUxheW91dCIsICJfYXBwbHlCb3VuZHMiLCAiX2dldExhYmVsQm91bmRzIiwgInNvdXJjZSIsICJEYXRlIiwgIm5vdyIsICJlbmRPZiIsICJhcnIiLCAiZ2V0TGFiZWxUaW1lc3RhbXBzIiwgIk5FR0FUSVZFX0lORklOSVRZIiwgInRpbWVPcHRzIiwgIl9nZW5lcmF0ZSIsICJfZmlsdGVyQmV0d2VlbiIsICJhdXRvU2tpcCIsICJfZ2V0TGFiZWxDYXBhY2l0eSIsICJpbml0T2Zmc2V0cyIsICJhZnRlckF1dG9Ta2lwIiwgIm9mZnNldEFmdGVyQXV0b3NraXAiLCAiZ2V0RGVjaW1hbEZvclZhbHVlIiwgImxpbWl0IiwgIm1pbm9yIiwgIndlZWtkYXkiLCAiaGFzV2Vla2RheSIsICJFcnJvciIsICJnZXREYXRhVGltZXN0YW1wcyIsICJzb3J0IiwgInRvb2x0aXBGb3JtYXQiLCAiZGF0ZXRpbWUiLCAiZm10IiwgIl90aWNrRm9ybWF0RnVuY3Rpb24iLCAiZm9ybWF0dGVyIiwgIm1pbm9yRm9ybWF0IiwgIm1ham9yRm9ybWF0IiwgIm9mZnNldHMiLCAiX2dldExhYmVsU2l6ZSIsICJ0aWNrc09wdHMiLCAidGlja0xhYmVsV2lkdGgiLCAibWF4Um90YXRpb24iLCAiY29zUm90YXRpb24iLCAic2luUm90YXRpb24iLCAidGlja0ZvbnRTaXplIiwgImV4YW1wbGVUaW1lIiwgImV4YW1wbGVMYWJlbCIsICJtZXRhcyIsICJnZXRNYXRjaGluZ1Zpc2libGVNZXRhcyIsICJjb250cm9sbGVyIiwgImdldEFsbFBhcnNlZFZhbHVlcyIsICJjb25jYXQiLCAibm9ybWFsaXplIiwgIl9hcnJheVVuaXF1ZSIsICJpbnRlcnBvbGF0ZSIsICJ0YWJsZSIsICJ2YWwiLCAicHJldlNvdXJjZSIsICJuZXh0U291cmNlIiwgInByZXZUYXJnZXQiLCAibmV4dFRhcmdldCIsICJfbG9va3VwQnlLZXkiLCAic3BhbiIsICJUaW1lU2VyaWVzU2NhbGUiLCAiX3RhYmxlIiwgIl9taW5Qb3MiLCAiX3RhYmxlUmFuZ2UiLCAiX2dldFRpbWVzdGFtcHNGb3JUYWJsZSIsICJidWlsZExvb2t1cFRhYmxlIiwgInByZXYiLCAiY3VyciIsICJuZXh0IiwgImluY2x1ZGVzIiwgImFwcCIsICJoIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiYXBwIiwgImltcG9ydF9vYnNpZGlhbiIsICJEZWNrIiwgInBhcnNlIiwgInQiLCAicGFyc2UiLCAic2NoZWR1bGUiLCAiaW1wb3J0X29ic2lkaWFuIiwgIk9ic2lkaWFuR2V0QWxsVGFncyIsICJzY2hlZHVsZSIsICJEZWNrIiwgInJhbmsiLCAiZWFzZSJdCn0K